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 7936ee7db08e47c4d16e79ba514f9e6829d1a05c..7f2e2cd81abf49df5f180217a2bc491dee6eff68 100644 |
--- a/extensions/browser/guest_view/guest_view_base.cc |
+++ b/extensions/browser/guest_view/guest_view_base.cc |
@@ -6,6 +6,7 @@ |
#include "base/lazy_instance.h" |
#include "base/strings/utf_string_conversions.h" |
+#include "components/ui/zoom/zoom_controller.h" |
#include "content/public/browser/navigation_details.h" |
#include "content/public/browser/render_frame_host.h" |
#include "content/public/browser/render_process_host.h" |
@@ -209,6 +210,12 @@ void GuestViewBase::InitWithWebContents( |
GuestViewManager::FromBrowserContext(browser_context_)-> |
AddGuest(guest_instance_id_, guest_web_contents); |
+ // Create a zoom controller for the guest contents give it access to |
+ // GetZoomLevel() and and SetZoomLevel() in WebViewGuest. |
Fady Samuel
2014/12/09 20:09:46
This comment is no longer correct as this code liv
wjmaclean
2014/12/09 20:50:04
Done.
|
+ // TODO(wjmaclean): Verify that |guest_web_contents| is the right value to |
+ // pass here. |
Fady Samuel
2014/12/09 20:09:46
This looks right to me.
wjmaclean
2014/12/09 20:50:04
Acknowledged.
|
+ ui_zoom::ZoomController::CreateForWebContents(guest_web_contents); |
+ |
// Give the derived class an opportunity to perform additional initialization. |
DidInitialize(); |
} |
@@ -298,6 +305,14 @@ bool GuestViewBase::IsGuest(WebContents* web_contents) { |
return !!GuestViewBase::FromWebContents(web_contents); |
} |
+void GuestViewBase::EmbedderWillBeDestroyed() { |
+ ui_zoom::ZoomController* zoom_controller = |
+ ui_zoom::ZoomController::FromWebContents(embedder_web_contents()); |
+ if (!zoom_controller) |
+ return; |
+ zoom_controller->RemoveObserver(this); |
+} |
+ |
bool GuestViewBase::IsAutoSizeSupported() const { |
return false; |
} |
@@ -309,6 +324,17 @@ bool GuestViewBase::IsDragAndDropEnabled() const { |
void GuestViewBase::DidAttach(int guest_proxy_routing_id) { |
opener_lifetime_observer_.reset(); |
+ // Any zoom events from the embedder should be relayed to the guest. |
+ ui_zoom::ZoomController* zoom_controller = |
+ ui_zoom::ZoomController::FromWebContents(embedder_web_contents()); |
+ if (zoom_controller) { |
+ // Listen to the embedder's zoom changes. |
+ 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(zoom_controller->GetZoomLevel()); |
+ } |
+ |
// Give the derived class an opportunity to perform some actions. |
DidAttachToEmbedder(); |
@@ -485,6 +511,12 @@ bool GuestViewBase::PreHandleGestureEvent(content::WebContents* source, |
GuestViewBase::~GuestViewBase() { |
} |
+void GuestViewBase::OnZoomChanged( |
+ const ui_zoom::ZoomController::ZoomChangedEventData& data) { |
+ ui_zoom::ZoomController::FromWebContents(web_contents()) |
Fady Samuel
2014/12/09 20:09:46
It would be nice to add a comment here that updati
wjmaclean
2014/12/09 20:50:04
Done.
|
+ ->SetZoomLevel(data.new_zoom_level); |
+} |
+ |
void GuestViewBase::DispatchEventToEmbedder(Event* event) { |
scoped_ptr<Event> event_ptr(event); |