OLD | NEW |
---|---|
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 Loading... | |
226 weak_ptr_factory_.GetWeakPtr(), | 226 weak_ptr_factory_.GetWeakPtr(), |
227 base::Passed(¶ms), | 227 base::Passed(¶ms), |
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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |