Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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_BROWSER_GUEST_VIEW_GUEST_VIEW_BASE_H_ | 5 #ifndef CHROME_BROWSER_GUEST_VIEW_GUEST_VIEW_BASE_H_ |
| 6 #define CHROME_BROWSER_GUEST_VIEW_GUEST_VIEW_BASE_H_ | 6 #define CHROME_BROWSER_GUEST_VIEW_GUEST_VIEW_BASE_H_ |
| 7 | 7 |
| 8 #include <queue> | 8 #include <queue> |
| 9 | 9 |
| 10 #include "base/memory/weak_ptr.h" | 10 #include "base/memory/weak_ptr.h" |
| 11 #include "base/values.h" | 11 #include "base/values.h" |
| 12 #include "content/public/browser/browser_plugin_guest_delegate.h" | 12 #include "content/public/browser/browser_plugin_guest_delegate.h" |
| 13 #include "content/public/browser/web_contents.h" | 13 #include "content/public/browser/web_contents.h" |
| 14 #include "content/public/browser/web_contents_delegate.h" | 14 #include "content/public/browser/web_contents_delegate.h" |
| 15 #include "content/public/browser/web_contents_observer.h" | |
| 15 | 16 |
| 16 struct RendererContentSettingRules; | 17 struct RendererContentSettingRules; |
| 17 | 18 |
| 18 // A GuestViewBase is the base class browser-side API implementation for a | 19 // A GuestViewBase is the base class browser-side API implementation for a |
| 19 // <*view> tag. GuestViewBase maintains an association between a guest | 20 // <*view> tag. GuestViewBase maintains an association between a guest |
| 20 // WebContents and an embedder WebContents. It receives events issued from | 21 // WebContents and an embedder WebContents. It receives events issued from |
| 21 // the guest and relays them to the embedder. | 22 // the guest and relays them to the embedder. |
|
lazyboy
2014/05/29 19:13:58
Add comment about this becoming a WCObserver.
Fady Samuel
2014/05/29 21:21:12
This almost seems like an implementation detail. I
| |
| 22 class GuestViewBase : public content::BrowserPluginGuestDelegate, | 23 class GuestViewBase : public content::BrowserPluginGuestDelegate, |
| 23 public content::WebContentsDelegate { | 24 public content::WebContentsDelegate, |
| 25 public content::WebContentsObserver { | |
| 24 public: | 26 public: |
| 25 class Event { | 27 class Event { |
| 26 public: | 28 public: |
| 27 Event(const std::string& name, scoped_ptr<base::DictionaryValue> args); | 29 Event(const std::string& name, scoped_ptr<base::DictionaryValue> args); |
| 28 ~Event(); | 30 ~Event(); |
| 29 | 31 |
| 30 const std::string& name() const { return name_; } | 32 const std::string& name() const { return name_; } |
| 31 | 33 |
| 32 scoped_ptr<base::DictionaryValue> GetArguments(); | 34 scoped_ptr<base::DictionaryValue> GetArguments(); |
| 33 | 35 |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 67 std::string* partition_domain, | 69 std::string* partition_domain, |
| 68 std::string* partition_name, | 70 std::string* partition_name, |
| 69 bool* in_memory); | 71 bool* in_memory); |
| 70 | 72 |
| 71 // By default, JavaScript and images are enabled in guest content. | 73 // By default, JavaScript and images are enabled in guest content. |
| 72 static void GetDefaultContentSettingRules(RendererContentSettingRules* rules, | 74 static void GetDefaultContentSettingRules(RendererContentSettingRules* rules, |
| 73 bool incognito); | 75 bool incognito); |
| 74 | 76 |
| 75 virtual const char* GetViewType() const = 0; | 77 virtual const char* GetViewType() const = 0; |
| 76 | 78 |
| 79 virtual void EmbedderDestroyed() {} | |
|
lazyboy
2014/05/29 19:13:58
Add documentation.
Fady Samuel
2014/05/29 21:21:12
Done.
| |
| 80 | |
| 77 bool IsViewType(const char* const view_type) const { | 81 bool IsViewType(const char* const view_type) const { |
| 78 return !strcmp(GetViewType(), view_type); | 82 return !strcmp(GetViewType(), view_type); |
| 79 } | 83 } |
| 80 | 84 |
| 81 base::WeakPtr<GuestViewBase> AsWeakPtr(); | 85 base::WeakPtr<GuestViewBase> AsWeakPtr(); |
| 82 | 86 |
| 83 virtual void Attach(content::WebContents* embedder_web_contents, | 87 virtual void Attach(content::WebContents* embedder_web_contents, |
| 84 const base::DictionaryValue& args); | 88 const base::DictionaryValue& args); |
| 85 | 89 |
| 86 content::WebContents* embedder_web_contents() const { | 90 content::WebContents* embedder_web_contents() const { |
| 87 return embedder_web_contents_; | 91 return embedder_web_contents_; |
| 88 } | 92 } |
| 89 | 93 |
| 90 // Returns the guest WebContents. | 94 // Returns the guest WebContents. |
| 91 content::WebContents* guest_web_contents() const { | 95 content::WebContents* guest_web_contents() const { |
| 92 return guest_web_contents_; | 96 return web_contents(); |
| 93 } | 97 } |
| 94 | 98 |
| 95 // Returns the extra parameters associated with this GuestView passed | 99 // Returns the extra parameters associated with this GuestView passed |
| 96 // in from JavaScript. | 100 // in from JavaScript. |
| 97 base::DictionaryValue* extra_params() const { | 101 base::DictionaryValue* extra_params() const { |
| 98 return extra_params_.get(); | 102 return extra_params_.get(); |
| 99 } | 103 } |
| 100 | 104 |
| 101 // Returns whether this guest has an associated embedder. | 105 // Returns whether this guest has an associated embedder. |
| 102 bool attached() const { return !!embedder_web_contents_; } | 106 bool attached() const { return !!embedder_web_contents_; } |
| (...skipping 17 matching lines...) Expand all Loading... | |
| 120 | 124 |
| 121 // Returns the embedder's process ID. | 125 // Returns the embedder's process ID. |
| 122 int embedder_render_process_id() const { return embedder_render_process_id_; } | 126 int embedder_render_process_id() const { return embedder_render_process_id_; } |
| 123 | 127 |
| 124 GuestViewBase* GetOpener() const { | 128 GuestViewBase* GetOpener() const { |
| 125 return opener_.get(); | 129 return opener_.get(); |
| 126 } | 130 } |
| 127 | 131 |
| 128 void SetOpener(GuestViewBase* opener); | 132 void SetOpener(GuestViewBase* opener); |
| 129 | 133 |
| 134 // WebContentsObserver implementation. | |
| 135 virtual void WebContentsDestroyed() OVERRIDE; | |
| 136 | |
| 130 // WebContentsDelegate implementation. | 137 // WebContentsDelegate implementation. |
| 131 virtual bool ShouldFocusPageAfterCrash() OVERRIDE; | 138 virtual bool ShouldFocusPageAfterCrash() OVERRIDE; |
| 132 virtual bool PreHandleGestureEvent( | 139 virtual bool PreHandleGestureEvent( |
| 133 content::WebContents* source, | 140 content::WebContents* source, |
| 134 const blink::WebGestureEvent& event) OVERRIDE; | 141 const blink::WebGestureEvent& event) OVERRIDE; |
| 135 | 142 |
| 136 // BrowserPluginGuestDelegate implementation. | 143 // BrowserPluginGuestDelegate implementation. |
| 137 virtual void Destroy() OVERRIDE; | 144 virtual void Destroy() OVERRIDE; |
| 138 virtual void RegisterDestructionCallback( | 145 virtual void RegisterDestructionCallback( |
| 139 const DestructionCallback& callback) OVERRIDE; | 146 const DestructionCallback& callback) OVERRIDE; |
| 140 protected: | 147 protected: |
| 141 GuestViewBase(int guest_instance_id, | 148 GuestViewBase(int guest_instance_id, |
| 142 content::WebContents* guest_web_contents, | 149 content::WebContents* guest_web_contents, |
| 143 const std::string& embedder_extension_id); | 150 const std::string& embedder_extension_id); |
| 144 virtual ~GuestViewBase(); | 151 virtual ~GuestViewBase(); |
| 145 | 152 |
| 146 // Dispatches an event |event_name| to the embedder with the |event| fields. | 153 // Dispatches an event |event_name| to the embedder with the |event| fields. |
| 147 void DispatchEvent(Event* event); | 154 void DispatchEvent(Event* event); |
| 148 | 155 |
| 149 private: | 156 private: |
| 157 class EmbedderWebContentsObserver; | |
|
lazyboy
2014/05/29 19:13:58
nit: newline after this line.
Fady Samuel
2014/05/29 21:21:12
Done.
| |
| 150 void SendQueuedEvents(); | 158 void SendQueuedEvents(); |
| 151 | 159 |
| 152 content::WebContents* const guest_web_contents_; | |
| 153 content::WebContents* embedder_web_contents_; | 160 content::WebContents* embedder_web_contents_; |
| 154 const std::string embedder_extension_id_; | 161 const std::string embedder_extension_id_; |
| 155 int embedder_render_process_id_; | 162 int embedder_render_process_id_; |
| 156 content::BrowserContext* const browser_context_; | 163 content::BrowserContext* const browser_context_; |
| 157 // |guest_instance_id_| is a profile-wide unique identifier for a guest | 164 // |guest_instance_id_| is a profile-wide unique identifier for a guest |
| 158 // WebContents. | 165 // WebContents. |
| 159 const int guest_instance_id_; | 166 const int guest_instance_id_; |
| 160 // |view_instance_id_| is an identifier that's unique within a particular | 167 // |view_instance_id_| is an identifier that's unique within a particular |
| 161 // embedder RenderViewHost for a particular <*view> instance. | 168 // embedder RenderViewHost for a particular <*view> instance. |
| 162 int view_instance_id_; | 169 int view_instance_id_; |
| 163 | 170 |
| 164 // This is a queue of Events that are destined to be sent to the embedder once | 171 // This is a queue of Events that are destined to be sent to the embedder once |
| 165 // the guest is attached to a particular embedder. | 172 // the guest is attached to a particular embedder. |
| 166 std::deque<linked_ptr<Event> > pending_events_; | 173 std::deque<linked_ptr<Event> > pending_events_; |
| 167 | 174 |
| 168 // The opener guest view. | 175 // The opener guest view. |
| 169 base::WeakPtr<GuestViewBase> opener_; | 176 base::WeakPtr<GuestViewBase> opener_; |
| 170 | 177 |
| 171 DestructionCallback destruction_callback_; | 178 DestructionCallback destruction_callback_; |
| 172 | 179 |
| 173 // The extra parameters associated with this GuestView passed | 180 // The extra parameters associated with this GuestView passed |
| 174 // in from JavaScript. This will typically be the view instance ID, | 181 // in from JavaScript. This will typically be the view instance ID, |
| 175 // the API to use, and view-specific parameters. These parameters | 182 // the API to use, and view-specific parameters. These parameters |
| 176 // are passed along to new guests that are created from this guest. | 183 // are passed along to new guests that are created from this guest. |
| 177 scoped_ptr<base::DictionaryValue> extra_params_; | 184 scoped_ptr<base::DictionaryValue> extra_params_; |
| 178 | 185 |
| 186 scoped_ptr<EmbedderWebContentsObserver> embedder_web_contents_observer_; | |
| 187 | |
| 179 // This is used to ensure pending tasks will not fire after this object is | 188 // This is used to ensure pending tasks will not fire after this object is |
| 180 // destroyed. | 189 // destroyed. |
| 181 base::WeakPtrFactory<GuestViewBase> weak_ptr_factory_; | 190 base::WeakPtrFactory<GuestViewBase> weak_ptr_factory_; |
| 182 | 191 |
| 183 DISALLOW_COPY_AND_ASSIGN(GuestViewBase); | 192 DISALLOW_COPY_AND_ASSIGN(GuestViewBase); |
| 184 }; | 193 }; |
| 185 | 194 |
| 186 #endif // CHROME_BROWSER_GUEST_VIEW_GUEST_VIEW_BASE_H_ | 195 #endif // CHROME_BROWSER_GUEST_VIEW_GUEST_VIEW_BASE_H_ |
| OLD | NEW |