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

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: Improve comment. 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
« 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 216 matching lines...) Expand 10 before | Expand all | Expand 10 after
227 weak_ptr_factory_.GetWeakPtr(), 227 weak_ptr_factory_.GetWeakPtr(),
228 base::Passed(&params), 228 base::Passed(&params),
229 callback)); 229 callback));
230 } 230 }
231 231
232 void GuestViewBase::InitWithWebContents( 232 void GuestViewBase::InitWithWebContents(
233 const base::DictionaryValue& create_params, 233 const base::DictionaryValue& create_params,
234 content::WebContents* guest_web_contents) { 234 content::WebContents* guest_web_contents) {
235 DCHECK(guest_web_contents); 235 DCHECK(guest_web_contents);
236 236
237 // Create a ZoomController to allow the guest's contents to be zoomed.
238 // Do this before adding the GuestView as a WebContents Observer so that
239 // the GuestView and its derived classes can re-configure the ZoomController
240 // after the latter has handled WebContentsObserver events (observers are
241 // notified of events in the same order they are added as observers). For
242 // example, GuestViewBase may wish to put its guest into isolated zoom mode
243 // in DidNavigateMainFrame, but since ZoomController always resets to default
244 // zoom mode on this event, GuestViewBase would need to do so after
245 // ZoomController::DidNavigateMainFrame has completed.
246 ui_zoom::ZoomController::CreateForWebContents(guest_web_contents);
247
237 // At this point, we have just created the guest WebContents, we need to add 248 // At this point, we have just created the guest WebContents, we need to add
238 // an observer to the owner WebContents. This observer will be responsible 249 // an observer to the owner WebContents. This observer will be responsible
239 // for destroying the guest WebContents if the owner goes away. 250 // for destroying the guest WebContents if the owner goes away.
240 owner_contents_observer_.reset( 251 owner_contents_observer_.reset(
241 new OwnerContentsObserver(this, owner_web_contents_)); 252 new OwnerContentsObserver(this, owner_web_contents_));
242 253
243 WebContentsObserver::Observe(guest_web_contents); 254 WebContentsObserver::Observe(guest_web_contents);
244 guest_web_contents->SetDelegate(this); 255 guest_web_contents->SetDelegate(this);
245 webcontents_guestview_map.Get().insert( 256 webcontents_guestview_map.Get().insert(
246 std::make_pair(guest_web_contents, this)); 257 std::make_pair(guest_web_contents, this));
247 GuestViewManager::FromBrowserContext(browser_context_)-> 258 GuestViewManager::FromBrowserContext(browser_context_)->
248 AddGuest(guest_instance_id_, guest_web_contents); 259 AddGuest(guest_instance_id_, guest_web_contents);
249 260
250 // Create a ZoomController to allow the guest's contents to be zoomed.
251 ui_zoom::ZoomController::CreateForWebContents(guest_web_contents);
252
253 // Populate the view instance ID if we have it on creation. 261 // Populate the view instance ID if we have it on creation.
254 create_params.GetInteger(guestview::kParameterInstanceId, 262 create_params.GetInteger(guestview::kParameterInstanceId,
255 &view_instance_id_); 263 &view_instance_id_);
256 264
257 if (CanRunInDetachedState()) 265 if (CanRunInDetachedState())
258 SetUpSizing(create_params); 266 SetUpSizing(create_params);
259 267
260 // Give the derived class an opportunity to perform additional initialization. 268 // Give the derived class an opportunity to perform additional initialization.
261 DidInitialize(create_params); 269 DidInitialize(create_params);
262 } 270 }
(...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after
570 // being destroyed. web_contents() is still valid at this point. 578 // being destroyed. web_contents() is still valid at this point.
571 // TODO(fsamuel): This allows for reentrant code into WebContents during 579 // TODO(fsamuel): This allows for reentrant code into WebContents during
572 // destruction. This could potentially lead to bugs. Perhaps we should get rid 580 // destruction. This could potentially lead to bugs. Perhaps we should get rid
573 // of this? 581 // of this?
574 GuestDestroyed(); 582 GuestDestroyed();
575 583
576 // Self-destruct. 584 // Self-destruct.
577 delete this; 585 delete this;
578 } 586 }
579 587
588 void GuestViewBase::DidNavigateMainFrame(
589 const content::LoadCommittedDetails& details,
590 const content::FrameNavigateParams& params) {
591 if (attached())
592 SetGuestZoomLevelToMatchEmbedder();
593 }
594
580 void GuestViewBase::ActivateContents(WebContents* web_contents) { 595 void GuestViewBase::ActivateContents(WebContents* web_contents) {
581 if (!attached() || !embedder_web_contents()->GetDelegate()) 596 if (!attached() || !embedder_web_contents()->GetDelegate())
582 return; 597 return;
583 598
584 embedder_web_contents()->GetDelegate()->ActivateContents( 599 embedder_web_contents()->GetDelegate()->ActivateContents(
585 embedder_web_contents()); 600 embedder_web_contents());
586 } 601 }
587 602
588 void GuestViewBase::DeactivateContents(WebContents* web_contents) { 603 void GuestViewBase::DeactivateContents(WebContents* web_contents) {
589 if (!attached() || !embedder_web_contents()->GetDelegate()) 604 if (!attached() || !embedder_web_contents()->GetDelegate())
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
819 set_size_params.enable_auto_size.reset(new bool(auto_size_enabled)); 834 set_size_params.enable_auto_size.reset(new bool(auto_size_enabled));
820 set_size_params.min_size.reset(new gfx::Size(min_width, min_height)); 835 set_size_params.min_size.reset(new gfx::Size(min_width, min_height));
821 set_size_params.max_size.reset(new gfx::Size(max_width, max_height)); 836 set_size_params.max_size.reset(new gfx::Size(max_width, max_height));
822 set_size_params.normal_size.reset(new gfx::Size(normal_width, normal_height)); 837 set_size_params.normal_size.reset(new gfx::Size(normal_width, normal_height));
823 838
824 // Call SetSize to apply all the appropriate validation and clipping of 839 // Call SetSize to apply all the appropriate validation and clipping of
825 // values. 840 // values.
826 SetSize(set_size_params); 841 SetSize(set_size_params);
827 } 842 }
828 843
844 void GuestViewBase::SetGuestZoomLevelToMatchEmbedder() {
845 auto embedder_zoom_controller =
846 ui_zoom::ZoomController::FromWebContents(owner_web_contents());
847 if (!embedder_zoom_controller)
848 return;
849
850 ui_zoom::ZoomController::FromWebContents(web_contents())
851 ->SetZoomLevel(embedder_zoom_controller->GetZoomLevel());
852 }
853
829 void GuestViewBase::StartTrackingEmbedderZoomLevel() { 854 void GuestViewBase::StartTrackingEmbedderZoomLevel() {
830 if (!ZoomPropagatesFromEmbedderToGuest()) 855 if (!ZoomPropagatesFromEmbedderToGuest())
831 return; 856 return;
832 857
833 auto embedder_zoom_controller = 858 auto embedder_zoom_controller =
834 ui_zoom::ZoomController::FromWebContents(owner_web_contents()); 859 ui_zoom::ZoomController::FromWebContents(owner_web_contents());
835 // Chrome Apps do not have a ZoomController. 860 // Chrome Apps do not have a ZoomController.
836 if (!embedder_zoom_controller) 861 if (!embedder_zoom_controller)
837 return; 862 return;
838 // Listen to the embedder's zoom changes. 863 // Listen to the embedder's zoom changes.
839 embedder_zoom_controller->AddObserver(this); 864 embedder_zoom_controller->AddObserver(this);
865
840 // Set the guest's initial zoom level to be equal to the embedder's. 866 // Set the guest's initial zoom level to be equal to the embedder's.
841 ui_zoom::ZoomController::FromWebContents(web_contents()) 867 SetGuestZoomLevelToMatchEmbedder();
842 ->SetZoomLevel(embedder_zoom_controller->GetZoomLevel());
843 } 868 }
844 869
845 void GuestViewBase::StopTrackingEmbedderZoomLevel() { 870 void GuestViewBase::StopTrackingEmbedderZoomLevel() {
846 if (!attached() || !ZoomPropagatesFromEmbedderToGuest()) 871 if (!attached() || !ZoomPropagatesFromEmbedderToGuest())
847 return; 872 return;
848 873
849 auto embedder_zoom_controller = 874 auto embedder_zoom_controller =
850 ui_zoom::ZoomController::FromWebContents(owner_web_contents()); 875 ui_zoom::ZoomController::FromWebContents(owner_web_contents());
851 // Chrome Apps do not have a ZoomController. 876 // Chrome Apps do not have a ZoomController.
852 if (!embedder_zoom_controller) 877 if (!embedder_zoom_controller)
853 return; 878 return;
854 embedder_zoom_controller->RemoveObserver(this); 879 embedder_zoom_controller->RemoveObserver(this);
855 } 880 }
856 881
857 // static 882 // static
858 void GuestViewBase::RegisterGuestViewTypes() { 883 void GuestViewBase::RegisterGuestViewTypes() {
859 AppViewGuest::Register(); 884 AppViewGuest::Register();
860 ExtensionOptionsGuest::Register(); 885 ExtensionOptionsGuest::Register();
861 ExtensionViewGuest::Register(); 886 ExtensionViewGuest::Register();
862 MimeHandlerViewGuest::Register(); 887 MimeHandlerViewGuest::Register();
863 SurfaceWorkerGuest::Register(); 888 SurfaceWorkerGuest::Register();
864 WebViewGuest::Register(); 889 WebViewGuest::Register();
865 } 890 }
866 891
867 } // namespace extensions 892 } // 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