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

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

Issue 1009193003: Make options zoom isolated, match embedder zoom on navigation. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Don't DCHECK embedder zoom controller existence. Created 5 years, 9 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
« no previous file with comments | « extensions/browser/guest_view/guest_view_base.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 215 matching lines...) Expand 10 before | Expand all | Expand 10 after
226 weak_ptr_factory_.GetWeakPtr(), 226 weak_ptr_factory_.GetWeakPtr(),
227 base::Passed(&params), 227 base::Passed(&params),
228 callback)); 228 callback));
229 } 229 }
230 230
231 void GuestViewBase::InitWithWebContents( 231 void GuestViewBase::InitWithWebContents(
232 const base::DictionaryValue& create_params, 232 const base::DictionaryValue& create_params,
233 content::WebContents* guest_web_contents) { 233 content::WebContents* guest_web_contents) {
234 DCHECK(guest_web_contents); 234 DCHECK(guest_web_contents);
235 235
236 // Create a ZoomController to allow the guest's contents to be zoomed.
237 // Do this before adding the GuestView as a WebContents Observer so that
238 // the GuestView and its derived classes can re-configure the ZoomController
239 // after the latter has handled WebContentsObserver events.
Fady Samuel 2015/03/25 21:07:16 I don't know what this means. What problem is this
wjmaclean 2015/03/25 21:14:33 When multiple observers exist for a given WebConte
240 ui_zoom::ZoomController::CreateForWebContents(guest_web_contents);
241
236 // At this point, we have just created the guest WebContents, we need to add 242 // At this point, we have just created the guest WebContents, we need to add
237 // an observer to the owner WebContents. This observer will be responsible 243 // an observer to the owner WebContents. This observer will be responsible
238 // for destroying the guest WebContents if the owner goes away. 244 // for destroying the guest WebContents if the owner goes away.
239 owner_contents_observer_.reset( 245 owner_contents_observer_.reset(
240 new OwnerContentsObserver(this, owner_web_contents_)); 246 new OwnerContentsObserver(this, owner_web_contents_));
241 247
242 WebContentsObserver::Observe(guest_web_contents); 248 WebContentsObserver::Observe(guest_web_contents);
243 guest_web_contents->SetDelegate(this); 249 guest_web_contents->SetDelegate(this);
244 webcontents_guestview_map.Get().insert( 250 webcontents_guestview_map.Get().insert(
245 std::make_pair(guest_web_contents, this)); 251 std::make_pair(guest_web_contents, this));
246 GuestViewManager::FromBrowserContext(browser_context_)-> 252 GuestViewManager::FromBrowserContext(browser_context_)->
247 AddGuest(guest_instance_id_, guest_web_contents); 253 AddGuest(guest_instance_id_, guest_web_contents);
248 254
249 // Create a ZoomController to allow the guest's contents to be zoomed.
250 ui_zoom::ZoomController::CreateForWebContents(guest_web_contents);
251
252 // Populate the view instance ID if we have it on creation. 255 // Populate the view instance ID if we have it on creation.
253 create_params.GetInteger(guestview::kParameterInstanceId, 256 create_params.GetInteger(guestview::kParameterInstanceId,
254 &view_instance_id_); 257 &view_instance_id_);
255 258
256 if (CanRunInDetachedState()) 259 if (CanRunInDetachedState())
257 SetUpSizing(create_params); 260 SetUpSizing(create_params);
258 261
259 // Give the derived class an opportunity to perform additional initialization. 262 // Give the derived class an opportunity to perform additional initialization.
260 DidInitialize(create_params); 263 DidInitialize(create_params);
261 } 264 }
(...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after
569 // being destroyed. web_contents() is still valid at this point. 572 // being destroyed. web_contents() is still valid at this point.
570 // TODO(fsamuel): This allows for reentrant code into WebContents during 573 // TODO(fsamuel): This allows for reentrant code into WebContents during
571 // destruction. This could potentially lead to bugs. Perhaps we should get rid 574 // destruction. This could potentially lead to bugs. Perhaps we should get rid
572 // of this? 575 // of this?
573 GuestDestroyed(); 576 GuestDestroyed();
574 577
575 // Self-destruct. 578 // Self-destruct.
576 delete this; 579 delete this;
577 } 580 }
578 581
582 void GuestViewBase::DidNavigateMainFrame(
583 const content::LoadCommittedDetails& details,
584 const content::FrameNavigateParams& params) {
585 if (attached())
586 SetGuestZoomLevelToMatchEmbedder();
587 }
588
579 void GuestViewBase::ActivateContents(WebContents* web_contents) { 589 void GuestViewBase::ActivateContents(WebContents* web_contents) {
580 if (!attached() || !embedder_web_contents()->GetDelegate()) 590 if (!attached() || !embedder_web_contents()->GetDelegate())
581 return; 591 return;
582 592
583 embedder_web_contents()->GetDelegate()->ActivateContents( 593 embedder_web_contents()->GetDelegate()->ActivateContents(
584 embedder_web_contents()); 594 embedder_web_contents());
585 } 595 }
586 596
587 void GuestViewBase::DeactivateContents(WebContents* web_contents) { 597 void GuestViewBase::DeactivateContents(WebContents* web_contents) {
588 if (!attached() || !embedder_web_contents()->GetDelegate()) 598 if (!attached() || !embedder_web_contents()->GetDelegate())
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after
808 set_size_params.enable_auto_size.reset(new bool(auto_size_enabled)); 818 set_size_params.enable_auto_size.reset(new bool(auto_size_enabled));
809 set_size_params.min_size.reset(new gfx::Size(min_width, min_height)); 819 set_size_params.min_size.reset(new gfx::Size(min_width, min_height));
810 set_size_params.max_size.reset(new gfx::Size(max_width, max_height)); 820 set_size_params.max_size.reset(new gfx::Size(max_width, max_height));
811 set_size_params.normal_size.reset(new gfx::Size(normal_width, normal_height)); 821 set_size_params.normal_size.reset(new gfx::Size(normal_width, normal_height));
812 822
813 // Call SetSize to apply all the appropriate validation and clipping of 823 // Call SetSize to apply all the appropriate validation and clipping of
814 // values. 824 // values.
815 SetSize(set_size_params); 825 SetSize(set_size_params);
816 } 826 }
817 827
828 void GuestViewBase::SetGuestZoomLevelToMatchEmbedder() {
829 auto embedder_zoom_controller =
830 ui_zoom::ZoomController::FromWebContents(owner_web_contents());
831 if (!embedder_zoom_controller)
832 return;
833
834 ui_zoom::ZoomController::FromWebContents(web_contents())
835 ->SetZoomLevel(embedder_zoom_controller->GetZoomLevel());
836 }
837
818 void GuestViewBase::StartTrackingEmbedderZoomLevel() { 838 void GuestViewBase::StartTrackingEmbedderZoomLevel() {
819 if (!ZoomPropagatesFromEmbedderToGuest()) 839 if (!ZoomPropagatesFromEmbedderToGuest())
820 return; 840 return;
821 841
822 auto embedder_zoom_controller = 842 auto embedder_zoom_controller =
823 ui_zoom::ZoomController::FromWebContents(owner_web_contents()); 843 ui_zoom::ZoomController::FromWebContents(owner_web_contents());
824 // Chrome Apps do not have a ZoomController. 844 // Chrome Apps do not have a ZoomController.
825 if (!embedder_zoom_controller) 845 if (!embedder_zoom_controller)
826 return; 846 return;
827 // Listen to the embedder's zoom changes. 847 // Listen to the embedder's zoom changes.
828 embedder_zoom_controller->AddObserver(this); 848 embedder_zoom_controller->AddObserver(this);
849
829 // Set the guest's initial zoom level to be equal to the embedder's. 850 // Set the guest's initial zoom level to be equal to the embedder's.
830 ui_zoom::ZoomController::FromWebContents(web_contents()) 851 SetGuestZoomLevelToMatchEmbedder();
831 ->SetZoomLevel(embedder_zoom_controller->GetZoomLevel());
832 } 852 }
833 853
834 void GuestViewBase::StopTrackingEmbedderZoomLevel() { 854 void GuestViewBase::StopTrackingEmbedderZoomLevel() {
835 if (!attached() || !ZoomPropagatesFromEmbedderToGuest()) 855 if (!attached() || !ZoomPropagatesFromEmbedderToGuest())
836 return; 856 return;
837 857
838 auto embedder_zoom_controller = 858 auto embedder_zoom_controller =
839 ui_zoom::ZoomController::FromWebContents(owner_web_contents()); 859 ui_zoom::ZoomController::FromWebContents(owner_web_contents());
840 // Chrome Apps do not have a ZoomController. 860 // Chrome Apps do not have a ZoomController.
841 if (!embedder_zoom_controller) 861 if (!embedder_zoom_controller)
842 return; 862 return;
843 embedder_zoom_controller->RemoveObserver(this); 863 embedder_zoom_controller->RemoveObserver(this);
844 } 864 }
845 865
846 // static 866 // static
847 void GuestViewBase::RegisterGuestViewTypes() { 867 void GuestViewBase::RegisterGuestViewTypes() {
848 AppViewGuest::Register(); 868 AppViewGuest::Register();
849 ExtensionOptionsGuest::Register(); 869 ExtensionOptionsGuest::Register();
850 ExtensionViewGuest::Register(); 870 ExtensionViewGuest::Register();
851 MimeHandlerViewGuest::Register(); 871 MimeHandlerViewGuest::Register();
852 SurfaceWorkerGuest::Register(); 872 SurfaceWorkerGuest::Register();
853 WebViewGuest::Register(); 873 WebViewGuest::Register();
854 } 874 }
855 875
856 } // namespace extensions 876 } // namespace extensions
OLDNEW
« no previous file with comments | « extensions/browser/guest_view/guest_view_base.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698