diff options
author | jschuh@chromium.org <jschuh@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-07-26 17:10:59 +0000 |
---|---|---|
committer | jschuh@chromium.org <jschuh@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-07-26 17:10:59 +0000 |
commit | d5ac8d05cb71c86efaf859686c5080d293d01d0b (patch) | |
tree | dfb932939816410b1777150baf01b5389df56a78 | |
parent | 6731c6680bafff52524631115515d6b056faca0b (diff) | |
download | chromium_src-d5ac8d05cb71c86efaf859686c5080d293d01d0b.zip chromium_src-d5ac8d05cb71c86efaf859686c5080d293d01d0b.tar.gz chromium_src-d5ac8d05cb71c86efaf859686c5080d293d01d0b.tar.bz2 |
Merge 148484 - Queue Flash mouselock request if fullscreen is pending
BUG=137264
TBR=viettrungluu
Review URL: https://chromiumcodereview.appspot.com/10824029
TBR=jschuh@chromium.org
Review URL: https://chromiumcodereview.appspot.com/10829039
git-svn-id: svn://svn.chromium.org/chrome/branches/1180/src@148573 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | webkit/plugins/ppapi/ppapi_plugin_instance.cc | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/webkit/plugins/ppapi/ppapi_plugin_instance.cc b/webkit/plugins/ppapi/ppapi_plugin_instance.cc index 64dd325..aa90199 100644 --- a/webkit/plugins/ppapi/ppapi_plugin_instance.cc +++ b/webkit/plugins/ppapi/ppapi_plugin_instance.cc @@ -1333,11 +1333,22 @@ void PluginInstance::FlashSetFullscreen(bool fullscreen, bool delay_report) { } void PluginInstance::UpdateFlashFullscreenState(bool flash_fullscreen) { - if (flash_fullscreen == flash_fullscreen_) + bool is_mouselock_pending = TrackedCallback::IsPending(lock_mouse_callback_); + + if (flash_fullscreen == flash_fullscreen_) { + // Manually clear callback when fullscreen fails with mouselock pending. + if (!flash_fullscreen && is_mouselock_pending) + TrackedCallback::ClearAndRun(&lock_mouse_callback_, PP_ERROR_FAILED); return; + } bool old_plugin_focus = PluginHasFocus(); flash_fullscreen_ = flash_fullscreen; + if (is_mouselock_pending && !delegate()->IsMouseLocked(this)) { + if (!delegate()->LockMouse(this)) + TrackedCallback::ClearAndRun(&lock_mouse_callback_, PP_ERROR_FAILED); + } + if (PluginHasFocus() != old_plugin_focus) SendFocusChangeNotification(); } @@ -1975,12 +1986,16 @@ int32_t PluginInstance::LockMouse(PP_Instance instance, if (!CanAccessMainFrame()) return PP_ERROR_NOACCESS; - if (delegate()->LockMouse(this)) { - lock_mouse_callback_ = callback; - return PP_OK_COMPLETIONPENDING; - } else { - return PP_ERROR_FAILED; + // Attempt mouselock only if Flash isn't waiting on fullscreen, otherwise + // we wait and call LockMouse() in UpdateFlashFullscreenState(). + if (!FlashIsFullscreenOrPending() || flash_fullscreen()) { + if (!delegate()->LockMouse(this)) + return PP_ERROR_FAILED; } + + // Either mouselock succeeded or a Flash fullscreen is pending. + lock_mouse_callback_ = callback; + return PP_OK_COMPLETIONPENDING; } void PluginInstance::UnlockMouse(PP_Instance instance) { |