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

Unified 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, 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « extensions/browser/guest_view/guest_view_base.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: extensions/browser/guest_view/guest_view_base.cc
diff --git a/extensions/browser/guest_view/guest_view_base.cc b/extensions/browser/guest_view/guest_view_base.cc
index 9d9cb9891357c9c826917905edbbb089f9172999..cf518e4f73374932f55be3529b2dd4e671f29899 100644
--- a/extensions/browser/guest_view/guest_view_base.cc
+++ b/extensions/browser/guest_view/guest_view_base.cc
@@ -234,6 +234,17 @@ void GuestViewBase::InitWithWebContents(
content::WebContents* guest_web_contents) {
DCHECK(guest_web_contents);
+ // Create a ZoomController to allow the guest's contents to be zoomed.
+ // Do this before adding the GuestView as a WebContents Observer so that
+ // the GuestView and its derived classes can re-configure the ZoomController
+ // after the latter has handled WebContentsObserver events (observers are
+ // notified of events in the same order they are added as observers). For
+ // example, GuestViewBase may wish to put its guest into isolated zoom mode
+ // in DidNavigateMainFrame, but since ZoomController always resets to default
+ // zoom mode on this event, GuestViewBase would need to do so after
+ // ZoomController::DidNavigateMainFrame has completed.
+ ui_zoom::ZoomController::CreateForWebContents(guest_web_contents);
+
// At this point, we have just created the guest WebContents, we need to add
// an observer to the owner WebContents. This observer will be responsible
// for destroying the guest WebContents if the owner goes away.
@@ -247,9 +258,6 @@ void GuestViewBase::InitWithWebContents(
GuestViewManager::FromBrowserContext(browser_context_)->
AddGuest(guest_instance_id_, guest_web_contents);
- // Create a ZoomController to allow the guest's contents to be zoomed.
- ui_zoom::ZoomController::CreateForWebContents(guest_web_contents);
-
// Populate the view instance ID if we have it on creation.
create_params.GetInteger(guestview::kParameterInstanceId,
&view_instance_id_);
@@ -577,6 +585,13 @@ void GuestViewBase::WebContentsDestroyed() {
delete this;
}
+void GuestViewBase::DidNavigateMainFrame(
+ const content::LoadCommittedDetails& details,
+ const content::FrameNavigateParams& params) {
+ if (attached())
+ SetGuestZoomLevelToMatchEmbedder();
+}
+
void GuestViewBase::ActivateContents(WebContents* web_contents) {
if (!attached() || !embedder_web_contents()->GetDelegate())
return;
@@ -826,6 +841,16 @@ void GuestViewBase::SetUpSizing(const base::DictionaryValue& params) {
SetSize(set_size_params);
}
+void GuestViewBase::SetGuestZoomLevelToMatchEmbedder() {
+ auto embedder_zoom_controller =
+ ui_zoom::ZoomController::FromWebContents(owner_web_contents());
+ if (!embedder_zoom_controller)
+ return;
+
+ ui_zoom::ZoomController::FromWebContents(web_contents())
+ ->SetZoomLevel(embedder_zoom_controller->GetZoomLevel());
+}
+
void GuestViewBase::StartTrackingEmbedderZoomLevel() {
if (!ZoomPropagatesFromEmbedderToGuest())
return;
@@ -837,9 +862,9 @@ void GuestViewBase::StartTrackingEmbedderZoomLevel() {
return;
// Listen to the embedder's zoom changes.
embedder_zoom_controller->AddObserver(this);
+
// Set the guest's initial zoom level to be equal to the embedder's.
- ui_zoom::ZoomController::FromWebContents(web_contents())
- ->SetZoomLevel(embedder_zoom_controller->GetZoomLevel());
+ SetGuestZoomLevelToMatchEmbedder();
}
void GuestViewBase::StopTrackingEmbedderZoomLevel() {
« 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