diff options
-rw-r--r-- | ppapi/api/pp_errors.idl | 7 | ||||
-rw-r--r-- | ppapi/c/pp_errors.h | 9 | ||||
-rw-r--r-- | webkit/plugins/ppapi/ppapi_plugin_instance.cc | 20 | ||||
-rw-r--r-- | webkit/plugins/ppapi/ppapi_plugin_instance.h | 6 | ||||
-rw-r--r-- | webkit/plugins/ppapi/ppb_file_chooser_impl.cc | 5 |
5 files changed, 33 insertions, 14 deletions
diff --git a/ppapi/api/pp_errors.idl b/ppapi/api/pp_errors.idl index 02d065d..fc0ff4a 100644 --- a/ppapi/api/pp_errors.idl +++ b/ppapi/api/pp_errors.idl @@ -111,6 +111,13 @@ */ PP_ERROR_USERCANCEL = -40, /** + * This value indicates failure due to lack of a user gesture such as a + * mouse click or key input event. Examples of actions requiring a user + * gesture are showing the file chooser dialog and going into fullscreen + * mode. + */ + PP_ERROR_NO_USER_GESTURE = -41, + /** * This value indicates that the graphics context was lost due to a * power management event. */ diff --git a/ppapi/c/pp_errors.h b/ppapi/c/pp_errors.h index 76d75df..b02ee1b 100644 --- a/ppapi/c/pp_errors.h +++ b/ppapi/c/pp_errors.h @@ -3,7 +3,7 @@ * found in the LICENSE file. */ -/* From pp_errors.idl modified Thu Jan 5 10:52:49 2012. */ +/* From pp_errors.idl modified Tue Mar 13 17:32:37 2012. */ #ifndef PPAPI_C_PP_ERRORS_H_ #define PPAPI_C_PP_ERRORS_H_ @@ -111,6 +111,13 @@ enum { */ PP_ERROR_USERCANCEL = -40, /** + * This value indicates failure due to lack of a user gesture such as a + * mouse click or key input event. Examples of actions requiring a user + * gesture are showing the file chooser dialog and going into fullscreen + * mode. + */ + PP_ERROR_NO_USER_GESTURE = -41, + /** * This value indicates that the graphics context was lost due to a * power management event. */ diff --git a/webkit/plugins/ppapi/ppapi_plugin_instance.cc b/webkit/plugins/ppapi/ppapi_plugin_instance.cc index ba138d7..91d2f2b 100644 --- a/webkit/plugins/ppapi/ppapi_plugin_instance.cc +++ b/webkit/plugins/ppapi/ppapi_plugin_instance.cc @@ -1245,7 +1245,7 @@ bool PluginInstance::SetFullscreen(bool fullscreen) { if (view_data_.is_fullscreen != desired_fullscreen_state_) return false; - if (fullscreen && !HasUserGesture()) + if (fullscreen && !IsProcessingUserGesture()) return false; VLOG(1) << "Setting fullscreen to " << (fullscreen ? "on" : "off"); @@ -1668,6 +1668,15 @@ bool PluginInstance::IsFullPagePlugin() const { return frame->view()->mainFrame()->document().isPluginDocument(); } +bool PluginInstance::IsProcessingUserGesture() { + PP_TimeTicks now = + ::ppapi::TimeTicksToPPTimeTicks(base::TimeTicks::Now()); + // Give a lot of slack so tests won't be flaky. Well behaved plugins will + // close the user gesture. + const PP_TimeTicks kUserGestureDurationInSeconds = 10.0; + return (now - pending_user_gesture_ < kUserGestureDurationInSeconds); +} + void PluginInstance::OnLockMouseACK(bool succeeded) { if (!lock_mouse_callback_.func) { NOTREACHED(); @@ -1716,15 +1725,6 @@ void PluginInstance::ClosePendingUserGesture(PP_Instance instance, pending_user_gesture_ = 0.0; } -bool PluginInstance::HasUserGesture() { - PP_TimeTicks now = - ::ppapi::TimeTicksToPPTimeTicks(base::TimeTicks::Now()); - // Give a lot of slack so tests won't be flaky. Well behaved plugins will - // close the user gesture. - const PP_TimeTicks kUserGestureDurationInSeconds = 10.0; - return (now - pending_user_gesture_ < kUserGestureDurationInSeconds); -} - PPB_Instance_FunctionAPI* PluginInstance::AsPPB_Instance_FunctionAPI() { return this; } diff --git a/webkit/plugins/ppapi/ppapi_plugin_instance.h b/webkit/plugins/ppapi/ppapi_plugin_instance.h index 915a28e..c9387bb 100644 --- a/webkit/plugins/ppapi/ppapi_plugin_instance.h +++ b/webkit/plugins/ppapi/ppapi_plugin_instance.h @@ -308,6 +308,9 @@ class WEBKIT_PLUGINS_EXPORT PluginInstance : // or embedded in a page). bool IsFullPagePlugin() const; + // Returns true if the plugin is processing a user gesture. + bool IsProcessingUserGesture(); + // A mouse lock request was pending and this reports success or failure. void OnLockMouseACK(bool succeeded); // A mouse lock was in place, but has been lost. @@ -476,9 +479,6 @@ class WEBKIT_PLUGINS_EXPORT PluginInstance : void SetSizeAttributesForFullscreen(); void ResetSizeAttributesAfterFullscreen(); - // Helper function to determine if an action has a user gesture. - bool HasUserGesture(); - PluginDelegate* delegate_; scoped_refptr<PluginModule> module_; scoped_ptr< ::ppapi::PPP_Instance_Combined> instance_interface_; diff --git a/webkit/plugins/ppapi/ppb_file_chooser_impl.cc b/webkit/plugins/ppapi/ppb_file_chooser_impl.cc index 522007c..a7238bb 100644 --- a/webkit/plugins/ppapi/ppb_file_chooser_impl.cc +++ b/webkit/plugins/ppapi/ppb_file_chooser_impl.cc @@ -147,6 +147,11 @@ void PPB_FileChooser_Impl::RunCallback(int32_t result) { } int32_t PPB_FileChooser_Impl::Show(const PP_CompletionCallback& callback) { + PluginInstance* plugin_instance = ResourceHelper::GetPluginInstance(this); + if (!plugin_instance) + return PP_ERROR_FAILED; + if (!plugin_instance->IsProcessingUserGesture()) + return PP_ERROR_NO_USER_GESTURE; return ShowWithoutUserGesture(false, NULL, callback); } |