| 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 #ifndef CONTENT_RENDERER_BROWSER_PLUGIN_BROWSER_PLUGIN_H_ | 5 #ifndef CONTENT_RENDERER_BROWSER_PLUGIN_BROWSER_PLUGIN_IMPL_H_ |
| 6 #define CONTENT_RENDERER_BROWSER_PLUGIN_BROWSER_PLUGIN_H_ | 6 #define CONTENT_RENDERER_BROWSER_PLUGIN_BROWSER_PLUGIN_IMPL_H_ |
| 7 | |
| 8 #include "third_party/WebKit/Source/WebKit/chromium/public/WebPlugin.h" | |
| 9 | 7 |
| 10 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
| 11 #include "base/memory/weak_ptr.h" | 9 #include "base/memory/weak_ptr.h" |
| 10 #include "base/observer_list.h" |
| 12 #include "base/process_util.h" | 11 #include "base/process_util.h" |
| 13 #include "base/sequenced_task_runner_helpers.h" | 12 #include "base/sequenced_task_runner_helpers.h" |
| 14 #if defined(OS_WIN) | 13 #if defined(OS_WIN) |
| 15 #include "base/shared_memory.h" | 14 #include "base/shared_memory.h" |
| 16 #endif | 15 #endif |
| 17 #include "content/common/browser_plugin_message_enums.h" | 16 #include "content/common/browser_plugin_message_enums.h" |
| 17 #include "content/public/renderer/browser_plugin/browser_plugin.h" |
| 18 #include "content/renderer/browser_plugin/browser_plugin_backing_store.h" | 18 #include "content/renderer/browser_plugin/browser_plugin_backing_store.h" |
| 19 #include "content/renderer/browser_plugin/browser_plugin_bindings.h" | 19 #include "content/renderer/browser_plugin/browser_plugin_bindings.h" |
| 20 #include "content/renderer/render_view_impl.h" | 20 #include "content/renderer/render_view_impl.h" |
| 21 #include "third_party/WebKit/Source/WebKit/chromium/public/WebDragStatus.h" | 21 #include "third_party/WebKit/Source/WebKit/chromium/public/WebDragStatus.h" |
| 22 #include "third_party/WebKit/Source/WebKit/chromium/public/WebPlugin.h" |
| 22 | 23 |
| 23 struct BrowserPluginHostMsg_AutoSize_Params; | 24 struct BrowserPluginHostMsg_AutoSize_Params; |
| 24 struct BrowserPluginHostMsg_ResizeGuest_Params; | 25 struct BrowserPluginHostMsg_ResizeGuest_Params; |
| 25 struct BrowserPluginMsg_LoadCommit_Params; | 26 struct BrowserPluginMsg_LoadCommit_Params; |
| 26 struct BrowserPluginMsg_UpdateRect_Params; | 27 struct BrowserPluginMsg_UpdateRect_Params; |
| 27 | 28 |
| 28 namespace content { | 29 namespace content { |
| 29 | 30 |
| 30 class BrowserPluginCompositingHelper; | 31 class BrowserPluginCompositingHelper; |
| 31 class BrowserPluginManager; | 32 class BrowserPluginManager; |
| 33 class BrowserPluginObserver; |
| 32 class MockBrowserPlugin; | 34 class MockBrowserPlugin; |
| 33 | 35 |
| 34 class CONTENT_EXPORT BrowserPlugin : | 36 class CONTENT_EXPORT BrowserPluginImpl : |
| 35 NON_EXPORTED_BASE(public WebKit::WebPlugin) { | 37 NON_EXPORTED_BASE(public WebKit::WebPlugin), |
| 38 public BrowserPlugin { |
| 36 public: | 39 public: |
| 37 RenderViewImpl* render_view() const { return render_view_.get(); } | 40 RenderViewImpl* render_view() const { return render_view_.get(); } |
| 38 int render_view_routing_id() const { return render_view_routing_id_; } | 41 int render_view_routing_id() const { return render_view_routing_id_; } |
| 39 | 42 |
| 40 bool OnMessageReceived(const IPC::Message& msg); | 43 bool OnMessageReceived(const IPC::Message& msg); |
| 41 | 44 |
| 42 // Update Browser Plugin's DOM Node attribute |attribute_name| with the value | |
| 43 // |attribute_value|. | |
| 44 void UpdateDOMAttribute(const std::string& attribute_name, | |
| 45 const std::string& attribute_value); | |
| 46 // Remove the DOM Node attribute with the name |attribute_name|. | |
| 47 void RemoveDOMAttribute(const std::string& attribute_name); | |
| 48 // Get Browser Plugin's DOM Node attribute |attribute_name|'s value. | |
| 49 std::string GetDOMAttributeValue(const std::string& attribute_name) const; | |
| 50 // Checks if the attribute |attribute_name| exists in the DOM. | |
| 51 bool HasDOMAttribute(const std::string& attribute_name) const; | |
| 52 | |
| 53 // Get the name attribute value. | 45 // Get the name attribute value. |
| 54 std::string GetNameAttribute() const; | 46 std::string GetNameAttribute() const; |
| 55 // Parse the name attribute value. | 47 // Parse the name attribute value. |
| 56 void ParseNameAttribute(); | 48 void ParseNameAttribute(); |
| 57 // Get the src attribute value of the BrowserPlugin instance. | 49 // Get the src attribute value of the BrowserPlugin instance. |
| 58 std::string GetSrcAttribute() const; | 50 std::string GetSrcAttribute() const; |
| 59 // Parse the src attribute value of the BrowserPlugin instance. | 51 // Parse the src attribute value of the BrowserPlugin instance. |
| 60 bool ParseSrcAttribute(std::string* error_message); | 52 bool ParseSrcAttribute(std::string* error_message); |
| 61 // Get the autosize attribute value. | 53 // Get the autosize attribute value. |
| 62 bool GetAutoSizeAttribute() const; | 54 bool GetAutoSizeAttribute() const; |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 132 // Not OK to use this function for making security-sensitive decision since it | 124 // Not OK to use this function for making security-sensitive decision since it |
| 133 // can return false positives when the plugin has rotation transformation | 125 // can return false positives when the plugin has rotation transformation |
| 134 // applied. | 126 // applied. |
| 135 bool InBounds(const gfx::Point& point) const; | 127 bool InBounds(const gfx::Point& point) const; |
| 136 | 128 |
| 137 gfx::Point ToLocalCoordinates(const gfx::Point& point) const; | 129 gfx::Point ToLocalCoordinates(const gfx::Point& point) const; |
| 138 // Called by browser plugin binding. | 130 // Called by browser plugin binding. |
| 139 void OnEmbedderDecidedPermission(int request_id, bool allow); | 131 void OnEmbedderDecidedPermission(int request_id, bool allow); |
| 140 | 132 |
| 141 | 133 |
| 134 // BrowserPlugin implementation. |
| 135 virtual RenderView* GetRenderView() const OVERRIDE; |
| 136 virtual WebKit::WebPluginContainer* GetContainer() const OVERRIDE; |
| 137 virtual void AddMethodBinding( |
| 138 BrowserPluginMethodBinding* method_binding) OVERRIDE; |
| 139 virtual void AddPropertyBinding( |
| 140 BrowserPluginPropertyBinding* method_binding) OVERRIDE; |
| 141 virtual void TriggerEvent( |
| 142 const std::string& event_name, |
| 143 std::map<std::string, base::Value*>* props) OVERRIDE; |
| 144 virtual void UpdateDOMAttribute(const std::string& attribute_name, |
| 145 const std::string& attribute_value) OVERRIDE; |
| 146 virtual void RemoveDOMAttribute(const std::string& attribute_name) OVERRIDE; |
| 147 virtual std::string GetDOMAttributeValue( |
| 148 const std::string& attribute_name) const OVERRIDE; |
| 149 virtual bool HasDOMAttribute( |
| 150 const std::string& attribute_name) const OVERRIDE; |
| 151 virtual bool HasNavigated() const OVERRIDE; |
| 152 |
| 153 // IPC::Sender implementation. |
| 154 virtual bool Send(IPC::Message* message) OVERRIDE; |
| 155 |
| 142 // WebKit::WebPlugin implementation. | 156 // WebKit::WebPlugin implementation. |
| 143 virtual WebKit::WebPluginContainer* container() const OVERRIDE; | 157 virtual WebKit::WebPluginContainer* container() const OVERRIDE; |
| 144 virtual bool initialize(WebKit::WebPluginContainer* container) OVERRIDE; | 158 virtual bool initialize(WebKit::WebPluginContainer* container) OVERRIDE; |
| 145 virtual void destroy() OVERRIDE; | 159 virtual void destroy() OVERRIDE; |
| 146 virtual NPObject* scriptableObject() OVERRIDE; | 160 virtual NPObject* scriptableObject() OVERRIDE; |
| 147 virtual bool supportsKeyboardFocus() const OVERRIDE; | 161 virtual bool supportsKeyboardFocus() const OVERRIDE; |
| 148 virtual bool canProcessDrag() const OVERRIDE; | 162 virtual bool canProcessDrag() const OVERRIDE; |
| 149 virtual void paint( | 163 virtual void paint( |
| 150 WebKit::WebCanvas* canvas, | 164 WebKit::WebCanvas* canvas, |
| 151 const WebKit::WebRect& rect) OVERRIDE; | 165 const WebKit::WebRect& rect) OVERRIDE; |
| (...skipping 19 matching lines...) Expand all Loading... |
| 171 virtual void didFinishLoading() OVERRIDE; | 185 virtual void didFinishLoading() OVERRIDE; |
| 172 virtual void didFailLoading(const WebKit::WebURLError& error) OVERRIDE; | 186 virtual void didFailLoading(const WebKit::WebURLError& error) OVERRIDE; |
| 173 virtual void didFinishLoadingFrameRequest( | 187 virtual void didFinishLoadingFrameRequest( |
| 174 const WebKit::WebURL& url, | 188 const WebKit::WebURL& url, |
| 175 void* notify_data) OVERRIDE; | 189 void* notify_data) OVERRIDE; |
| 176 virtual void didFailLoadingFrameRequest( | 190 virtual void didFailLoadingFrameRequest( |
| 177 const WebKit::WebURL& url, | 191 const WebKit::WebURL& url, |
| 178 void* notify_data, | 192 void* notify_data, |
| 179 const WebKit::WebURLError& error) OVERRIDE; | 193 const WebKit::WebURLError& error) OVERRIDE; |
| 180 private: | 194 private: |
| 181 friend class base::DeleteHelper<BrowserPlugin>; | 195 friend class base::DeleteHelper<BrowserPluginImpl>; |
| 182 // Only the manager is allowed to create a BrowserPlugin. | 196 // Only the manager is allowed to create a BrowserPlugin. |
| 183 friend class BrowserPluginManagerImpl; | 197 friend class BrowserPluginManagerImpl; |
| 198 friend class BrowserPluginObserver; |
| 184 friend class MockBrowserPluginManager; | 199 friend class MockBrowserPluginManager; |
| 185 | 200 |
| 186 // For unit/integration tests. | 201 // For unit/integration tests. |
| 187 friend class MockBrowserPlugin; | 202 friend class MockBrowserPlugin; |
| 188 | 203 |
| 189 // A BrowserPlugin object is a controller that represents an instance of a | 204 // A BrowserPluginImpl object is a controller that represents an instance of a |
| 190 // browser plugin within the embedder renderer process. Each BrowserPlugin | 205 // browser plugin within the embedder renderer process. Each BrowserPlugin |
| 191 // within a process has a unique instance_id that is used to route messages | 206 // within a process has a unique |instance_id| that is used to route messages |
| 192 // to it. It takes in a RenderViewImpl that it's associated with along | 207 // to it. It takes in a RenderViewImpl that it's associated with along |
| 193 // with the frame within which it lives and the initial attributes assigned | 208 // with the frame within which it lives and the initial attributes assigned |
| 194 // to it on creation. | 209 // to it on creation. |
| 195 BrowserPlugin( | 210 BrowserPluginImpl( |
| 196 RenderViewImpl* render_view, | 211 RenderViewImpl* render_view, |
| 197 WebKit::WebFrame* frame, | 212 WebKit::WebFrame* frame, |
| 198 const WebKit::WebPluginParams& params); | 213 const WebKit::WebPluginParams& params); |
| 199 | 214 |
| 200 virtual ~BrowserPlugin(); | 215 virtual ~BrowserPluginImpl(); |
| 216 |
| 217 // Add and remove observers for filtering IPC messages. Clients must be sure |
| 218 // to remove the observer before they go away. |
| 219 void AddObserver(BrowserPluginObserver* observer); |
| 220 void RemoveObserver(BrowserPluginObserver* observer); |
| 201 | 221 |
| 202 int width() const { return plugin_rect_.width(); } | 222 int width() const { return plugin_rect_.width(); } |
| 203 int height() const { return plugin_rect_.height(); } | 223 int height() const { return plugin_rect_.height(); } |
| 204 int instance_id() const { return instance_id_; } | 224 int instance_id() const { return instance_id_; } |
| 205 // Gets the Max Height value used for auto size. | 225 // Gets the Max Height value used for auto size. |
| 206 int GetAdjustedMaxHeight() const; | 226 int GetAdjustedMaxHeight() const; |
| 207 // Gets the Max Width value used for auto size. | 227 // Gets the Max Width value used for auto size. |
| 208 int GetAdjustedMaxWidth() const; | 228 int GetAdjustedMaxWidth() const; |
| 209 // Gets the Min Height value used for auto size. | 229 // Gets the Min Height value used for auto size. |
| 210 int GetAdjustedMinHeight() const; | 230 int GetAdjustedMinHeight() const; |
| 211 // Gets the Min Width value used for auto size. | 231 // Gets the Min Width value used for auto size. |
| 212 int GetAdjustedMinWidth() const; | 232 int GetAdjustedMinWidth() const; |
| 213 BrowserPluginManager* browser_plugin_manager() const { | 233 BrowserPluginManager* browser_plugin_manager() const { |
| 214 return browser_plugin_manager_; | 234 return browser_plugin_manager_; |
| 215 } | 235 } |
| 216 | 236 |
| 217 // Virtual to allow for mocking in tests. | 237 // Virtual to allow for mocking in tests. |
| 218 virtual float GetDeviceScaleFactor() const; | 238 virtual float GetDeviceScaleFactor() const; |
| 219 | 239 |
| 220 // Parses the attributes of the browser plugin from the element's attributes | 240 // Parses the attributes of the browser plugin from the element's attributes |
| 221 // and sets them appropriately. | 241 // and sets them appropriately. |
| 222 void ParseAttributes(); | 242 void ParseAttributes(); |
| 223 | 243 |
| 224 // Triggers the event-listeners for |event_name|. Note that the function | |
| 225 // frees all the values in |props|. | |
| 226 void TriggerEvent(const std::string& event_name, | |
| 227 std::map<std::string, base::Value*>* props); | |
| 228 | |
| 229 // Creates and maps a shared damage buffer. | 244 // Creates and maps a shared damage buffer. |
| 230 virtual base::SharedMemory* CreateDamageBuffer( | 245 virtual base::SharedMemory* CreateDamageBuffer( |
| 231 const size_t size, | 246 const size_t size, |
| 232 base::SharedMemoryHandle* shared_memory_handle); | 247 base::SharedMemoryHandle* shared_memory_handle); |
| 233 // Swaps out the |current_damage_buffer_| with the |pending_damage_buffer_|. | 248 // Swaps out the |current_damage_buffer_| with the |pending_damage_buffer_|. |
| 234 void SwapDamageBuffers(); | 249 void SwapDamageBuffers(); |
| 235 | 250 |
| 236 // Populates BrowserPluginHostMsg_ResizeGuest_Params with resize state and | 251 // Populates BrowserPluginHostMsg_ResizeGuest_Params with resize state and |
| 237 // allocates a new |pending_damage_buffer_| if in software rendering mode. | 252 // allocates a new |pending_damage_buffer_| if in software rendering mode. |
| 238 void PopulateResizeGuestParameters( | 253 void PopulateResizeGuestParameters( |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 292 void* param); | 307 void* param); |
| 293 | 308 |
| 294 // IPC message handlers. | 309 // IPC message handlers. |
| 295 // Please keep in alphabetical order. | 310 // Please keep in alphabetical order. |
| 296 void OnAdvanceFocus(int instance_id, bool reverse); | 311 void OnAdvanceFocus(int instance_id, bool reverse); |
| 297 void OnBuffersSwapped(int instance_id, | 312 void OnBuffersSwapped(int instance_id, |
| 298 const gfx::Size& size, | 313 const gfx::Size& size, |
| 299 std::string mailbox_name, | 314 std::string mailbox_name, |
| 300 int gpu_route_id, | 315 int gpu_route_id, |
| 301 int gpu_host_id); | 316 int gpu_host_id); |
| 317 void OnForwardMessage(int instance_id, const IPC::Message& msg); |
| 302 void OnGuestContentWindowReady(int instance_id, | 318 void OnGuestContentWindowReady(int instance_id, |
| 303 int content_window_routing_id); | 319 int content_window_routing_id); |
| 304 void OnGuestGone(int instance_id, int process_id, int status); | 320 void OnGuestGone(int instance_id, int process_id, int status); |
| 305 void OnGuestResponsive(int instance_id, int process_id); | 321 void OnGuestResponsive(int instance_id, int process_id); |
| 306 void OnGuestUnresponsive(int instance_id, int process_id); | 322 void OnGuestUnresponsive(int instance_id, int process_id); |
| 307 void OnLoadAbort(int instance_id, | 323 void OnLoadAbort(int instance_id, |
| 308 const GURL& url, | 324 const GURL& url, |
| 309 bool is_top_level, | 325 bool is_top_level, |
| 310 const std::string& type); | 326 const std::string& type); |
| 311 void OnLoadCommit(int instance_id, | 327 void OnLoadCommit(int instance_id, |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 364 gfx::Size last_view_size_; | 380 gfx::Size last_view_size_; |
| 365 bool size_changed_in_flight_; | 381 bool size_changed_in_flight_; |
| 366 bool allocate_instance_id_sent_; | 382 bool allocate_instance_id_sent_; |
| 367 | 383 |
| 368 // Each permission request item in the map is a pair of request id and | 384 // Each permission request item in the map is a pair of request id and |
| 369 // permission type. | 385 // permission type. |
| 370 typedef std::map<int, std::pair<int, BrowserPluginPermissionType> > | 386 typedef std::map<int, std::pair<int, BrowserPluginPermissionType> > |
| 371 PendingPermissionRequests; | 387 PendingPermissionRequests; |
| 372 PendingPermissionRequests pending_permission_requests_; | 388 PendingPermissionRequests pending_permission_requests_; |
| 373 | 389 |
| 374 typedef std::pair<int, base::WeakPtr<BrowserPlugin> > | 390 typedef std::pair<int, base::WeakPtr<BrowserPluginImpl> > |
| 375 AliveV8PermissionRequestItem; | 391 AliveV8PermissionRequestItem; |
| 376 std::map<int, AliveV8PermissionRequestItem*> | 392 std::map<int, AliveV8PermissionRequestItem*> |
| 377 alive_v8_permission_request_objects_; | 393 alive_v8_permission_request_objects_; |
| 378 | 394 |
| 379 // BrowserPlugin outlives RenderViewImpl in Chrome Apps and so we need to | 395 // BrowserPlugin outlives RenderViewImpl in Chrome Apps and so we need to |
| 380 // store the BrowserPlugin's BrowserPluginManager in a member variable to | 396 // store the BrowserPlugin's BrowserPluginManager in a member variable to |
| 381 // avoid accessing the RenderViewImpl. | 397 // avoid accessing the RenderViewImpl. |
| 382 scoped_refptr<BrowserPluginManager> browser_plugin_manager_; | 398 scoped_refptr<BrowserPluginManager> browser_plugin_manager_; |
| 383 | 399 |
| 400 // A list of observers that filter messages. Weak references. |
| 401 ObserverList<BrowserPluginObserver> observers_; |
| 402 |
| 384 // Important: Do not add more history state here. | 403 // Important: Do not add more history state here. |
| 385 // We strongly discourage storing additional history state (such as page IDs) | 404 // We strongly discourage storing additional history state (such as page IDs) |
| 386 // in the embedder process, at the risk of having incorrect information that | 405 // in the embedder process, at the risk of having incorrect information that |
| 387 // can lead to broken back/forward logic in apps. | 406 // can lead to broken back/forward logic in apps. |
| 388 // It's also important that this state does not get modified by any logic in | 407 // It's also important that this state does not get modified by any logic in |
| 389 // the embedder process. It should only be updated in response to navigation | 408 // the embedder process. It should only be updated in response to navigation |
| 390 // events in the guest. No assumptions should be made about how the index | 409 // events in the guest. No assumptions should be made about how the index |
| 391 // will change after a navigation (e.g., for back, forward, or go), because | 410 // will change after a navigation (e.g., for back, forward, or go), because |
| 392 // the changes are not always obvious. For example, there is a maximum | 411 // the changes are not always obvious. For example, there is a maximum |
| 393 // number of entries and earlier ones will automatically be pruned. | 412 // number of entries and earlier ones will automatically be pruned. |
| 394 int current_nav_entry_index_; | 413 int current_nav_entry_index_; |
| 395 int nav_entry_count_; | 414 int nav_entry_count_; |
| 396 | 415 |
| 397 // Used for HW compositing. | 416 // Used for HW compositing. |
| 398 bool compositing_enabled_; | 417 bool compositing_enabled_; |
| 399 scoped_refptr<BrowserPluginCompositingHelper> compositing_helper_; | 418 scoped_refptr<BrowserPluginCompositingHelper> compositing_helper_; |
| 400 | 419 |
| 401 // Weak factory used in v8 |MakeWeak| callback, since the v8 callback might | 420 // Weak factory used in v8 |MakeWeak| callback, since the v8 callback might |
| 402 // get called after BrowserPlugin has been destroyed. | 421 // get called after BrowserPlugin has been destroyed. |
| 403 base::WeakPtrFactory<BrowserPlugin> weak_ptr_factory_; | 422 base::WeakPtrFactory<BrowserPluginImpl> weak_ptr_factory_; |
| 404 | 423 |
| 405 DISALLOW_COPY_AND_ASSIGN(BrowserPlugin); | 424 DISALLOW_COPY_AND_ASSIGN(BrowserPluginImpl); |
| 406 }; | 425 }; |
| 407 | 426 |
| 408 } // namespace content | 427 } // namespace content |
| 409 | 428 |
| 410 #endif // CONTENT_RENDERER_BROWSER_PLUGIN_BROWSER_PLUGIN_H_ | 429 #endif // CONTENT_RENDERER_BROWSER_PLUGIN_BROWSER_PLUGIN_IMPL_H_ |
| OLD | NEW |