summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ppapi/api/pp_errors.idl7
-rw-r--r--ppapi/c/pp_errors.h9
-rw-r--r--webkit/plugins/ppapi/ppapi_plugin_instance.cc20
-rw-r--r--webkit/plugins/ppapi/ppapi_plugin_instance.h6
-rw-r--r--webkit/plugins/ppapi/ppb_file_chooser_impl.cc5
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);
}