| 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() {
|
|
|