Chromium Code Reviews| 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. Any | 9 // BrowserPluginGuest lives on the UI thread of the browser process. Any |
| 10 // messages about the guest render process that the embedder might be interested | 10 // messages about the guest render process that the embedder might be interested |
| 11 // in receiving should be listened for here. | 11 // in receiving should be listened for here. |
| 12 // | 12 // |
| 13 // BrowserPluginGuest is a WebContentsObserver for the guest WebContents. | 13 // BrowserPluginGuest is a WebContentsObserver for the guest WebContents. |
| 14 // BrowserPluginGuest operates under the assumption that the guest will be | 14 // BrowserPluginGuest operates under the assumption that the guest will be |
| 15 // accessible through only one RenderViewHost for the lifetime of | 15 // accessible through only one RenderViewHost for the lifetime of |
| 16 // the guest WebContents. Thus, cross-process navigation is not supported. | 16 // the guest WebContents. Thus, cross-process navigation is not supported. |
| 17 | 17 |
| 18 #ifndef CONTENT_BROWSER_BROWSER_PLUGIN_BROWSER_PLUGIN_GUEST_H_ | 18 #ifndef CONTENT_BROWSER_BROWSER_PLUGIN_BROWSER_PLUGIN_GUEST_H_ |
| 19 #define CONTENT_BROWSER_BROWSER_PLUGIN_BROWSER_PLUGIN_GUEST_H_ | 19 #define CONTENT_BROWSER_BROWSER_PLUGIN_BROWSER_PLUGIN_GUEST_H_ |
| 20 | 20 |
| 21 #include <functional> | |
| 21 #include <map> | 22 #include <map> |
| 22 #include <queue> | 23 #include <queue> |
| 23 | 24 |
| 24 #include "base/compiler_specific.h" | 25 #include "base/compiler_specific.h" |
| 25 #include "base/memory/linked_ptr.h" | 26 #include "base/memory/linked_ptr.h" |
| 26 #include "base/memory/weak_ptr.h" | 27 #include "base/memory/weak_ptr.h" |
| 27 #include "base/values.h" | 28 #include "base/values.h" |
| 28 #include "content/common/edit_command.h" | 29 #include "content/common/edit_command.h" |
| 29 #include "content/common/input/input_event_ack_state.h" | 30 #include "content/common/input/input_event_ack_state.h" |
| 30 #include "content/public/browser/browser_plugin_guest_delegate.h" | 31 #include "content/public/browser/browser_plugin_guest_delegate.h" |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 63 namespace content { | 64 namespace content { |
| 64 | 65 |
| 65 class BrowserPluginGuestManager; | 66 class BrowserPluginGuestManager; |
| 66 class RenderViewHostImpl; | 67 class RenderViewHostImpl; |
| 67 class RenderWidgetHost; | 68 class RenderWidgetHost; |
| 68 class RenderWidgetHostView; | 69 class RenderWidgetHostView; |
| 69 class RenderWidgetHostViewBase; | 70 class RenderWidgetHostViewBase; |
| 70 class SiteInstance; | 71 class SiteInstance; |
| 71 struct DropData; | 72 struct DropData; |
| 72 | 73 |
| 74 typedef std::function<IPC::Message*(int browser_plugin_id)> | |
|
lazyboy
2015/10/16 00:15:48
Guess the mac bots didn't like it. Lucas and I cou
| |
| 75 BrowserPluginMessageFunc; | |
| 76 | |
| 73 // A browser plugin guest provides functionality for WebContents to operate in | 77 // A browser plugin guest provides functionality for WebContents to operate in |
| 74 // the guest role and implements guest-specific overrides for ViewHostMsg_* | 78 // the guest role and implements guest-specific overrides for ViewHostMsg_* |
| 75 // messages. | 79 // messages. |
| 76 // | 80 // |
| 77 // When a guest is initially created, it is in an unattached state. That is, | 81 // When a guest is initially created, it is in an unattached state. That is, |
| 78 // it is not visible anywhere and has no embedder WebContents assigned. | 82 // it is not visible anywhere and has no embedder WebContents assigned. |
| 79 // A BrowserPluginGuest is said to be "attached" if it has an embedder. | 83 // A BrowserPluginGuest is said to be "attached" if it has an embedder. |
| 80 // A BrowserPluginGuest can also create a new unattached guest via | 84 // A BrowserPluginGuest can also create a new unattached guest via |
| 81 // CreateNewWindow. The newly created guest will live in the same partition, | 85 // CreateNewWindow. The newly created guest will live in the same partition, |
| 82 // which means it can share storage and can script this guest. | 86 // which means it can share storage and can script this guest. |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 195 // Therefore, the coordinates of the context menu event with respect to the | 199 // Therefore, the coordinates of the context menu event with respect to the |
| 196 // container window are modifed with the guest renderer process beiung unaware | 200 // container window are modifed with the guest renderer process beiung unaware |
| 197 // of the change. Then eventually, when the context menu event arrives at the | 201 // of the change. Then eventually, when the context menu event arrives at the |
| 198 // browser, it contains the wrong coordinates (BUG=470087). | 202 // browser, it contains the wrong coordinates (BUG=470087). |
| 199 // TODO(ekaramad): Find a more fundamental solution and remove this later. | 203 // TODO(ekaramad): Find a more fundamental solution and remove this later. |
| 200 void SetContextMenuPosition(const gfx::Point& position); | 204 void SetContextMenuPosition(const gfx::Point& position); |
| 201 | 205 |
| 202 // Helper to send messages to embedder. If this guest is not yet attached, | 206 // Helper to send messages to embedder. If this guest is not yet attached, |
| 203 // then IPCs will be queued until attachment. | 207 // then IPCs will be queued until attachment. |
| 204 void SendMessageToEmbedder(IPC::Message* msg); | 208 void SendMessageToEmbedder(IPC::Message* msg); |
| 209 void SendMessageToEmbedder(BrowserPluginMessageFunc msg_func); | |
| 205 | 210 |
| 206 // Returns whether the guest is attached to an embedder. | 211 // Returns whether the guest is attached to an embedder. |
| 207 bool attached() const { return attached_; } | 212 bool attached() const { return attached_; } |
| 208 | 213 |
| 209 // Returns true when an attachment has taken place since the last time the | 214 // Returns true when an attachment has taken place since the last time the |
| 210 // compositor surface was set. | 215 // compositor surface was set. |
| 211 bool has_attached_since_surface_set() const { | 216 bool has_attached_since_surface_set() const { |
| 212 return has_attached_since_surface_set_; | 217 return has_attached_since_surface_set_; |
| 213 } | 218 } |
| 214 | 219 |
| (...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 453 // Subsequent frames are not generated until the IPC is ACKed. We would like | 458 // Subsequent frames are not generated until the IPC is ACKed. We would like |
| 454 // to ensure that the guest generates frames on attachment so we directly ACK | 459 // to ensure that the guest generates frames on attachment so we directly ACK |
| 455 // an unACKed CFS. ACKs could get lost between the time a guest is detached | 460 // an unACKed CFS. ACKs could get lost between the time a guest is detached |
| 456 // from a container and the time it is attached elsewhere. This mitigates this | 461 // from a container and the time it is attached elsewhere. This mitigates this |
| 457 // race by ensuring the guest is ACKed on attachment. | 462 // race by ensuring the guest is ACKed on attachment. |
| 458 scoped_ptr<FrameMsg_CompositorFrameSwapped_Params> last_pending_frame_; | 463 scoped_ptr<FrameMsg_CompositorFrameSwapped_Params> last_pending_frame_; |
| 459 | 464 |
| 460 // This is a queue of messages that are destined to be sent to the embedder | 465 // This is a queue of messages that are destined to be sent to the embedder |
| 461 // once the guest is attached to a particular embedder. | 466 // once the guest is attached to a particular embedder. |
| 462 std::deque<linked_ptr<IPC::Message> > pending_messages_; | 467 std::deque<linked_ptr<IPC::Message> > pending_messages_; |
| 468 std::deque<BrowserPluginMessageFunc> pending_message_funcs_; | |
| 463 | 469 |
| 464 BrowserPluginGuestDelegate* const delegate_; | 470 BrowserPluginGuestDelegate* const delegate_; |
| 465 | 471 |
| 466 // Weak pointer used to ask GeolocationPermissionContext about geolocation | 472 // Weak pointer used to ask GeolocationPermissionContext about geolocation |
| 467 // permission. | 473 // permission. |
| 468 base::WeakPtrFactory<BrowserPluginGuest> weak_ptr_factory_; | 474 base::WeakPtrFactory<BrowserPluginGuest> weak_ptr_factory_; |
| 469 | 475 |
| 470 DISALLOW_COPY_AND_ASSIGN(BrowserPluginGuest); | 476 DISALLOW_COPY_AND_ASSIGN(BrowserPluginGuest); |
| 471 }; | 477 }; |
| 472 | 478 |
| 473 } // namespace content | 479 } // namespace content |
| 474 | 480 |
| 475 #endif // CONTENT_BROWSER_BROWSER_PLUGIN_BROWSER_PLUGIN_GUEST_H_ | 481 #endif // CONTENT_BROWSER_BROWSER_PLUGIN_BROWSER_PLUGIN_GUEST_H_ |
| OLD | NEW |