OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "webkit/plugins/ppapi/ppapi_plugin_instance.h" | 5 #include "webkit/plugins/ppapi/ppapi_plugin_instance.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/debug/trace_event.h" | 8 #include "base/debug/trace_event.h" |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/memory/linked_ptr.h" | 10 #include "base/memory/linked_ptr.h" |
(...skipping 1657 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1668 // Don't actually verify that the object is in the set since during module | 1668 // Don't actually verify that the object is in the set since during module |
1669 // deletion we'll be in the process of freeing them. | 1669 // deletion we'll be in the process of freeing them. |
1670 live_plugin_objects_.erase(plugin_object); | 1670 live_plugin_objects_.erase(plugin_object); |
1671 } | 1671 } |
1672 | 1672 |
1673 bool PluginInstance::IsFullPagePlugin() const { | 1673 bool PluginInstance::IsFullPagePlugin() const { |
1674 WebFrame* frame = container()->element().document().frame(); | 1674 WebFrame* frame = container()->element().document().frame(); |
1675 return frame->view()->mainFrame()->document().isPluginDocument(); | 1675 return frame->view()->mainFrame()->document().isPluginDocument(); |
1676 } | 1676 } |
1677 | 1677 |
1678 void PluginInstance::OnLockMouseACK(int32_t result) { | 1678 void PluginInstance::OnLockMouseACK(bool succeeded) { |
1679 if (!lock_mouse_callback_.func) { | 1679 if (!lock_mouse_callback_.func) { |
1680 NOTREACHED(); | 1680 NOTREACHED(); |
1681 return; | 1681 return; |
1682 } | 1682 } |
1683 | 1683 PP_RunAndClearCompletionCallback(&lock_mouse_callback_, |
1684 PP_RunAndClearCompletionCallback(&lock_mouse_callback_, result); | 1684 succeeded ? PP_OK : PP_ERROR_FAILED); |
1685 } | 1685 } |
1686 | 1686 |
1687 void PluginInstance::OnMouseLockLost() { | 1687 void PluginInstance::OnMouseLockLost() { |
1688 if (LoadMouseLockInterface()) | 1688 if (LoadMouseLockInterface()) |
1689 plugin_mouse_lock_interface_->MouseLockLost(pp_instance()); | 1689 plugin_mouse_lock_interface_->MouseLockLost(pp_instance()); |
1690 } | 1690 } |
1691 | 1691 |
1692 void PluginInstance::HandleMouseLockedInputEvent( | |
1693 const WebKit::WebMouseEvent& event) { | |
1694 // |cursor_info| is ignored since it is hidden when the mouse is locked. | |
1695 WebKit::WebCursorInfo cursor_info; | |
1696 HandleInputEvent(event, &cursor_info); | |
1697 } | |
1698 | |
1692 void PluginInstance::SimulateInputEvent(const InputEventData& input_event) { | 1699 void PluginInstance::SimulateInputEvent(const InputEventData& input_event) { |
1693 WebView* web_view = container()->element().document().frame()->view(); | 1700 WebView* web_view = container()->element().document().frame()->view(); |
1694 if (!web_view) { | 1701 if (!web_view) { |
1695 NOTREACHED(); | 1702 NOTREACHED(); |
1696 return; | 1703 return; |
1697 } | 1704 } |
1698 | 1705 |
1699 std::vector<linked_ptr<WebInputEvent> > events = | 1706 std::vector<linked_ptr<WebInputEvent> > events = |
1700 CreateSimulatedWebInputEvents( | 1707 CreateSimulatedWebInputEvents( |
1701 input_event, | 1708 input_event, |
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1967 void PluginInstance::PostMessage(PP_Instance instance, PP_Var message) { | 1974 void PluginInstance::PostMessage(PP_Instance instance, PP_Var message) { |
1968 message_channel_->PostMessageToJavaScript(message); | 1975 message_channel_->PostMessageToJavaScript(message); |
1969 } | 1976 } |
1970 | 1977 |
1971 int32_t PluginInstance::LockMouse(PP_Instance instance, | 1978 int32_t PluginInstance::LockMouse(PP_Instance instance, |
1972 PP_CompletionCallback callback) { | 1979 PP_CompletionCallback callback) { |
1973 if (!callback.func) { | 1980 if (!callback.func) { |
1974 // Don't support synchronous call. | 1981 // Don't support synchronous call. |
1975 return PP_ERROR_BLOCKS_MAIN_THREAD; | 1982 return PP_ERROR_BLOCKS_MAIN_THREAD; |
1976 } | 1983 } |
1977 if (lock_mouse_callback_.func) | 1984 if (lock_mouse_callback_.func) // A lock is pending. |
1978 return PP_ERROR_INPROGRESS; | 1985 return PP_ERROR_INPROGRESS; |
1986 | |
1987 if (delegate()->IsMouseLocked(this)) | |
1988 return PP_OK; | |
1989 | |
1979 if (!CanAccessMainFrame()) | 1990 if (!CanAccessMainFrame()) |
1980 return PP_ERROR_NOACCESS; | 1991 return PP_ERROR_NOACCESS; |
1981 | 1992 |
1982 lock_mouse_callback_ = callback; | 1993 if (delegate()->LockMouse(this)) { |
1983 // We will be notified on completion via OnLockMouseACK(), either | 1994 lock_mouse_callback_ = callback; |
1984 // synchronously or asynchronously. | 1995 return PP_OK_COMPLETIONPENDING; |
1985 delegate()->LockMouse(this); | 1996 } else { |
1986 return PP_OK_COMPLETIONPENDING; | 1997 return PP_ERROR_FAILED; |
piman
2012/01/18 19:00:59
This function doesn't respect the "always asynchro
yzshen1
2012/01/18 19:21:42
I think that semantics is guaranteed by the thunk
piman
2012/01/18 19:26:00
Ah, ok, that works too. Thanks!
| |
1998 } | |
1987 } | 1999 } |
1988 | 2000 |
1989 void PluginInstance::UnlockMouse(PP_Instance instance) { | 2001 void PluginInstance::UnlockMouse(PP_Instance instance) { |
1990 delegate()->UnlockMouse(this); | 2002 delegate()->UnlockMouse(this); |
1991 } | 2003 } |
1992 | 2004 |
1993 PP_Var PluginInstance::ResolveRelativeToDocument( | 2005 PP_Var PluginInstance::ResolveRelativeToDocument( |
1994 PP_Instance instance, | 2006 PP_Instance instance, |
1995 PP_Var relative, | 2007 PP_Var relative, |
1996 PP_URLComponents_Dev* components) { | 2008 PP_URLComponents_Dev* components) { |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2111 screen_size_for_fullscreen_ = gfx::Size(); | 2123 screen_size_for_fullscreen_ = gfx::Size(); |
2112 WebElement element = container_->element(); | 2124 WebElement element = container_->element(); |
2113 element.setAttribute(WebString::fromUTF8(kWidth), width_before_fullscreen_); | 2125 element.setAttribute(WebString::fromUTF8(kWidth), width_before_fullscreen_); |
2114 element.setAttribute(WebString::fromUTF8(kHeight), height_before_fullscreen_); | 2126 element.setAttribute(WebString::fromUTF8(kHeight), height_before_fullscreen_); |
2115 element.setAttribute(WebString::fromUTF8(kBorder), border_before_fullscreen_); | 2127 element.setAttribute(WebString::fromUTF8(kBorder), border_before_fullscreen_); |
2116 element.setAttribute(WebString::fromUTF8(kStyle), style_before_fullscreen_); | 2128 element.setAttribute(WebString::fromUTF8(kStyle), style_before_fullscreen_); |
2117 } | 2129 } |
2118 | 2130 |
2119 } // namespace ppapi | 2131 } // namespace ppapi |
2120 } // namespace webkit | 2132 } // namespace webkit |
OLD | NEW |