Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(207)

Side by Side Diff: components/guest_view/browser/guest_view_base.h

Issue 1392343002: Reduce the public method footprint of GuestViewBase and derived types. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 COMPONENTS_GUEST_VIEW_BROWSER_GUEST_VIEW_BASE_H_ 5 #ifndef COMPONENTS_GUEST_VIEW_BROWSER_GUEST_VIEW_BASE_H_
6 #define COMPONENTS_GUEST_VIEW_BROWSER_GUEST_VIEW_BASE_H_ 6 #define COMPONENTS_GUEST_VIEW_BROWSER_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"
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
75 static GuestViewBase* From(int owner_process_id, int instance_id); 75 static GuestViewBase* From(int owner_process_id, int instance_id);
76 76
77 // Given a |web_contents|, returns the top level owner WebContents. If 77 // Given a |web_contents|, returns the top level owner WebContents. If
78 // |web_contents| does not belong to a GuestView, it will be returned 78 // |web_contents| does not belong to a GuestView, it will be returned
79 // unchanged. 79 // unchanged.
80 static content::WebContents* GetTopLevelWebContents( 80 static content::WebContents* GetTopLevelWebContents(
81 content::WebContents* web_contents); 81 content::WebContents* web_contents);
82 82
83 static bool IsGuest(content::WebContents* web_contents); 83 static bool IsGuest(content::WebContents* web_contents);
84 84
85 // BrowserPluginGuestDelegate implementation.
86 void DidAttach(int guest_proxy_routing_id) final;
Fady Samuel 2015/10/09 22:35:19 Do DidAttach and WillAttach need to be public? Can
paulmeyer 2015/10/16 21:13:03 They need to be public because they are both calle
Fady Samuel 2015/10/16 21:17:28 I'd make GuestViewMessageFilter a friend instead.
paulmeyer 2015/10/21 19:45:12 Done.
87 void WillAttach(content::WebContents* embedder_web_contents,
88 int browser_plugin_instance_id,
89 bool is_full_page_plugin,
90 const base::Closure& callback) final;
91
92 // Returns the name of the derived type of this GuestView.
85 virtual const char* GetViewType() const = 0; 93 virtual const char* GetViewType() const = 0;
86 94
87 // This method is called after the guest has been attached to an embedder and
88 // suspended resource loads have been resumed.
89 //
90 // This method can be overriden by subclasses. This gives the derived class
91 // an opportunity to perform setup actions after attachment.
92 virtual void DidAttachToEmbedder() {}
93
94 // This method is called after this GuestViewBase has been initiated.
95 //
96 // This gives the derived class an opportunity to perform additional
97 // initialization.
98 virtual void DidInitialize(const base::DictionaryValue& create_params) {}
99
100 // This method is called when the initial set of frames within the page have
101 // completed loading.
102 virtual void GuestViewDidStopLoading() {}
103
104 // This method is called when the embedder's zoom changes.
105 virtual void EmbedderZoomChanged(double old_zoom_level,
106 double new_zoom_level) {}
107
108 // This method is called when the guest WebContents has been destroyed. This
109 // object will be destroyed after this call returns.
110 //
111 // This gives the derived class an opportunity to perform some cleanup.
112 virtual void GuestDestroyed() {}
113
114 // This method is invoked when the guest RenderView is ready, e.g. because we
115 // recreated it after a crash or after reattachment.
116 //
117 // This gives the derived class an opportunity to perform some initialization
118 // work.
119 virtual void GuestReady() {}
120
121 // This method is called when the guest's zoom changes.
122 virtual void GuestZoomChanged(double old_zoom_level, double new_zoom_level) {}
123
124 // This method is called when embedder WebContents's fullscreen is toggled.
125 //
126 // If the guest asked the embedder to enter fullscreen, the guest uses this
127 // signal to exit fullscreen state.
128 virtual void EmbedderFullscreenToggled(bool entered_fullscreen) {}
129
130 // This method is invoked when the contents auto-resized to give the container
131 // an opportunity to match it if it wishes.
132 //
133 // This gives the derived class an opportunity to inform its container element
134 // or perform other actions.
135 virtual void GuestSizeChangedDueToAutoSize(const gfx::Size& old_size,
136 const gfx::Size& new_size) {}
137
138 // This method queries whether autosize is supported for this particular view. 95 // This method queries whether autosize is supported for this particular view.
139 // By default, autosize is not supported. Derived classes can override this 96 // By default, autosize is not supported. Derived classes can override this
140 // behavior to support autosize. 97 // behavior to support autosize.
141 virtual bool IsAutoSizeSupported() const; 98 virtual bool IsAutoSizeSupported() const;
142 99
143 // This method is invoked when the contents preferred size changes. This will
144 // only ever fire if IsPreferredSizeSupported returns true.
145 virtual void OnPreferredSizeChanged(const gfx::Size& pref_size) {}
146
147 // This method queries whether preferred size events are enabled for this 100 // This method queries whether preferred size events are enabled for this
148 // view. By default, preferred size events are disabled, since they add a 101 // view. By default, preferred size events are disabled, since they add a
149 // small amount of overhead. 102 // small amount of overhead.
150 virtual bool IsPreferredSizeModeEnabled() const; 103 virtual bool IsPreferredSizeModeEnabled() const;
151 104
152 // This method is called immediately before suspended resource loads have been 105 // This indicates whether zoom should propagate from the embedder to the guest
153 // resumed on attachment to an embedder. 106 // content.
154 //
155 // This method can be overriden by subclasses. This gives the derived class
156 // an opportunity to perform setup actions before attachment.
157 virtual void WillAttachToEmbedder() {}
158
159 // This method is called when the guest WebContents is about to be destroyed.
160 //
161 // This gives the derived class an opportunity to perform some cleanup prior
162 // to destruction.
163 virtual void WillDestroy() {}
164
165 // This method is to be implemented by the derived class. This indicates
166 // whether zoom should propagate from the embedder to the guest content.
167 virtual bool ZoomPropagatesFromEmbedderToGuest() const; 107 virtual bool ZoomPropagatesFromEmbedderToGuest() const;
168 108
169 // This method is to be implemented by the derived class. Access to guest 109 // Access to guest views are determined by the availability of the internal
170 // views are determined by the availability of the internal extension API 110 // extension API used to implement the guest view.
171 // used to implement the guest view.
172 // 111 //
173 // This should be the name of the API as it appears in the _api_features.json 112 // This should be the name of the API as it appears in the _api_features.json
174 // file. 113 // file.
175 virtual const char* GetAPINamespace() const = 0; 114 virtual const char* GetAPINamespace() const = 0;
176 115
177 // This method is to be implemented by the derived class. This method is the 116 // This method is the task prefix to show for a task produced by this
178 // task prefix to show for a task produced by this GuestViewBase's derived 117 // GuestViewBase's derived type.
179 // type.
180 virtual int GetTaskPrefix() const = 0; 118 virtual int GetTaskPrefix() const = 0;
181 119
182 // This method is to be implemented by the derived class. Given a set of 120 // Dispatches an event to the guest proxy.
183 // initialization parameters, a concrete subclass of GuestViewBase can 121 void DispatchEventToGuestProxy(GuestViewEvent* event);
184 // create a specialized WebContents that it returns back to GuestViewBase. 122
185 using WebContentsCreatedCallback = 123 // Dispatches an event to the view.
186 base::Callback<void(content::WebContents*)>; 124 void DispatchEventToView(GuestViewEvent* event);
187 virtual void CreateWebContents(
188 const base::DictionaryValue& create_params,
189 const WebContentsCreatedCallback& callback) = 0;
190 125
191 // This creates a WebContents and initializes |this| GuestViewBase to use the 126 // This creates a WebContents and initializes |this| GuestViewBase to use the
192 // newly created WebContents. 127 // newly created WebContents.
128 using WebContentsCreatedCallback =
129 base::Callback<void(content::WebContents*)>;
193 void Init(const base::DictionaryValue& create_params, 130 void Init(const base::DictionaryValue& create_params,
194 const WebContentsCreatedCallback& callback); 131 const WebContentsCreatedCallback& callback);
195 132
196 void InitWithWebContents(const base::DictionaryValue& create_params, 133 void InitWithWebContents(const base::DictionaryValue& create_params,
197 content::WebContents* guest_web_contents); 134 content::WebContents* guest_web_contents);
198 135
199 void LoadURLWithParams(
200 const content::NavigationController::LoadURLParams& load_params);
201
202 bool IsViewType(const char* const view_type) const { 136 bool IsViewType(const char* const view_type) const {
203 return !strcmp(GetViewType(), view_type); 137 return !strcmp(GetViewType(), view_type);
204 } 138 }
205 139
206 // Used to toggle autosize mode for this GuestView, and set both the automatic 140 // Used to toggle autosize mode for this GuestView, and set both the automatic
207 // and normal sizes. 141 // and normal sizes.
208 void SetSize(const SetSizeParams& params); 142 void SetSize(const SetSizeParams& params);
209 143
210 bool initialized() const { return initialized_; } 144 bool initialized() const { return initialized_; }
211 145
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 // This value is only valid after attachment or first navigation. 198 // This value is only valid after attachment or first navigation.
265 int proxy_routing_id() const { return guest_proxy_routing_id_; } 199 int proxy_routing_id() const { return guest_proxy_routing_id_; }
266 200
267 // Destroy this guest. 201 // Destroy this guest.
268 void Destroy(); 202 void Destroy();
269 203
270 // Saves the attach state of the custom element hosting this GuestView. 204 // Saves the attach state of the custom element hosting this GuestView.
271 void SetAttachParams(const base::DictionaryValue& params); 205 void SetAttachParams(const base::DictionaryValue& params);
272 void SetOpener(GuestViewBase* opener); 206 void SetOpener(GuestViewBase* opener);
273 207
274 content::WebContents* CreateNewGuestWindow(
275 const content::WebContents::CreateParams& create_params) final;
276 void DidAttach(int guest_proxy_routing_id) final;
277 void DidDetach() final;
278 content::WebContents* GetOwnerWebContents() const final;
279 bool Find(int request_id,
280 const base::string16& search_text,
281 const blink::WebFindOptions& options) final;
282 bool StopFinding(content::StopFindAction action) final;
283 void GuestSizeChanged(const gfx::Size& new_size) final;
284 void SetGuestHost(content::GuestHost* guest_host) final;
285 void WillAttach(content::WebContents* embedder_web_contents,
286 int browser_plugin_instance_id,
287 bool is_full_page_plugin,
288 const base::Closure& callback) final;
289
290 // ui_zoom::ZoomObserver implementation.
291 void OnZoomChanged(
292 const ui_zoom::ZoomController::ZoomChangedEventData& data) final;
293
294 // Dispatches an event to the guest proxy.
295 void DispatchEventToGuestProxy(GuestViewEvent* event);
296
297 // Dispatches an event to the view.
298 void DispatchEventToView(GuestViewEvent* event);
299
300 protected: 208 protected:
301 explicit GuestViewBase(content::WebContents* owner_web_contents); 209 explicit GuestViewBase(content::WebContents* owner_web_contents);
302 210
303 ~GuestViewBase() override; 211 ~GuestViewBase() override;
304 212
213 // BrowserPluginGuestDelegate implementation.
214 void SetContextMenuPosition(const gfx::Point& position) override;
215
216 // WebContentsDelegate implementation.
217 void HandleKeyboardEvent(
218 content::WebContents* source,
219 const content::NativeWebKeyboardEvent& event) override;
220 bool PreHandleGestureEvent(content::WebContents* source,
221 const blink::WebGestureEvent& event) override;
222 void FindReply(content::WebContents* source,
223 int request_id,
224 int number_of_matches,
225 const gfx::Rect& selection_rect,
226 int active_match_ordinal,
227 bool final_update) override;
228
229 // WebContentsObserver implementation.
230 void DidNavigateMainFrame(
231 const content::LoadCommittedDetails& details,
232 const content::FrameNavigateParams& params) override;
233
234 // Given a set of initialization parameters, a concrete subclass of
235 // GuestViewBase can create a specialized WebContents that it returns back to
236 // GuestViewBase.
237 virtual void CreateWebContents(
238 const base::DictionaryValue& create_params,
239 const WebContentsCreatedCallback& callback) = 0;
240
241 // This method is called after the guest has been attached to an embedder and
242 // suspended resource loads have been resumed.
243 //
244 // This method can be overriden by subclasses. This gives the derived class
245 // an opportunity to perform setup actions after attachment.
246 virtual void DidAttachToEmbedder() {}
247
248 // This method is called after this GuestViewBase has been initiated.
249 //
250 // This gives the derived class an opportunity to perform additional
251 // initialization.
252 virtual void DidInitialize(const base::DictionaryValue& create_params) {}
253
254 // This method is called when embedder WebContents's fullscreen is toggled.
255 //
256 // If the guest asked the embedder to enter fullscreen, the guest uses this
257 // signal to exit fullscreen state.
258 virtual void EmbedderFullscreenToggled(bool entered_fullscreen) {}
259
260 // This method is called when the initial set of frames within the page have
261 // completed loading.
262 virtual void GuestViewDidStopLoading() {}
263
264 // This method is called when the guest WebContents has been destroyed. This
265 // object will be destroyed after this call returns.
266 //
267 // This gives the derived class an opportunity to perform some cleanup.
268 virtual void GuestDestroyed() {}
269
270 // This method is invoked when the guest RenderView is ready, e.g. because we
271 // recreated it after a crash or after reattachment.
272 //
273 // This gives the derived class an opportunity to perform some initialization
274 // work.
275 virtual void GuestReady() {}
276
277 // This method is called when the guest's zoom changes.
278 virtual void GuestZoomChanged(double old_zoom_level, double new_zoom_level) {}
279
280 // This method is invoked when the contents auto-resized to give the container
281 // an opportunity to match it if it wishes.
282 //
283 // This gives the derived class an opportunity to inform its container element
284 // or perform other actions.
285 virtual void GuestSizeChangedDueToAutoSize(const gfx::Size& old_size,
286 const gfx::Size& new_size) {}
287
288 // This method is invoked when the contents preferred size changes. This will
289 // only ever fire if IsPreferredSizeSupported returns true.
290 virtual void OnPreferredSizeChanged(const gfx::Size& pref_size) {}
291
292 // Signals that the guest view is ready. The default implementation signals
293 // immediately, but derived class can override this if they need to do
294 // asynchronous setup.
295 virtual void SignalWhenReady(const base::Closure& callback);
296
297 // Returns true if this guest should handle find requests for its
298 // embedder. This should generally be true for guests that make up the
299 // entirety of the embedder's content.
300 virtual bool ShouldHandleFindRequestsForEmbedder() const;
301
302 // This method is called immediately before suspended resource loads have been
303 // resumed on attachment to an embedder.
304 //
305 // This method can be overriden by subclasses. This gives the derived class
306 // an opportunity to perform setup actions before attachment.
307 virtual void WillAttachToEmbedder() {}
308
309 // This method is called when the guest WebContents is about to be destroyed.
310 //
311 // This gives the derived class an opportunity to perform some cleanup prior
312 // to destruction.
313 virtual void WillDestroy() {}
314
315 void LoadURLWithParams(
316 const content::NavigationController::LoadURLParams& load_params);
317
305 // Convert sizes in pixels from logical to physical numbers of pixels. 318 // Convert sizes in pixels from logical to physical numbers of pixels.
306 // Note that a size can consist of a fractional number of logical pixels 319 // Note that a size can consist of a fractional number of logical pixels
307 // (hence |logical_pixels| is represented as a double), but will always 320 // (hence |logical_pixels| is represented as a double), but will always
308 // consist of an integral number of physical pixels (hence the return value 321 // consist of an integral number of physical pixels (hence the return value
309 // is represented as an int). 322 // is represented as an int).
310 int LogicalPixelsToPhysicalPixels(double logical_pixels) const; 323 int LogicalPixelsToPhysicalPixels(double logical_pixels) const;
311 324
312 // Convert sizes in pixels from physical to logical numbers of pixels. 325 // Convert sizes in pixels from physical to logical numbers of pixels.
313 // Note that a size can consist of a fractional number of logical pixels 326 // Note that a size can consist of a fractional number of logical pixels
314 // (hence the return value is represented as a double), but will always 327 // (hence the return value is represented as a double), but will always
315 // consist of an integral number of physical pixels (hence |physical_pixels| 328 // consist of an integral number of physical pixels (hence |physical_pixels|
316 // is represented as an int). 329 // is represented as an int).
317 double PhysicalPixelsToLogicalPixels(int physical_pixels) const; 330 double PhysicalPixelsToLogicalPixels(int physical_pixels) const;
318 331
319 // WebContentsObserver implementation. 332 void SetGuestZoomLevelToMatchEmbedder();
320 void DidStopLoading() final; 333
321 void RenderViewReady() final; 334 private:
322 void WebContentsDestroyed() final; 335 class OwnerContentsObserver;
323 void DidNavigateMainFrame( 336 class OpenerLifetimeObserver;
324 const content::LoadCommittedDetails& details, 337
325 const content::FrameNavigateParams& params) override; 338 // BrowserPluginGuestDelegate implementation.
339 content::WebContents* CreateNewGuestWindow(
340 const content::WebContents::CreateParams& create_params) final;
341 void DidDetach() final;
342 content::WebContents* GetOwnerWebContents() const final;
343 bool Find(int request_id,
344 const base::string16& search_text,
345 const blink::WebFindOptions& options) final;
346 bool StopFinding(content::StopFindAction action) final;
347 void GuestSizeChanged(const gfx::Size& new_size) final;
348 void SetGuestHost(content::GuestHost* guest_host) final;
326 349
327 // WebContentsDelegate implementation. 350 // WebContentsDelegate implementation.
328 void ActivateContents(content::WebContents* contents) final; 351 void ActivateContents(content::WebContents* contents) final;
329 void DeactivateContents(content::WebContents* contents) final; 352 void DeactivateContents(content::WebContents* contents) final;
330 void ContentsMouseEvent(content::WebContents* source, 353 void ContentsMouseEvent(content::WebContents* source,
331 const gfx::Point& location, 354 const gfx::Point& location,
332 bool motion) override; 355 bool motion) final;
333 void ContentsZoomChange(bool zoom_in) override; 356 void ContentsZoomChange(bool zoom_in) final;
334 void HandleKeyboardEvent(
335 content::WebContents* source,
336 const content::NativeWebKeyboardEvent& event) override;
337 void LoadingStateChanged(content::WebContents* source, 357 void LoadingStateChanged(content::WebContents* source,
338 bool to_different_document) final; 358 bool to_different_document) final;
339 content::ColorChooser* OpenColorChooser( 359 content::ColorChooser* OpenColorChooser(
340 content::WebContents* web_contents, 360 content::WebContents* web_contents,
341 SkColor color, 361 SkColor color,
342 const std::vector<content::ColorSuggestion>& suggestions) override; 362 const std::vector<content::ColorSuggestion>& suggestions) final;
343 void ResizeDueToAutoResize(content::WebContents* web_contents, 363 void ResizeDueToAutoResize(content::WebContents* web_contents,
344 const gfx::Size& new_size) override; 364 const gfx::Size& new_size) final;
345 void RunFileChooser(content::WebContents* web_contents, 365 void RunFileChooser(content::WebContents* web_contents,
346 const content::FileChooserParams& params) override; 366 const content::FileChooserParams& params) final;
347 bool ShouldFocusPageAfterCrash() final; 367 bool ShouldFocusPageAfterCrash() final;
348 bool PreHandleGestureEvent(content::WebContents* source,
349 const blink::WebGestureEvent& event) override;
350 void UpdatePreferredSize(content::WebContents* web_contents, 368 void UpdatePreferredSize(content::WebContents* web_contents,
351 const gfx::Size& pref_size) final; 369 const gfx::Size& pref_size) final;
352 void UpdateTargetURL(content::WebContents* source, const GURL& url) override; 370 void UpdateTargetURL(content::WebContents* source, const GURL& url) final;
353 bool ShouldResumeRequestsForCreatedWindow() override; 371 bool ShouldResumeRequestsForCreatedWindow() final;
354 void FindReply(content::WebContents* source,
355 int request_id,
356 int number_of_matches,
357 const gfx::Rect& selection_rect,
358 int active_match_ordinal,
359 bool final_update) override;
360 372
361 void SetGuestZoomLevelToMatchEmbedder(); 373 // WebContentsObserver implementation.
374 void DidStopLoading() final;
375 void RenderViewReady() final;
376 void WebContentsDestroyed() final;
362 377
363 // Signals that the guest view is ready. The default implementation signals 378 // ui_zoom::ZoomObserver implementation.
364 // immediately, but derived class can override this if they need to do 379 void OnZoomChanged(
365 // asynchronous setup. 380 const ui_zoom::ZoomController::ZoomChangedEventData& data) final;
366 virtual void SignalWhenReady(const base::Closure& callback);
367
368 // Returns true if this guest should handle find requests for its
369 // embedder. This should generally be true for guests that make up the
370 // entirety of the embedder's content.
371 virtual bool ShouldHandleFindRequestsForEmbedder() const;
372
373 // BrowserPluginGuestDelegate implementation.
374 void SetContextMenuPosition(const gfx::Point& position) override;
375
376 private:
377 class OwnerContentsObserver;
378
379 class OpenerLifetimeObserver;
380 381
381 void SendQueuedEvents(); 382 void SendQueuedEvents();
382 383
383 void CompleteInit(scoped_ptr<base::DictionaryValue> create_params, 384 void CompleteInit(scoped_ptr<base::DictionaryValue> create_params,
384 const WebContentsCreatedCallback& callback, 385 const WebContentsCreatedCallback& callback,
385 content::WebContents* guest_web_contents); 386 content::WebContents* guest_web_contents);
386 387
387 // Dispatches the onResize event to the embedder. 388 // Dispatches the onResize event to the embedder.
388 void DispatchOnResizeEvent(const gfx::Size& old_size, 389 void DispatchOnResizeEvent(const gfx::Size& old_size,
389 const gfx::Size& new_size); 390 const gfx::Size& new_size);
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
476 // This is used to ensure pending tasks will not fire after this object is 477 // This is used to ensure pending tasks will not fire after this object is
477 // destroyed. 478 // destroyed.
478 base::WeakPtrFactory<GuestViewBase> weak_ptr_factory_; 479 base::WeakPtrFactory<GuestViewBase> weak_ptr_factory_;
479 480
480 DISALLOW_COPY_AND_ASSIGN(GuestViewBase); 481 DISALLOW_COPY_AND_ASSIGN(GuestViewBase);
481 }; 482 };
482 483
483 } // namespace guest_view 484 } // namespace guest_view
484 485
485 #endif // COMPONENTS_GUEST_VIEW_BROWSER_GUEST_VIEW_BASE_H_ 486 #endif // COMPONENTS_GUEST_VIEW_BROWSER_GUEST_VIEW_BASE_H_
OLDNEW
« no previous file with comments | « no previous file | components/guest_view/browser/guest_view_base.cc » ('j') | components/guest_view/browser/guest_view_base.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698