Index: webkit/plugins/ppapi/ppapi_plugin_instance.cc |
diff --git a/webkit/plugins/ppapi/ppapi_plugin_instance.cc b/webkit/plugins/ppapi/ppapi_plugin_instance.cc |
index f116d6c47af38c8334094379a1a206f86315d8c9..a107380a64339dc5a15448f3efe32cb2ddfd66ac 100644 |
--- a/webkit/plugins/ppapi/ppapi_plugin_instance.cc |
+++ b/webkit/plugins/ppapi/ppapi_plugin_instance.cc |
@@ -304,6 +304,7 @@ PluginInstance::PluginInstance( |
text_input_caret_(0, 0, 0, 0), |
text_input_caret_bounds_(0, 0, 0, 0), |
text_input_caret_set_(false), |
+ mouse_locked_to_this_instance_(false), |
lock_mouse_callback_(PP_BlockUntilComplete()) { |
pp_instance_ = HostGlobals::Get()->AddInstance(this); |
@@ -328,8 +329,10 @@ PluginInstance::~PluginInstance() { |
i != plugin_object_copy.end(); ++i) |
delete *i; |
- if (lock_mouse_callback_.func) |
+ if (lock_mouse_callback_.func) { |
+ mouse_locked_to_this_instance_ = false; |
PP_RunAndClearCompletionCallback(&lock_mouse_callback_, PP_ERROR_ABORTED); |
+ } |
delegate_->InstanceDeleted(this); |
module_->InstanceDeleted(this); |
@@ -1570,18 +1573,30 @@ bool PluginInstance::IsFullPagePlugin() const { |
return frame->view()->mainFrame()->document().isPluginDocument(); |
} |
-void PluginInstance::OnLockMouseACK(int32_t result) { |
+void PluginInstance::OnLockMouseACK2(bool succeeded) { |
+ fprintf(stderr, "PluginInstance::OnLockMouseACK2(%d)\n", succeeded); |
if (!lock_mouse_callback_.func) { |
NOTREACHED(); |
+ fprintf(stderr, "PluginInstance::OnLockMouseACK2 !!!!!\n"); |
return; |
} |
- |
- PP_RunAndClearCompletionCallback(&lock_mouse_callback_, result); |
+ mouse_locked_to_this_instance_ = succeeded; |
+ PP_RunAndClearCompletionCallback(&lock_mouse_callback_, |
+ succeeded ? PP_OK : PP_ERROR_FAILED); |
} |
-void PluginInstance::OnMouseLockLost() { |
+void PluginInstance::OnMouseLockLost2() { |
+ fprintf(stderr, "PluginInstance::OnMouseLockLost2()\n"); |
if (LoadMouseLockInterface()) |
plugin_mouse_lock_interface_->MouseLockLost(pp_instance()); |
+ mouse_locked_to_this_instance_ = false; |
+} |
+ |
+void PluginInstance::HandleMouseLockedInputEvent( |
+ const WebKit::WebMouseEvent& event) { |
+ // |cursor_info| is ignored since it is hidden when the mouse is locked. |
+ WebKit::WebCursorInfo cursor_info; |
+ HandleInputEvent(event, &cursor_info); |
} |
void PluginInstance::SimulateInputEvent(const InputEventData& input_event) { |
@@ -1865,23 +1880,37 @@ void PluginInstance::PostMessage(PP_Instance instance, PP_Var message) { |
int32_t PluginInstance::LockMouse(PP_Instance instance, |
PP_CompletionCallback callback) { |
+ fprintf(stderr, "PluginInstance::LockMouse: "); |
if (!callback.func) { |
// Don't support synchronous call. |
return PP_ERROR_BLOCKS_MAIN_THREAD; |
} |
- if (lock_mouse_callback_.func) |
+ if (lock_mouse_callback_.func) // a lock is pending |
+ { |
+ fprintf(stderr, "lock_mouse_callback_.func PP_ERROR_INPROGRESS\n"); |
return PP_ERROR_INPROGRESS; |
+ } |
+ if (mouse_locked_to_this_instance_) |
+ { |
+ fprintf(stderr, "mouse_locked_to_this_instance_ PP_OK\n"); |
+ return PP_OK; |
+ } |
if (!CanAccessMainFrame()) |
return PP_ERROR_NOACCESS; |
- lock_mouse_callback_ = callback; |
- // We will be notified on completion via OnLockMouseACK(), either |
- // synchronously or asynchronously. |
- delegate()->LockMouse(this); |
- return PP_OK_COMPLETIONPENDING; |
+ if (delegate()->LockMouse(this)) { |
yzshen1
2012/01/04 00:50:00
It seems better to *not* have |mouse_locked_to_thi
|
+ fprintf(stderr, "delegate()->LockMouse(this) == true\n"); |
+ lock_mouse_callback_ = callback; |
+ return PP_OK_COMPLETIONPENDING; |
+ } else |
+ { |
+ fprintf(stderr, "delegate()->LockMouse(this) == false PP_ERROR_FAILED\n"); |
+ return PP_ERROR_FAILED; |
+ } |
} |
void PluginInstance::UnlockMouse(PP_Instance instance) { |
+ fprintf(stderr, "PluginInstance::UnlockMouse\n"); |
delegate()->UnlockMouse(this); |
} |