summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjschuh@chromium.org <jschuh@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-07-26 17:10:59 +0000
committerjschuh@chromium.org <jschuh@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-07-26 17:10:59 +0000
commitd5ac8d05cb71c86efaf859686c5080d293d01d0b (patch)
treedfb932939816410b1777150baf01b5389df56a78
parent6731c6680bafff52524631115515d6b056faca0b (diff)
downloadchromium_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.cc27
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) {