| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 #ifndef CHROME_PLUGIN_WEBPLUGIN_PROXY_H_ | 5 #ifndef CHROME_PLUGIN_WEBPLUGIN_PROXY_H_ |
| 6 #define CHROME_PLUGIN_WEBPLUGIN_PROXY_H_ | 6 #define CHROME_PLUGIN_WEBPLUGIN_PROXY_H_ |
| 7 #pragma once | 7 #pragma once |
| 8 | 8 |
| 9 #include <string> | 9 #include <string> |
| 10 | 10 |
| 11 #if defined(USE_X11) | 11 #if defined(USE_X11) |
| 12 #include "app/x11_util.h" | 12 #include "app/x11_util.h" |
| 13 #endif | 13 #endif |
| 14 #include "app/surface/transport_dib.h" | 14 #include "app/surface/transport_dib.h" |
| 15 #include "base/hash_tables.h" | 15 #include "base/hash_tables.h" |
| 16 #include "base/ref_counted.h" | 16 #include "base/ref_counted.h" |
| 17 #if defined(OS_MACOSX) | 17 #if defined(OS_MACOSX) |
| 18 #include "base/mac/scoped_cftyperef.h" | 18 #include "base/mac/scoped_cftyperef.h" |
| 19 #endif | 19 #endif |
| 20 #include "base/scoped_handle.h" | 20 #include "base/scoped_handle.h" |
| 21 #include "base/scoped_ptr.h" | 21 #include "base/scoped_ptr.h" |
| 22 #include "base/shared_memory.h" | 22 #include "base/shared_memory.h" |
| 23 #include "base/timer.h" | 23 #include "base/timer.h" |
| 24 #include "chrome/common/chrome_plugin_api.h" | 24 #include "chrome/common/chrome_plugin_api.h" |
| 25 #include "googleurl/src/gurl.h" | 25 #include "googleurl/src/gurl.h" |
| 26 #include "ipc/ipc_message.h" | 26 #include "ipc/ipc_message.h" |
| 27 #include "webkit/plugins/npapi/webplugin.h" | 27 #include "webkit/glue/plugins/webplugin.h" |
| 28 | 28 |
| 29 class PluginChannel; | 29 class PluginChannel; |
| 30 | |
| 31 namespace webkit { | |
| 32 namespace npapi { | |
| 33 class WebPluginDelegateImpl; | 30 class WebPluginDelegateImpl; |
| 34 } | |
| 35 } | |
| 36 | |
| 37 #if defined(OS_MACOSX) | 31 #if defined(OS_MACOSX) |
| 38 class WebPluginAcceleratedSurfaceProxy; | 32 class WebPluginAcceleratedSurfaceProxy; |
| 39 #endif | 33 #endif |
| 40 | 34 |
| 41 // This is an implementation of WebPlugin that proxies all calls to the | 35 // This is an implementation of WebPlugin that proxies all calls to the |
| 42 // renderer. | 36 // renderer. |
| 43 class WebPluginProxy : public webkit::npapi::WebPlugin { | 37 class WebPluginProxy : public webkit_glue::WebPlugin { |
| 44 public: | 38 public: |
| 45 // Creates a new proxy for WebPlugin, using the given sender to send the | 39 // Creates a new proxy for WebPlugin, using the given sender to send the |
| 46 // marshalled WebPlugin calls. | 40 // marshalled WebPlugin calls. |
| 47 WebPluginProxy(PluginChannel* channel, | 41 WebPluginProxy(PluginChannel* channel, |
| 48 int route_id, | 42 int route_id, |
| 49 const GURL& page_url, | 43 const GURL& page_url, |
| 50 gfx::NativeViewId containing_window, | 44 gfx::NativeViewId containing_window, |
| 51 int host_render_view_routing_id); | 45 int host_render_view_routing_id); |
| 52 ~WebPluginProxy(); | 46 ~WebPluginProxy(); |
| 53 | 47 |
| 54 void set_delegate(webkit::npapi::WebPluginDelegateImpl* d) { delegate_ = d; } | 48 void set_delegate(WebPluginDelegateImpl* d) { delegate_ = d; } |
| 55 | 49 |
| 56 // WebPlugin overrides | 50 // WebPlugin overrides |
| 57 virtual void SetWindow(gfx::PluginWindowHandle window); | 51 virtual void SetWindow(gfx::PluginWindowHandle window); |
| 58 | 52 |
| 59 // Whether input events should be sent to the delegate. | 53 // Whether input events should be sent to the delegate. |
| 60 virtual void SetAcceptsInputEvents(bool accepts); | 54 virtual void SetAcceptsInputEvents(bool accepts); |
| 61 | 55 |
| 62 virtual void WillDestroyWindow(gfx::PluginWindowHandle window); | 56 virtual void WillDestroyWindow(gfx::PluginWindowHandle window); |
| 63 #if defined(OS_WIN) | 57 #if defined(OS_WIN) |
| 64 void SetWindowlessPumpEvent(HANDLE pump_messages_event); | 58 void SetWindowlessPumpEvent(HANDLE pump_messages_event); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 92 // Retrieves the browsing context associated with the renderer this plugin | 86 // Retrieves the browsing context associated with the renderer this plugin |
| 93 // is in. Calling multiple times will return the same value. | 87 // is in. Calling multiple times will return the same value. |
| 94 CPBrowsingContext GetCPBrowsingContext(); | 88 CPBrowsingContext GetCPBrowsingContext(); |
| 95 | 89 |
| 96 // Retrieves the WebPluginProxy for the given context that was returned by | 90 // Retrieves the WebPluginProxy for the given context that was returned by |
| 97 // GetCPBrowsingContext, or NULL if not found. | 91 // GetCPBrowsingContext, or NULL if not found. |
| 98 static WebPluginProxy* FromCPBrowsingContext(CPBrowsingContext context); | 92 static WebPluginProxy* FromCPBrowsingContext(CPBrowsingContext context); |
| 99 | 93 |
| 100 // Returns a WebPluginResourceClient object given its id, or NULL if no | 94 // Returns a WebPluginResourceClient object given its id, or NULL if no |
| 101 // object with that id exists. | 95 // object with that id exists. |
| 102 webkit::npapi::WebPluginResourceClient* GetResourceClient(int id); | 96 webkit_glue::WebPluginResourceClient* GetResourceClient(int id); |
| 103 | 97 |
| 104 // Returns the id of the renderer that contains this plugin. | 98 // Returns the id of the renderer that contains this plugin. |
| 105 int GetRendererId(); | 99 int GetRendererId(); |
| 106 | 100 |
| 107 // Returns the id of the associated render view. | 101 // Returns the id of the associated render view. |
| 108 int host_render_view_routing_id() const { | 102 int host_render_view_routing_id() const { |
| 109 return host_render_view_routing_id_; | 103 return host_render_view_routing_id_; |
| 110 } | 104 } |
| 111 | 105 |
| 112 // For windowless plugins, paints the given rectangle into the local buffer. | 106 // For windowless plugins, paints the given rectangle into the local buffer. |
| 113 void Paint(const gfx::Rect& rect); | 107 void Paint(const gfx::Rect& rect); |
| 114 | 108 |
| 115 // Callback from the renderer to let us know that a paint occurred. | 109 // Callback from the renderer to let us know that a paint occurred. |
| 116 void DidPaint(); | 110 void DidPaint(); |
| 117 | 111 |
| 118 // Notification received on a plugin issued resource request creation. | 112 // Notification received on a plugin issued resource request creation. |
| 119 void OnResourceCreated(int resource_id, | 113 void OnResourceCreated(int resource_id, |
| 120 webkit::npapi::WebPluginResourceClient* client); | 114 webkit_glue::WebPluginResourceClient* client); |
| 121 | 115 |
| 122 virtual void HandleURLRequest(const char* url, | 116 virtual void HandleURLRequest(const char* url, |
| 123 const char* method, | 117 const char* method, |
| 124 const char* target, | 118 const char* target, |
| 125 const char* buf, | 119 const char* buf, |
| 126 unsigned int len, | 120 unsigned int len, |
| 127 int notify_id, | 121 int notify_id, |
| 128 bool popups_allowed, | 122 bool popups_allowed, |
| 129 bool notify_redirects); | 123 bool notify_redirects); |
| 130 void UpdateGeometry(const gfx::Rect& window_rect, | 124 void UpdateGeometry(const gfx::Rect& window_rect, |
| 131 const gfx::Rect& clip_rect, | 125 const gfx::Rect& clip_rect, |
| 132 const TransportDIB::Handle& windowless_buffer, | 126 const TransportDIB::Handle& windowless_buffer, |
| 133 const TransportDIB::Handle& background_buffer, | 127 const TransportDIB::Handle& background_buffer, |
| 134 bool transparent | 128 bool transparent |
| 135 #if defined(OS_MACOSX) | 129 #if defined(OS_MACOSX) |
| 136 , | 130 , |
| 137 int ack_key | 131 int ack_key |
| 138 #endif | 132 #endif |
| 139 ); | 133 ); |
| 140 virtual void CancelDocumentLoad(); | 134 virtual void CancelDocumentLoad(); |
| 141 virtual void InitiateHTTPRangeRequest( | 135 virtual void InitiateHTTPRangeRequest( |
| 142 const char* url, const char* range_info, int range_request_id); | 136 const char* url, const char* range_info, int range_request_id); |
| 143 virtual void SetDeferResourceLoading(unsigned long resource_id, bool defer); | 137 virtual void SetDeferResourceLoading(unsigned long resource_id, bool defer); |
| 144 virtual bool IsOffTheRecord(); | 138 virtual bool IsOffTheRecord(); |
| 145 virtual void ResourceClientDeleted( | 139 virtual void ResourceClientDeleted( |
| 146 webkit::npapi::WebPluginResourceClient* resource_client); | 140 webkit_glue::WebPluginResourceClient* resource_client); |
| 147 gfx::NativeViewId containing_window() { return containing_window_; } | 141 gfx::NativeViewId containing_window() { return containing_window_; } |
| 148 | 142 |
| 149 #if defined(OS_MACOSX) | 143 #if defined(OS_MACOSX) |
| 150 virtual void SetImeEnabled(bool enabled); | 144 virtual void SetImeEnabled(bool enabled); |
| 151 | 145 |
| 152 virtual void BindFakePluginWindowHandle(bool opaque); | 146 virtual void BindFakePluginWindowHandle(bool opaque); |
| 153 | 147 |
| 154 virtual webkit::npapi::WebPluginAcceleratedSurface* GetAcceleratedSurface(); | 148 virtual webkit_glue::WebPluginAcceleratedSurface* GetAcceleratedSurface(); |
| 155 | 149 |
| 156 // Tell the browser (via the renderer) to invalidate because the | 150 // Tell the browser (via the renderer) to invalidate because the |
| 157 // accelerated buffers have changed. | 151 // accelerated buffers have changed. |
| 158 virtual void AcceleratedFrameBuffersDidSwap( | 152 virtual void AcceleratedFrameBuffersDidSwap( |
| 159 gfx::PluginWindowHandle window, uint64 surface_id); | 153 gfx::PluginWindowHandle window, uint64 surface_id); |
| 160 | 154 |
| 161 // Tell the renderer and browser to associate the given plugin handle with | 155 // Tell the renderer and browser to associate the given plugin handle with |
| 162 // |accelerated_surface_identifier|. The geometry is used to resize any | 156 // |accelerated_surface_identifier|. The geometry is used to resize any |
| 163 // native "window" (which on the Mac is a just a view). | 157 // native "window" (which on the Mac is a just a view). |
| 164 // This method is used when IOSurface support is available. | 158 // This method is used when IOSurface support is available. |
| (...skipping 23 matching lines...) Expand all Loading... |
| 188 bool Send(IPC::Message* msg); | 182 bool Send(IPC::Message* msg); |
| 189 | 183 |
| 190 // Handler for sending over the paint event to the plugin. | 184 // Handler for sending over the paint event to the plugin. |
| 191 void OnPaint(const gfx::Rect& damaged_rect); | 185 void OnPaint(const gfx::Rect& damaged_rect); |
| 192 | 186 |
| 193 // Updates the shared memory section where windowless plugins paint. | 187 // Updates the shared memory section where windowless plugins paint. |
| 194 void SetWindowlessBuffer(const TransportDIB::Handle& windowless_buffer, | 188 void SetWindowlessBuffer(const TransportDIB::Handle& windowless_buffer, |
| 195 const TransportDIB::Handle& background_buffer, | 189 const TransportDIB::Handle& background_buffer, |
| 196 const gfx::Rect& window_rect); | 190 const gfx::Rect& window_rect); |
| 197 | 191 |
| 198 typedef base::hash_map<int, webkit::npapi::WebPluginResourceClient*> | 192 typedef base::hash_map<int, webkit_glue::WebPluginResourceClient*> |
| 199 ResourceClientMap; | 193 ResourceClientMap; |
| 200 ResourceClientMap resource_clients_; | 194 ResourceClientMap resource_clients_; |
| 201 | 195 |
| 202 scoped_refptr<PluginChannel> channel_; | 196 scoped_refptr<PluginChannel> channel_; |
| 203 int route_id_; | 197 int route_id_; |
| 204 uint32 cp_browsing_context_; | 198 uint32 cp_browsing_context_; |
| 205 NPObject* window_npobject_; | 199 NPObject* window_npobject_; |
| 206 NPObject* plugin_element_; | 200 NPObject* plugin_element_; |
| 207 webkit::npapi::WebPluginDelegateImpl* delegate_; | 201 WebPluginDelegateImpl* delegate_; |
| 208 gfx::Rect damaged_rect_; | 202 gfx::Rect damaged_rect_; |
| 209 bool waiting_for_paint_; | 203 bool waiting_for_paint_; |
| 210 gfx::NativeViewId containing_window_; | 204 gfx::NativeViewId containing_window_; |
| 211 // The url of the main frame hosting the plugin. | 205 // The url of the main frame hosting the plugin. |
| 212 GURL page_url_; | 206 GURL page_url_; |
| 213 | 207 |
| 214 // Variables used for desynchronized windowless plugin painting. See note in | 208 // Variables used for desynchronized windowless plugin painting. See note in |
| 215 // webplugin_delegate_proxy.h for how this works. | 209 // webplugin_delegate_proxy.h for how this works. |
| 216 bool transparent_; | 210 bool transparent_; |
| 217 #if defined(OS_MACOSX) | 211 #if defined(OS_MACOSX) |
| (...skipping 17 matching lines...) Expand all Loading... |
| 235 | 229 |
| 236 #endif | 230 #endif |
| 237 | 231 |
| 238 // Contains the routing id of the host render view. | 232 // Contains the routing id of the host render view. |
| 239 int host_render_view_routing_id_; | 233 int host_render_view_routing_id_; |
| 240 | 234 |
| 241 ScopedRunnableMethodFactory<WebPluginProxy> runnable_method_factory_; | 235 ScopedRunnableMethodFactory<WebPluginProxy> runnable_method_factory_; |
| 242 }; | 236 }; |
| 243 | 237 |
| 244 #endif // CHROME_PLUGIN_WEBPLUGIN_PROXY_H_ | 238 #endif // CHROME_PLUGIN_WEBPLUGIN_PROXY_H_ |
| OLD | NEW |