Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 286 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 297 desired_fullscreen_state_(false), | 297 desired_fullscreen_state_(false), |
| 298 fullscreen_(false), | 298 fullscreen_(false), |
| 299 message_channel_(NULL), | 299 message_channel_(NULL), |
| 300 sad_plugin_(NULL), | 300 sad_plugin_(NULL), |
| 301 input_event_mask_(0), | 301 input_event_mask_(0), |
| 302 filtered_input_event_mask_(0), | 302 filtered_input_event_mask_(0), |
| 303 text_input_type_(kPluginDefaultTextInputType), | 303 text_input_type_(kPluginDefaultTextInputType), |
| 304 text_input_caret_(0, 0, 0, 0), | 304 text_input_caret_(0, 0, 0, 0), |
| 305 text_input_caret_bounds_(0, 0, 0, 0), | 305 text_input_caret_bounds_(0, 0, 0, 0), |
| 306 text_input_caret_set_(false), | 306 text_input_caret_set_(false), |
| 307 mouse_locked_to_this_instance_(false), | |
| 307 lock_mouse_callback_(PP_BlockUntilComplete()) { | 308 lock_mouse_callback_(PP_BlockUntilComplete()) { |
| 308 pp_instance_ = HostGlobals::Get()->AddInstance(this); | 309 pp_instance_ = HostGlobals::Get()->AddInstance(this); |
| 309 | 310 |
| 310 memset(¤t_print_settings_, 0, sizeof(current_print_settings_)); | 311 memset(¤t_print_settings_, 0, sizeof(current_print_settings_)); |
| 311 DCHECK(delegate); | 312 DCHECK(delegate); |
| 312 module_->InstanceCreated(this); | 313 module_->InstanceCreated(this); |
| 313 delegate_->InstanceCreated(this); | 314 delegate_->InstanceCreated(this); |
| 314 message_channel_.reset(new MessageChannel(this)); | 315 message_channel_.reset(new MessageChannel(this)); |
| 315 } | 316 } |
| 316 | 317 |
| 317 PluginInstance::~PluginInstance() { | 318 PluginInstance::~PluginInstance() { |
| 318 DCHECK(!fullscreen_container_); | 319 DCHECK(!fullscreen_container_); |
| 319 | 320 |
| 320 // Free all the plugin objects. This will automatically clear the back- | 321 // Free all the plugin objects. This will automatically clear the back- |
| 321 // pointer from the NPObject so WebKit can't call into the plugin any more. | 322 // pointer from the NPObject so WebKit can't call into the plugin any more. |
| 322 // | 323 // |
| 323 // Swap out the set so we can delete from it (the objects will try to | 324 // Swap out the set so we can delete from it (the objects will try to |
| 324 // unregister themselves inside the delete call). | 325 // unregister themselves inside the delete call). |
| 325 PluginObjectSet plugin_object_copy; | 326 PluginObjectSet plugin_object_copy; |
| 326 live_plugin_objects_.swap(plugin_object_copy); | 327 live_plugin_objects_.swap(plugin_object_copy); |
| 327 for (PluginObjectSet::iterator i = plugin_object_copy.begin(); | 328 for (PluginObjectSet::iterator i = plugin_object_copy.begin(); |
| 328 i != plugin_object_copy.end(); ++i) | 329 i != plugin_object_copy.end(); ++i) |
| 329 delete *i; | 330 delete *i; |
| 330 | 331 |
| 331 if (lock_mouse_callback_.func) | 332 if (lock_mouse_callback_.func) { |
| 333 mouse_locked_to_this_instance_ = false; | |
| 332 PP_RunAndClearCompletionCallback(&lock_mouse_callback_, PP_ERROR_ABORTED); | 334 PP_RunAndClearCompletionCallback(&lock_mouse_callback_, PP_ERROR_ABORTED); |
| 335 } | |
| 333 | 336 |
| 334 delegate_->InstanceDeleted(this); | 337 delegate_->InstanceDeleted(this); |
| 335 module_->InstanceDeleted(this); | 338 module_->InstanceDeleted(this); |
| 336 | 339 |
| 337 HostGlobals::Get()->InstanceDeleted(pp_instance_); | 340 HostGlobals::Get()->InstanceDeleted(pp_instance_); |
| 338 } | 341 } |
| 339 | 342 |
| 340 // NOTE: Any of these methods that calls into the plugin needs to take into | 343 // NOTE: Any of these methods that calls into the plugin needs to take into |
| 341 // account that the plugin may use Var to remove the <embed> from the DOM, which | 344 // account that the plugin may use Var to remove the <embed> from the DOM, which |
| 342 // will make the WebPluginImpl drop its reference, usually the last one. If a | 345 // will make the WebPluginImpl drop its reference, usually the last one. If a |
| (...skipping 1220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1563 // Don't actually verify that the object is in the set since during module | 1566 // Don't actually verify that the object is in the set since during module |
| 1564 // deletion we'll be in the process of freeing them. | 1567 // deletion we'll be in the process of freeing them. |
| 1565 live_plugin_objects_.erase(plugin_object); | 1568 live_plugin_objects_.erase(plugin_object); |
| 1566 } | 1569 } |
| 1567 | 1570 |
| 1568 bool PluginInstance::IsFullPagePlugin() const { | 1571 bool PluginInstance::IsFullPagePlugin() const { |
| 1569 WebFrame* frame = container()->element().document().frame(); | 1572 WebFrame* frame = container()->element().document().frame(); |
| 1570 return frame->view()->mainFrame()->document().isPluginDocument(); | 1573 return frame->view()->mainFrame()->document().isPluginDocument(); |
| 1571 } | 1574 } |
| 1572 | 1575 |
| 1573 void PluginInstance::OnLockMouseACK(int32_t result) { | 1576 void PluginInstance::OnLockMouseACK2(bool succeeded) { |
| 1577 fprintf(stderr, "PluginInstance::OnLockMouseACK2(%d)\n", succeeded); | |
| 1574 if (!lock_mouse_callback_.func) { | 1578 if (!lock_mouse_callback_.func) { |
| 1575 NOTREACHED(); | 1579 NOTREACHED(); |
| 1580 fprintf(stderr, "PluginInstance::OnLockMouseACK2 !!!!!\n"); | |
| 1576 return; | 1581 return; |
| 1577 } | 1582 } |
| 1578 | 1583 mouse_locked_to_this_instance_ = succeeded; |
| 1579 PP_RunAndClearCompletionCallback(&lock_mouse_callback_, result); | 1584 PP_RunAndClearCompletionCallback(&lock_mouse_callback_, |
| 1585 succeeded ? PP_OK : PP_ERROR_FAILED); | |
| 1580 } | 1586 } |
| 1581 | 1587 |
| 1582 void PluginInstance::OnMouseLockLost() { | 1588 void PluginInstance::OnMouseLockLost2() { |
| 1589 fprintf(stderr, "PluginInstance::OnMouseLockLost2()\n"); | |
| 1583 if (LoadMouseLockInterface()) | 1590 if (LoadMouseLockInterface()) |
| 1584 plugin_mouse_lock_interface_->MouseLockLost(pp_instance()); | 1591 plugin_mouse_lock_interface_->MouseLockLost(pp_instance()); |
| 1592 mouse_locked_to_this_instance_ = false; | |
| 1593 } | |
| 1594 | |
| 1595 void PluginInstance::HandleMouseLockedInputEvent( | |
| 1596 const WebKit::WebMouseEvent& event) { | |
| 1597 // |cursor_info| is ignored since it is hidden when the mouse is locked. | |
| 1598 WebKit::WebCursorInfo cursor_info; | |
| 1599 HandleInputEvent(event, &cursor_info); | |
| 1585 } | 1600 } |
| 1586 | 1601 |
| 1587 void PluginInstance::SimulateInputEvent(const InputEventData& input_event) { | 1602 void PluginInstance::SimulateInputEvent(const InputEventData& input_event) { |
| 1588 WebView* web_view = container()->element().document().frame()->view(); | 1603 WebView* web_view = container()->element().document().frame()->view(); |
| 1589 if (!web_view) { | 1604 if (!web_view) { |
| 1590 NOTREACHED(); | 1605 NOTREACHED(); |
| 1591 return; | 1606 return; |
| 1592 } | 1607 } |
| 1593 | 1608 |
| 1594 std::vector<linked_ptr<WebInputEvent> > events = | 1609 std::vector<linked_ptr<WebInputEvent> > events = |
| (...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1858 } | 1873 } |
| 1859 delegate()->ZoomLimitsChanged(minimum_factor, maximium_factor); | 1874 delegate()->ZoomLimitsChanged(minimum_factor, maximium_factor); |
| 1860 } | 1875 } |
| 1861 | 1876 |
| 1862 void PluginInstance::PostMessage(PP_Instance instance, PP_Var message) { | 1877 void PluginInstance::PostMessage(PP_Instance instance, PP_Var message) { |
| 1863 message_channel_->PostMessageToJavaScript(message); | 1878 message_channel_->PostMessageToJavaScript(message); |
| 1864 } | 1879 } |
| 1865 | 1880 |
| 1866 int32_t PluginInstance::LockMouse(PP_Instance instance, | 1881 int32_t PluginInstance::LockMouse(PP_Instance instance, |
| 1867 PP_CompletionCallback callback) { | 1882 PP_CompletionCallback callback) { |
| 1883 fprintf(stderr, "PluginInstance::LockMouse: "); | |
| 1868 if (!callback.func) { | 1884 if (!callback.func) { |
| 1869 // Don't support synchronous call. | 1885 // Don't support synchronous call. |
| 1870 return PP_ERROR_BLOCKS_MAIN_THREAD; | 1886 return PP_ERROR_BLOCKS_MAIN_THREAD; |
| 1871 } | 1887 } |
| 1872 if (lock_mouse_callback_.func) | 1888 if (lock_mouse_callback_.func) // a lock is pending |
| 1889 { | |
| 1890 fprintf(stderr, "lock_mouse_callback_.func PP_ERROR_INPROGRESS\n"); | |
| 1873 return PP_ERROR_INPROGRESS; | 1891 return PP_ERROR_INPROGRESS; |
| 1892 } | |
| 1893 if (mouse_locked_to_this_instance_) | |
| 1894 { | |
| 1895 fprintf(stderr, "mouse_locked_to_this_instance_ PP_OK\n"); | |
| 1896 return PP_OK; | |
| 1897 } | |
| 1874 if (!CanAccessMainFrame()) | 1898 if (!CanAccessMainFrame()) |
| 1875 return PP_ERROR_NOACCESS; | 1899 return PP_ERROR_NOACCESS; |
| 1876 | 1900 |
| 1877 lock_mouse_callback_ = callback; | 1901 if (delegate()->LockMouse(this)) { |
|
yzshen1
2012/01/04 00:50:00
It seems better to *not* have |mouse_locked_to_thi
| |
| 1878 // We will be notified on completion via OnLockMouseACK(), either | 1902 fprintf(stderr, "delegate()->LockMouse(this) == true\n"); |
| 1879 // synchronously or asynchronously. | 1903 lock_mouse_callback_ = callback; |
| 1880 delegate()->LockMouse(this); | 1904 return PP_OK_COMPLETIONPENDING; |
| 1881 return PP_OK_COMPLETIONPENDING; | 1905 } else |
| 1906 { | |
| 1907 fprintf(stderr, "delegate()->LockMouse(this) == false PP_ERROR_FAILED\n"); | |
| 1908 return PP_ERROR_FAILED; | |
| 1909 } | |
| 1882 } | 1910 } |
| 1883 | 1911 |
| 1884 void PluginInstance::UnlockMouse(PP_Instance instance) { | 1912 void PluginInstance::UnlockMouse(PP_Instance instance) { |
| 1913 fprintf(stderr, "PluginInstance::UnlockMouse\n"); | |
| 1885 delegate()->UnlockMouse(this); | 1914 delegate()->UnlockMouse(this); |
| 1886 } | 1915 } |
| 1887 | 1916 |
| 1888 PP_Var PluginInstance::ResolveRelativeToDocument( | 1917 PP_Var PluginInstance::ResolveRelativeToDocument( |
| 1889 PP_Instance instance, | 1918 PP_Instance instance, |
| 1890 PP_Var relative, | 1919 PP_Var relative, |
| 1891 PP_URLComponents_Dev* components) { | 1920 PP_URLComponents_Dev* components) { |
| 1892 StringVar* relative_string = StringVar::FromPPVar(relative); | 1921 StringVar* relative_string = StringVar::FromPPVar(relative); |
| 1893 if (!relative_string) | 1922 if (!relative_string) |
| 1894 return PP_MakeNull(); | 1923 return PP_MakeNull(); |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2014 screen_size_for_fullscreen_ = gfx::Size(); | 2043 screen_size_for_fullscreen_ = gfx::Size(); |
| 2015 WebElement element = container_->element(); | 2044 WebElement element = container_->element(); |
| 2016 element.setAttribute(WebString::fromUTF8(kWidth), width_before_fullscreen_); | 2045 element.setAttribute(WebString::fromUTF8(kWidth), width_before_fullscreen_); |
| 2017 element.setAttribute(WebString::fromUTF8(kHeight), height_before_fullscreen_); | 2046 element.setAttribute(WebString::fromUTF8(kHeight), height_before_fullscreen_); |
| 2018 element.setAttribute(WebString::fromUTF8(kBorder), border_before_fullscreen_); | 2047 element.setAttribute(WebString::fromUTF8(kBorder), border_before_fullscreen_); |
| 2019 element.setAttribute(WebString::fromUTF8(kStyle), style_before_fullscreen_); | 2048 element.setAttribute(WebString::fromUTF8(kStyle), style_before_fullscreen_); |
| 2020 } | 2049 } |
| 2021 | 2050 |
| 2022 } // namespace ppapi | 2051 } // namespace ppapi |
| 2023 } // namespace webkit | 2052 } // namespace webkit |
| OLD | NEW |