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

Side by Side Diff: extensions/browser/guest_view/guest_view_base.cc

Issue 1066563006: GuestView: Move GuestViewManager extension dependencies to ExtensionsGuestViewManagerDelegate (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@extensions_guest_view_message_filter
Patch Set: Fixed tests Created 5 years, 8 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 #include "extensions/browser/guest_view/guest_view_base.h" 5 #include "extensions/browser/guest_view/guest_view_base.h"
6 6
7 #include "base/lazy_instance.h" 7 #include "base/lazy_instance.h"
8 #include "base/strings/utf_string_conversions.h" 8 #include "base/strings/utf_string_conversions.h"
9 #include "components/ui/zoom/page_zoom.h" 9 #include "components/ui/zoom/page_zoom.h"
10 #include "components/ui/zoom/zoom_controller.h" 10 #include "components/ui/zoom/zoom_controller.h"
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
137 } 137 }
138 138
139 private: 139 private:
140 GuestViewBase* guest_; 140 GuestViewBase* guest_;
141 141
142 DISALLOW_COPY_AND_ASSIGN(OpenerLifetimeObserver); 142 DISALLOW_COPY_AND_ASSIGN(OpenerLifetimeObserver);
143 }; 143 };
144 144
145 GuestViewBase::GuestViewBase(content::WebContents* owner_web_contents) 145 GuestViewBase::GuestViewBase(content::WebContents* owner_web_contents)
146 : owner_web_contents_(owner_web_contents), 146 : owner_web_contents_(owner_web_contents),
147 owner_host_(owner_web_contents->GetLastCommittedURL().host()),
147 browser_context_(owner_web_contents->GetBrowserContext()), 148 browser_context_(owner_web_contents->GetBrowserContext()),
148 guest_instance_id_( 149 guest_instance_id_(
149 GuestViewManager::FromBrowserContextIfAvailable(browser_context_)-> 150 GuestViewManager::FromBrowserContext(browser_context_)->
150 GetNextInstanceID()), 151 GetNextInstanceID()),
151 view_instance_id_(guestview::kInstanceIDNone), 152 view_instance_id_(guestview::kInstanceIDNone),
152 element_instance_id_(guestview::kInstanceIDNone), 153 element_instance_id_(guestview::kInstanceIDNone),
153 initialized_(false), 154 initialized_(false),
154 is_being_destroyed_(false), 155 is_being_destroyed_(false),
155 guest_host_(nullptr), 156 guest_host_(nullptr),
156 auto_size_enabled_(false), 157 auto_size_enabled_(false),
157 is_full_page_plugin_(false), 158 is_full_page_plugin_(false),
158 guest_proxy_routing_id_(MSG_ROUTING_NONE), 159 guest_proxy_routing_id_(MSG_ROUTING_NONE),
159 weak_ptr_factory_(this) { 160 weak_ptr_factory_(this) {
160 } 161 }
161 162
162 void GuestViewBase::Init(const base::DictionaryValue& create_params, 163 void GuestViewBase::Init(const base::DictionaryValue& create_params,
163 const WebContentsCreatedCallback& callback) { 164 const WebContentsCreatedCallback& callback) {
164 if (initialized_) 165 if (initialized_)
165 return; 166 return;
166 initialized_ = true; 167 initialized_ = true;
167 168
168 if (!GuestViewManager::FromBrowserContextIfAvailable(browser_context_)-> 169 if (!GuestViewManager::FromBrowserContext(browser_context_)->
169 IsGuestAvailableToContext(this, &owner_extension_id_)) { 170 IsGuestAvailableToContext(this)) {
170 // The derived class did not create a WebContents so this class serves no 171 // The derived class did not create a WebContents so this class serves no
171 // purpose. Let's self-destruct. 172 // purpose. Let's self-destruct.
172 delete this; 173 delete this;
173 callback.Run(nullptr); 174 callback.Run(nullptr);
174 return; 175 return;
175 } 176 }
176 177
177 scoped_ptr<base::DictionaryValue> params(create_params.DeepCopy()); 178 scoped_ptr<base::DictionaryValue> params(create_params.DeepCopy());
178 CreateWebContents(create_params, 179 CreateWebContents(create_params,
179 base::Bind(&GuestViewBase::CompleteInit, 180 base::Bind(&GuestViewBase::CompleteInit,
(...skipping 21 matching lines...) Expand all
201 // At this point, we have just created the guest WebContents, we need to add 202 // At this point, we have just created the guest WebContents, we need to add
202 // an observer to the owner WebContents. This observer will be responsible 203 // an observer to the owner WebContents. This observer will be responsible
203 // for destroying the guest WebContents if the owner goes away. 204 // for destroying the guest WebContents if the owner goes away.
204 owner_contents_observer_.reset( 205 owner_contents_observer_.reset(
205 new OwnerContentsObserver(this, owner_web_contents_)); 206 new OwnerContentsObserver(this, owner_web_contents_));
206 207
207 WebContentsObserver::Observe(guest_web_contents); 208 WebContentsObserver::Observe(guest_web_contents);
208 guest_web_contents->SetDelegate(this); 209 guest_web_contents->SetDelegate(this);
209 webcontents_guestview_map.Get().insert( 210 webcontents_guestview_map.Get().insert(
210 std::make_pair(guest_web_contents, this)); 211 std::make_pair(guest_web_contents, this));
211 GuestViewManager::FromBrowserContextIfAvailable(browser_context_)-> 212 GuestViewManager::FromBrowserContext(browser_context_)->
212 AddGuest(guest_instance_id_, guest_web_contents); 213 AddGuest(guest_instance_id_, guest_web_contents);
213 214
214 // Populate the view instance ID if we have it on creation. 215 // Populate the view instance ID if we have it on creation.
215 create_params.GetInteger(guestview::kParameterInstanceId, 216 create_params.GetInteger(guestview::kParameterInstanceId,
216 &view_instance_id_); 217 &view_instance_id_);
217 218
218 if (CanRunInDetachedState()) 219 if (CanRunInDetachedState())
219 SetUpSizing(create_params); 220 SetUpSizing(create_params);
220 221
221 // Observe guest zoom changes. 222 // Observe guest zoom changes.
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
324 } 325 }
325 326
326 // static 327 // static
327 GuestViewBase* GuestViewBase::From(int owner_process_id, 328 GuestViewBase* GuestViewBase::From(int owner_process_id,
328 int guest_instance_id) { 329 int guest_instance_id) {
329 auto host = content::RenderProcessHost::FromID(owner_process_id); 330 auto host = content::RenderProcessHost::FromID(owner_process_id);
330 if (!host) 331 if (!host)
331 return nullptr; 332 return nullptr;
332 333
333 content::WebContents* guest_web_contents = 334 content::WebContents* guest_web_contents =
334 GuestViewManager::FromBrowserContextIfAvailable( 335 GuestViewManager::FromBrowserContext(
335 host->GetBrowserContext())-> 336 host->GetBrowserContext())->
336 GetGuestByInstanceIDSafely(guest_instance_id, owner_process_id); 337 GetGuestByInstanceIDSafely(guest_instance_id, owner_process_id);
337 if (!guest_web_contents) 338 if (!guest_web_contents)
338 return nullptr; 339 return nullptr;
339 340
340 return GuestViewBase::FromWebContents(guest_web_contents); 341 return GuestViewBase::FromWebContents(guest_web_contents);
341 } 342 }
342 343
343 // static 344 // static
344 WebContents* GuestViewBase::GetTopLevelWebContents(WebContents* web_contents) { 345 WebContents* GuestViewBase::GetTopLevelWebContents(WebContents* web_contents) {
(...skipping 18 matching lines...) Expand all
363 bool GuestViewBase::IsDragAndDropEnabled() const { 364 bool GuestViewBase::IsDragAndDropEnabled() const {
364 return false; 365 return false;
365 } 366 }
366 367
367 bool GuestViewBase::ZoomPropagatesFromEmbedderToGuest() const { 368 bool GuestViewBase::ZoomPropagatesFromEmbedderToGuest() const {
368 return true; 369 return true;
369 } 370 }
370 371
371 content::WebContents* GuestViewBase::CreateNewGuestWindow( 372 content::WebContents* GuestViewBase::CreateNewGuestWindow(
372 const content::WebContents::CreateParams& create_params) { 373 const content::WebContents::CreateParams& create_params) {
373 auto guest_manager = 374 auto guest_manager = GuestViewManager::FromBrowserContext(browser_context());
374 GuestViewManager::FromBrowserContextIfAvailable(browser_context());
375 return guest_manager->CreateGuestWithWebContentsParams( 375 return guest_manager->CreateGuestWithWebContentsParams(
376 GetViewType(), 376 GetViewType(),
377 owner_web_contents(), 377 owner_web_contents(),
378 create_params); 378 create_params);
379 } 379 }
380 380
381 void GuestViewBase::DidAttach(int guest_proxy_routing_id) { 381 void GuestViewBase::DidAttach(int guest_proxy_routing_id) {
382 DCHECK(guest_proxy_routing_id_ == MSG_ROUTING_NONE || 382 DCHECK(guest_proxy_routing_id_ == MSG_ROUTING_NONE ||
383 guest_proxy_routing_id == guest_proxy_routing_id_); 383 guest_proxy_routing_id == guest_proxy_routing_id_);
384 guest_proxy_routing_id_ = guest_proxy_routing_id; 384 guest_proxy_routing_id_ = guest_proxy_routing_id;
385 385
386 opener_lifetime_observer_.reset(); 386 opener_lifetime_observer_.reset();
387 387
388 SetUpSizing(*attach_params()); 388 SetUpSizing(*attach_params());
389 389
390 // Give the derived class an opportunity to perform some actions. 390 // Give the derived class an opportunity to perform some actions.
391 DidAttachToEmbedder(); 391 DidAttachToEmbedder();
392 392
393 // Inform the associated GuestViewContainer that the contentWindow is ready. 393 // Inform the associated GuestViewContainer that the contentWindow is ready.
394 embedder_web_contents()->Send(new GuestViewMsg_GuestAttached( 394 embedder_web_contents()->Send(new GuestViewMsg_GuestAttached(
395 element_instance_id_, 395 element_instance_id_,
396 guest_proxy_routing_id)); 396 guest_proxy_routing_id));
397 397
398 SendQueuedEvents(); 398 SendQueuedEvents();
399 } 399 }
400 400
401 void GuestViewBase::DidDetach() { 401 void GuestViewBase::DidDetach() {
402 GuestViewManager::FromBrowserContextIfAvailable(browser_context_)-> 402 GuestViewManager::FromBrowserContext(browser_context_)->DetachGuest(this);
403 DetachGuest(this);
404 StopTrackingEmbedderZoomLevel(); 403 StopTrackingEmbedderZoomLevel();
405 owner_web_contents()->Send(new GuestViewMsg_GuestDetached( 404 owner_web_contents()->Send(new GuestViewMsg_GuestDetached(
406 element_instance_id_)); 405 element_instance_id_));
407 element_instance_id_ = guestview::kInstanceIDNone; 406 element_instance_id_ = guestview::kInstanceIDNone;
408 } 407 }
409 408
410 WebContents* GuestViewBase::GetOwnerWebContents() const { 409 WebContents* GuestViewBase::GetOwnerWebContents() const {
411 return owner_web_contents_; 410 return owner_web_contents_;
412 } 411 }
413 412
(...skipping 29 matching lines...) Expand all
443 // Invalidate weak pointers now so that bound callbacks cannot be called late 442 // Invalidate weak pointers now so that bound callbacks cannot be called late
444 // into destruction. We must call this after WillDestroy because derived types 443 // into destruction. We must call this after WillDestroy because derived types
445 // may wish to access their openers. 444 // may wish to access their openers.
446 weak_ptr_factory_.InvalidateWeakPtrs(); 445 weak_ptr_factory_.InvalidateWeakPtrs();
447 446
448 // Give the content module an opportunity to perform some cleanup. 447 // Give the content module an opportunity to perform some cleanup.
449 guest_host_->WillDestroy(); 448 guest_host_->WillDestroy();
450 guest_host_ = nullptr; 449 guest_host_ = nullptr;
451 450
452 webcontents_guestview_map.Get().erase(web_contents()); 451 webcontents_guestview_map.Get().erase(web_contents());
453 GuestViewManager::FromBrowserContextIfAvailable(browser_context_)-> 452 GuestViewManager::FromBrowserContext(browser_context_)->
454 RemoveGuest(guest_instance_id_); 453 RemoveGuest(guest_instance_id_);
455 pending_events_.clear(); 454 pending_events_.clear();
456 455
457 delete web_contents(); 456 delete web_contents();
458 } 457 }
459 458
460 void GuestViewBase::SetAttachParams(const base::DictionaryValue& params) { 459 void GuestViewBase::SetAttachParams(const base::DictionaryValue& params) {
461 attach_params_.reset(params.DeepCopy()); 460 attach_params_.reset(params.DeepCopy());
462 attach_params_->GetInteger(guestview::kParameterInstanceId, 461 attach_params_->GetInteger(guestview::kParameterInstanceId,
463 &view_instance_id_); 462 &view_instance_id_);
(...skipping 17 matching lines...) Expand all
481 void GuestViewBase::WillAttach(content::WebContents* embedder_web_contents, 480 void GuestViewBase::WillAttach(content::WebContents* embedder_web_contents,
482 int element_instance_id, 481 int element_instance_id,
483 bool is_full_page_plugin) { 482 bool is_full_page_plugin) {
484 if (owner_web_contents_ != embedder_web_contents) { 483 if (owner_web_contents_ != embedder_web_contents) {
485 DCHECK_EQ(owner_contents_observer_->web_contents(), owner_web_contents_); 484 DCHECK_EQ(owner_contents_observer_->web_contents(), owner_web_contents_);
486 // Stop tracking the old embedder's zoom level. 485 // Stop tracking the old embedder's zoom level.
487 StopTrackingEmbedderZoomLevel(); 486 StopTrackingEmbedderZoomLevel();
488 owner_web_contents_ = embedder_web_contents; 487 owner_web_contents_ = embedder_web_contents;
489 owner_contents_observer_.reset( 488 owner_contents_observer_.reset(
490 new OwnerContentsObserver(this, embedder_web_contents)); 489 new OwnerContentsObserver(this, embedder_web_contents));
490 owner_host_ = owner_web_contents_->GetLastCommittedURL().host();
491 } 491 }
492 492
493 // Start tracking the new embedder's zoom level. 493 // Start tracking the new embedder's zoom level.
494 StartTrackingEmbedderZoomLevel(); 494 StartTrackingEmbedderZoomLevel();
495 element_instance_id_ = element_instance_id; 495 element_instance_id_ = element_instance_id;
496 is_full_page_plugin_ = is_full_page_plugin; 496 is_full_page_plugin_ = is_full_page_plugin;
497 497
498 WillAttachToEmbedder(); 498 WillAttachToEmbedder();
499 } 499 }
500 500
(...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after
807 807
808 auto embedder_zoom_controller = 808 auto embedder_zoom_controller =
809 ui_zoom::ZoomController::FromWebContents(owner_web_contents()); 809 ui_zoom::ZoomController::FromWebContents(owner_web_contents());
810 // Chrome Apps do not have a ZoomController. 810 // Chrome Apps do not have a ZoomController.
811 if (!embedder_zoom_controller) 811 if (!embedder_zoom_controller)
812 return; 812 return;
813 embedder_zoom_controller->RemoveObserver(this); 813 embedder_zoom_controller->RemoveObserver(this);
814 } 814 }
815 815
816 } // namespace extensions 816 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698