| 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 // A BrowserPluginGuest is the browser side of a browser <--> embedder | 5 // A BrowserPluginGuest is the browser side of a browser <--> embedder |
| 6 // renderer channel. A BrowserPlugin (a WebPlugin) is on the embedder | 6 // renderer channel. A BrowserPlugin (a WebPlugin) is on the embedder |
| 7 // renderer side of browser <--> embedder renderer communication. | 7 // renderer side of browser <--> embedder renderer communication. |
| 8 // | 8 // |
| 9 // BrowserPluginGuest lives on the UI thread of the browser process. It has a | 9 // BrowserPluginGuest lives on the UI thread of the browser process. It has a |
| 10 // helper, BrowserPluginGuestHelper, which is a RenderViewHostObserver. The | 10 // helper, BrowserPluginGuestHelper, which is a RenderViewHostObserver. The |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 68 // A browser plugin guest provides functionality for WebContents to operate in | 68 // A browser plugin guest provides functionality for WebContents to operate in |
| 69 // the guest role and implements guest-specific overrides for ViewHostMsg_* | 69 // the guest role and implements guest-specific overrides for ViewHostMsg_* |
| 70 // messages. | 70 // messages. |
| 71 // | 71 // |
| 72 // When a guest is initially created, it is in an unattached state. That is, | 72 // When a guest is initially created, it is in an unattached state. That is, |
| 73 // it is not visible anywhere and has no embedder WebContents assigned. | 73 // it is not visible anywhere and has no embedder WebContents assigned. |
| 74 // A BrowserPluginGuest is said to be "attached" if it has an embedder. | 74 // A BrowserPluginGuest is said to be "attached" if it has an embedder. |
| 75 // A BrowserPluginGuest can also create a new unattached guest via | 75 // A BrowserPluginGuest can also create a new unattached guest via |
| 76 // CreateNewWindow. The newly created guest will live in the same partition, | 76 // CreateNewWindow. The newly created guest will live in the same partition, |
| 77 // which means it can share storage and can script this guest. | 77 // which means it can share storage and can script this guest. |
| 78 class CONTENT_EXPORT BrowserPluginGuest : public NotificationObserver, | 78 class CONTENT_EXPORT BrowserPluginGuest |
| 79 public WebContentsDelegate, | 79 : public NotificationObserver, |
| 80 public WebContentsObserver { | 80 public WebContentsDelegate, |
| 81 public WebContentsObserver, |
| 82 public base::SupportsWeakPtr<BrowserPluginGuest> { |
| 81 public: | 83 public: |
| 82 typedef base::Callback<void(bool)> GeolocationCallback; | 84 typedef base::Callback<void(bool)> GeolocationCallback; |
| 83 virtual ~BrowserPluginGuest(); | 85 virtual ~BrowserPluginGuest(); |
| 84 | 86 |
| 85 static BrowserPluginGuest* Create( | 87 static BrowserPluginGuest* Create( |
| 86 int instance_id, | 88 int instance_id, |
| 87 WebContentsImpl* web_contents); | 89 WebContentsImpl* web_contents); |
| 88 | 90 |
| 89 // Destroys the guest WebContents and all its associated state, including | 91 // Destroys the guest WebContents and all its associated state, including |
| 90 // this BrowserPluginGuest, and its new unattached windows. | 92 // this BrowserPluginGuest, and its new unattached windows. |
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 228 // BrowserPluginGuest is already destroyed. | 230 // BrowserPluginGuest is already destroyed. |
| 229 static void AcknowledgeBufferPresent(int route_id, | 231 static void AcknowledgeBufferPresent(int route_id, |
| 230 int gpu_host_id, | 232 int gpu_host_id, |
| 231 const std::string& mailbox_name, | 233 const std::string& mailbox_name, |
| 232 uint32 sync_point); | 234 uint32 sync_point); |
| 233 | 235 |
| 234 // Returns whether BrowserPluginGuest is interested in receiving the given | 236 // Returns whether BrowserPluginGuest is interested in receiving the given |
| 235 // |message|. | 237 // |message|. |
| 236 static bool ShouldForwardToBrowserPluginGuest(const IPC::Message& message); | 238 static bool ShouldForwardToBrowserPluginGuest(const IPC::Message& message); |
| 237 | 239 |
| 240 void DragSourceEndedAt(int client_x, int client_y, int screen_x, |
| 241 int screen_y, WebKit::WebDragOperation operation); |
| 242 |
| 243 void DragSourceMovedTo(int client_x, int client_y, |
| 244 int screen_x, int screen_y); |
| 245 |
| 246 // Called when the drag started by this guest ends at an OS-level. |
| 247 void EndSystemDrag(); |
| 248 |
| 238 private: | 249 private: |
| 239 typedef std::pair<MediaStreamRequest, MediaResponseCallback> | 250 typedef std::pair<MediaStreamRequest, MediaResponseCallback> |
| 240 MediaStreamRequestAndCallbackPair; | 251 MediaStreamRequestAndCallbackPair; |
| 241 typedef std::map<int, MediaStreamRequestAndCallbackPair> | 252 typedef std::map<int, MediaStreamRequestAndCallbackPair> |
| 242 MediaStreamRequestsMap; | 253 MediaStreamRequestsMap; |
| 243 | 254 |
| 244 class EmbedderRenderViewHostObserver; | 255 class EmbedderRenderViewHostObserver; |
| 245 friend class TestBrowserPluginGuest; | 256 friend class TestBrowserPluginGuest; |
| 246 | 257 |
| 247 BrowserPluginGuest(int instance_id, | 258 BrowserPluginGuest(int instance_id, |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 283 // Handles drag events from the embedder. | 294 // Handles drag events from the embedder. |
| 284 // When dragging, the drag events go to the embedder first, and if the drag | 295 // When dragging, the drag events go to the embedder first, and if the drag |
| 285 // happens on the browser plugin, then the plugin sends a corresponding | 296 // happens on the browser plugin, then the plugin sends a corresponding |
| 286 // drag-message to the guest. This routes the drag-message to the guest | 297 // drag-message to the guest. This routes the drag-message to the guest |
| 287 // renderer. | 298 // renderer. |
| 288 void OnDragStatusUpdate(int instance_id, | 299 void OnDragStatusUpdate(int instance_id, |
| 289 WebKit::WebDragStatus drag_status, | 300 WebKit::WebDragStatus drag_status, |
| 290 const WebDropData& drop_data, | 301 const WebDropData& drop_data, |
| 291 WebKit::WebDragOperationsMask drag_mask, | 302 WebKit::WebDragOperationsMask drag_mask, |
| 292 const gfx::Point& location); | 303 const gfx::Point& location); |
| 304 // Called when a drag and drop Drop event has taken place inside the guest. |
| 305 void OnDropAck(bool* handled); |
| 293 // If possible, navigate the guest to |relative_index| entries away from the | 306 // If possible, navigate the guest to |relative_index| entries away from the |
| 294 // current navigation entry. | 307 // current navigation entry. |
| 295 virtual void OnGo(int instance_id, int relative_index); | 308 virtual void OnGo(int instance_id, int relative_index); |
| 296 // Overriden in tests. | 309 // Overriden in tests. |
| 297 virtual void OnHandleInputEvent(int instance_id, | 310 virtual void OnHandleInputEvent(int instance_id, |
| 298 const gfx::Rect& guest_window_rect, | 311 const gfx::Rect& guest_window_rect, |
| 299 const WebKit::WebInputEvent* event); | 312 const WebKit::WebInputEvent* event); |
| 300 void OnLockMouse(bool user_gesture, | 313 void OnLockMouse(bool user_gesture, |
| 301 bool last_unlocked_by_target, | 314 bool last_unlocked_by_target, |
| 302 bool privileged); | 315 bool privileged); |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 348 void OnUnlockMouse(); | 361 void OnUnlockMouse(); |
| 349 void OnUnlockMouseAck(int instance_id); | 362 void OnUnlockMouseAck(int instance_id); |
| 350 void OnUpdateRectACK( | 363 void OnUpdateRectACK( |
| 351 int instance_id, | 364 int instance_id, |
| 352 const BrowserPluginHostMsg_AutoSize_Params& auto_size_params, | 365 const BrowserPluginHostMsg_AutoSize_Params& auto_size_params, |
| 353 const BrowserPluginHostMsg_ResizeGuest_Params& resize_guest_params); | 366 const BrowserPluginHostMsg_ResizeGuest_Params& resize_guest_params); |
| 354 | 367 |
| 355 | 368 |
| 356 // Message handlers for messages from guest. | 369 // Message handlers for messages from guest. |
| 357 | 370 |
| 371 void OnDragStopped(); |
| 358 void OnHandleInputEventAck( | 372 void OnHandleInputEventAck( |
| 359 WebKit::WebInputEvent::Type event_type, | 373 WebKit::WebInputEvent::Type event_type, |
| 360 InputEventAckState ack_result); | 374 InputEventAckState ack_result); |
| 361 void OnHasTouchEventHandlers(bool accept); | 375 void OnHasTouchEventHandlers(bool accept); |
| 362 void OnSetCursor(const WebCursor& cursor); | 376 void OnSetCursor(const WebCursor& cursor); |
| 363 // On MacOSX popups are painted by the browser process. We handle them here | 377 // On MacOSX popups are painted by the browser process. We handle them here |
| 364 // so that they are positioned correctly. | 378 // so that they are positioned correctly. |
| 365 #if defined(OS_MACOSX) | 379 #if defined(OS_MACOSX) |
| 366 void OnShowPopup(const ViewHostMsg_ShowPopup_Params& params); | 380 void OnShowPopup(const ViewHostMsg_ShowPopup_Params& params); |
| 367 #endif | 381 #endif |
| 368 void OnShowView(int route_id, | 382 void OnShowView(int route_id, |
| 369 WindowOpenDisposition disposition, | 383 WindowOpenDisposition disposition, |
| 370 const gfx::Rect& initial_bounds, | 384 const gfx::Rect& initial_bounds, |
| 371 bool user_gesture); | 385 bool user_gesture); |
| 372 void OnShowWidget(int route_id, const gfx::Rect& initial_pos); | 386 void OnShowWidget(int route_id, const gfx::Rect& initial_pos); |
| 387 void OnStartDragging(bool* handled); |
| 373 // Overriden in tests. | 388 // Overriden in tests. |
| 374 virtual void OnTakeFocus(bool reverse); | 389 virtual void OnTakeFocus(bool reverse); |
| 375 void OnUpdateDragCursor(WebKit::WebDragOperation operation); | 390 void OnTargetDrop_ACK(bool* handled); |
| 376 void OnUpdateFrameName(int frame_id, | 391 void OnUpdateFrameName(int frame_id, |
| 377 bool is_top_level, | 392 bool is_top_level, |
| 378 const std::string& name); | 393 const std::string& name); |
| 379 void OnUpdateRect(const ViewHostMsg_UpdateRect_Params& params); | 394 void OnUpdateRect(const ViewHostMsg_UpdateRect_Params& params); |
| 380 | 395 |
| 381 // Helpers for |OnRespondPermission|. | 396 // Helpers for |OnRespondPermission|. |
| 382 void OnRespondPermissionGeolocation(int request_id, bool should_allow); | 397 void OnRespondPermissionGeolocation(int request_id, bool should_allow); |
| 383 void OnRespondPermissionMedia(int request_id, bool should_allow); | 398 void OnRespondPermissionMedia(int request_id, bool should_allow); |
| 384 void OnRespondPermissionNewWindow(int request_id, bool should_allow); | 399 void OnRespondPermissionNewWindow(int request_id, bool should_allow); |
| 385 | 400 |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 431 // A map from request ID to instance ID for use by the New Window API. | 446 // A map from request ID to instance ID for use by the New Window API. |
| 432 typedef std::map<int, int> NewWindowRequestMap; | 447 typedef std::map<int, int> NewWindowRequestMap; |
| 433 NewWindowRequestMap new_window_request_map_; | 448 NewWindowRequestMap new_window_request_map_; |
| 434 | 449 |
| 435 DISALLOW_COPY_AND_ASSIGN(BrowserPluginGuest); | 450 DISALLOW_COPY_AND_ASSIGN(BrowserPluginGuest); |
| 436 }; | 451 }; |
| 437 | 452 |
| 438 } // namespace content | 453 } // namespace content |
| 439 | 454 |
| 440 #endif // CONTENT_BROWSER_BROWSER_PLUGIN_BROWSER_PLUGIN_GUEST_H_ | 455 #endif // CONTENT_BROWSER_BROWSER_PLUGIN_BROWSER_PLUGIN_GUEST_H_ |
| OLD | NEW |