From 82a5bb125933fba4f81c1fc2bf0db31bad7e70f4 Mon Sep 17 00:00:00 2001 From: Marshall Greenblatt Date: Tue, 10 May 2011 15:47:46 +0000 Subject: [PATCH] Force Flash and Silverlight plugins to use opaque (windowless) mode when rendering off-screen (issue #214). git-svn-id: https://chromiumembedded.googlecode.com/svn/trunk@229 5089003a-bbd8-11dd-ad1f-f1f9622dbc98 --- libcef/browser_webview_delegate.cc | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/libcef/browser_webview_delegate.cc b/libcef/browser_webview_delegate.cc index cf6035bc5..8889a3e1c 100644 --- a/libcef/browser_webview_delegate.cc +++ b/libcef/browser_webview_delegate.cc @@ -557,6 +557,36 @@ WebPlugin* BrowserWebViewDelegate::createPlugin( return NULL; } + if (browser_->IsWindowRenderingDisabled()) { + bool flash = LowerCaseEqualsASCII(params.mimeType.utf8(), + "application/x-shockwave-flash"); + bool silverlight = StartsWithASCII(params.mimeType.utf8(), + "application/x-silverlight", false); + + if (flash || silverlight) { + // Force Flash and Silverlight plugins to use opaque (windowless) mode. + DCHECK(params.attributeNames.size() == params.attributeValues.size()); + size_t size = params.attributeNames.size(); + + WebVector new_names(size+1), new_values(size+1); + + for (size_t i = 0; i < size; ++i) { + new_names[i] = params.attributeNames[i]; + new_values[i] = params.attributeValues[i]; + } + + new_names[size] = "wmode"; + new_values[size] = "opaque"; + + WebPluginParams new_params = params; + new_params.attributeNames.swap(new_names); + new_params.attributeValues.swap(new_values); + + return new webkit::npapi::WebPluginImpl( + frame, new_params, info.path, actual_mime_type, AsWeakPtr()); + } + } + return new webkit::npapi::WebPluginImpl( frame, params, info.path, actual_mime_type, AsWeakPtr()); }