Chromium Code Reviews| 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 |