Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(317)

Unified Diff: webkit/plugins/npapi/webplugin_delegate_impl_win.cc

Issue 7054068: Make sandboxed Flash work under UIPI (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webkit/plugins/npapi/webplugin_delegate_impl_win.cc
===================================================================
--- webkit/plugins/npapi/webplugin_delegate_impl_win.cc (revision 87939)
+++ webkit/plugins/npapi/webplugin_delegate_impl_win.cc (working copy)
@@ -271,9 +271,11 @@
last_message_(0),
is_calling_wndproc(false),
dummy_window_for_activation_(NULL),
+ parent_proxy_window_(NULL),
handle_event_message_filter_hook_(NULL),
handle_event_pump_messages_event_(NULL),
user_gesture_message_posted_(false),
+ is_builtin_flash_(false),
#pragma warning(suppress: 4355) // can use this
user_gesture_msg_factory_(this),
handle_event_depth_(0),
@@ -289,7 +291,9 @@
std::wstring filename =
StringToLowerASCII(plugin_info.path.BaseName().value());
- if (instance_->mime_type() == "application/x-shockwave-flash" ||
+ is_builtin_flash_ = filename == kBuiltinFlashPlugin;
+ if (is_builtin_flash_ ||
+ instance_->mime_type() == "application/x-shockwave-flash" ||
filename == kFlashPlugin) {
// Flash only requests windowless plugins if we return a Mozilla user
// agent.
@@ -354,7 +358,11 @@
WebPluginDelegateImpl::~WebPluginDelegateImpl() {
if (::IsWindow(dummy_window_for_activation_)) {
- ::DestroyWindow(dummy_window_for_activation_);
+ // Sandboxed Flash stacks two dummy windows to prevent UIPI failures
+ if (::IsWindow(parent_proxy_window_))
+ ::DestroyWindow(parent_proxy_window_);
+ else
+ ::DestroyWindow(dummy_window_for_activation_);
}
DestroyInstance();
@@ -492,14 +500,16 @@
0,
0,
0,
ananta 2011/06/07 00:40:08 Please add some comments here which explain what w
cpu_(ooo_6.6-7.5) 2011/06/07 01:03:36 what Ananta said. On 2011/06/07 00:40:08, ananta
- parent_,
+ is_builtin_flash_ ? NULL : parent_,
0,
GetModuleHandle(NULL),
0);
if (windowed_handle_ == 0)
return false;
- if (IsWindow(parent_)) {
+ if (is_builtin_flash_) {
+ plugin_->ReparentPluginWindow(windowed_handle_, parent_);
+ } else if (IsWindow(parent_)) {
// This is a tricky workaround for Issue 2673 in chromium "Flash: IME not
// available". To use IMEs in this window, we have to make Windows attach
// IMEs to this window (i.e. load IME DLLs, attach them to this process,
@@ -705,6 +715,30 @@
bool WebPluginDelegateImpl::CreateDummyWindowForActivation() {
DCHECK(!dummy_window_for_activation_);
+
+ // Built-in Flash runs with UIPI, but in windowless mode Flash sometimes
+ // tries to attach windows to the parent (which fails under UIPI). To make
+ // it work we add an extra dummy parent in the low-integrity process.
+ if (is_builtin_flash_) {
+ parent_proxy_window_ = CreateWindowEx(
+ 0,
+ L"Static",
+ kDummyActivationWindowName,
+ WS_POPUP,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ GetModuleHandle(NULL),
+ 0);
+
+ if (parent_proxy_window_ == 0)
+ return false;
+ plugin_->ReparentPluginWindow(parent_proxy_window_, parent_);
+ }
+
dummy_window_for_activation_ = CreateWindowEx(
0,
L"Static",
@@ -714,7 +748,7 @@
0,
0,
0,
- parent_,
+ parent_proxy_window_ ? parent_proxy_window_ : parent_,
0,
GetModuleHandle(NULL),
0);

Powered by Google App Engine
This is Rietveld 408576698