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 "components/guest_view/browser/guest_view_base.h" | 5 #include "components/guest_view/browser/guest_view_base.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/lazy_instance.h" | 9 #include "base/lazy_instance.h" |
10 #include "base/macros.h" | 10 #include "base/macros.h" |
11 #include "base/memory/ptr_util.h" | 11 #include "base/memory/ptr_util.h" |
12 #include "base/strings/utf_string_conversions.h" | 12 #include "base/strings/utf_string_conversions.h" |
13 #include "components/guest_view/browser/guest_view_event.h" | 13 #include "components/guest_view/browser/guest_view_event.h" |
14 #include "components/guest_view/browser/guest_view_manager.h" | 14 #include "components/guest_view/browser/guest_view_manager.h" |
15 #include "components/guest_view/common/guest_view_constants.h" | 15 #include "components/guest_view/common/guest_view_constants.h" |
16 #include "components/guest_view/common/guest_view_messages.h" | 16 #include "components/guest_view/common/guest_view_messages.h" |
17 #include "components/ui/zoom/page_zoom.h" | 17 #include "components/zoom/page_zoom.h" |
18 #include "components/ui/zoom/zoom_controller.h" | 18 #include "components/zoom/zoom_controller.h" |
19 #include "content/public/browser/navigation_details.h" | 19 #include "content/public/browser/navigation_details.h" |
20 #include "content/public/browser/render_frame_host.h" | 20 #include "content/public/browser/render_frame_host.h" |
21 #include "content/public/browser/render_process_host.h" | 21 #include "content/public/browser/render_process_host.h" |
22 #include "content/public/browser/render_view_host.h" | 22 #include "content/public/browser/render_view_host.h" |
23 #include "content/public/browser/render_widget_host_view.h" | 23 #include "content/public/browser/render_widget_host_view.h" |
24 #include "content/public/browser/web_contents.h" | 24 #include "content/public/browser/web_contents.h" |
25 #include "content/public/common/browser_plugin_guest_mode.h" | 25 #include "content/public/common/browser_plugin_guest_mode.h" |
26 #include "content/public/common/page_zoom.h" | 26 #include "content/public/common/page_zoom.h" |
27 #include "content/public/common/url_constants.h" | 27 #include "content/public/common/url_constants.h" |
28 #include "third_party/WebKit/public/web/WebInputEvent.h" | 28 #include "third_party/WebKit/public/web/WebInputEvent.h" |
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
211 | 211 |
212 // Create a ZoomController to allow the guest's contents to be zoomed. | 212 // Create a ZoomController to allow the guest's contents to be zoomed. |
213 // Do this before adding the GuestView as a WebContents Observer so that | 213 // Do this before adding the GuestView as a WebContents Observer so that |
214 // the GuestView and its derived classes can re-configure the ZoomController | 214 // the GuestView and its derived classes can re-configure the ZoomController |
215 // after the latter has handled WebContentsObserver events (observers are | 215 // after the latter has handled WebContentsObserver events (observers are |
216 // notified of events in the same order they are added as observers). For | 216 // notified of events in the same order they are added as observers). For |
217 // example, GuestViewBase may wish to put its guest into isolated zoom mode | 217 // example, GuestViewBase may wish to put its guest into isolated zoom mode |
218 // in DidNavigateMainFrame, but since ZoomController always resets to default | 218 // in DidNavigateMainFrame, but since ZoomController always resets to default |
219 // zoom mode on this event, GuestViewBase would need to do so after | 219 // zoom mode on this event, GuestViewBase would need to do so after |
220 // ZoomController::DidNavigateMainFrame has completed. | 220 // ZoomController::DidNavigateMainFrame has completed. |
221 ui_zoom::ZoomController::CreateForWebContents(guest_web_contents); | 221 zoom::ZoomController::CreateForWebContents(guest_web_contents); |
222 | 222 |
223 // At this point, we have just created the guest WebContents, we need to add | 223 // At this point, we have just created the guest WebContents, we need to add |
224 // an observer to the owner WebContents. This observer will be responsible | 224 // an observer to the owner WebContents. This observer will be responsible |
225 // for destroying the guest WebContents if the owner goes away. | 225 // for destroying the guest WebContents if the owner goes away. |
226 owner_contents_observer_.reset( | 226 owner_contents_observer_.reset( |
227 new OwnerContentsObserver(this, owner_web_contents_)); | 227 new OwnerContentsObserver(this, owner_web_contents_)); |
228 | 228 |
229 WebContentsObserver::Observe(guest_web_contents); | 229 WebContentsObserver::Observe(guest_web_contents); |
230 guest_web_contents->SetDelegate(this); | 230 guest_web_contents->SetDelegate(this); |
231 webcontents_guestview_map.Get().insert( | 231 webcontents_guestview_map.Get().insert( |
232 std::make_pair(guest_web_contents, this)); | 232 std::make_pair(guest_web_contents, this)); |
233 GuestViewManager::FromBrowserContext(browser_context_)-> | 233 GuestViewManager::FromBrowserContext(browser_context_)-> |
234 AddGuest(guest_instance_id_, guest_web_contents); | 234 AddGuest(guest_instance_id_, guest_web_contents); |
235 | 235 |
236 // Populate the view instance ID if we have it on creation. | 236 // Populate the view instance ID if we have it on creation. |
237 create_params.GetInteger(kParameterInstanceId, &view_instance_id_); | 237 create_params.GetInteger(kParameterInstanceId, &view_instance_id_); |
238 | 238 |
239 if (CanRunInDetachedState()) | 239 if (CanRunInDetachedState()) |
240 SetUpSizing(create_params); | 240 SetUpSizing(create_params); |
241 | 241 |
242 // Observe guest zoom changes. | 242 // Observe guest zoom changes. |
243 auto zoom_controller = | 243 auto zoom_controller = zoom::ZoomController::FromWebContents(web_contents()); |
244 ui_zoom::ZoomController::FromWebContents(web_contents()); | |
245 zoom_controller->AddObserver(this); | 244 zoom_controller->AddObserver(this); |
246 | 245 |
247 // Give the derived class an opportunity to perform additional initialization. | 246 // Give the derived class an opportunity to perform additional initialization. |
248 DidInitialize(create_params); | 247 DidInitialize(create_params); |
249 } | 248 } |
250 | 249 |
251 void GuestViewBase::LoadURLWithParams( | 250 void GuestViewBase::LoadURLWithParams( |
252 const content::NavigationController::LoadURLParams& load_params) { | 251 const content::NavigationController::LoadURLParams& load_params) { |
253 int guest_proxy_routing_id = host()->LoadURLWithParams(load_params); | 252 int guest_proxy_routing_id = host()->LoadURLWithParams(load_params); |
254 DCHECK(guest_proxy_routing_id_ == MSG_ROUTING_NONE || | 253 DCHECK(guest_proxy_routing_id_ == MSG_ROUTING_NONE || |
(...skipping 362 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
617 bool motion, | 616 bool motion, |
618 bool exited) { | 617 bool exited) { |
619 if (!attached() || !embedder_web_contents()->GetDelegate()) | 618 if (!attached() || !embedder_web_contents()->GetDelegate()) |
620 return; | 619 return; |
621 | 620 |
622 embedder_web_contents()->GetDelegate()->ContentsMouseEvent( | 621 embedder_web_contents()->GetDelegate()->ContentsMouseEvent( |
623 embedder_web_contents(), location, motion, exited); | 622 embedder_web_contents(), location, motion, exited); |
624 } | 623 } |
625 | 624 |
626 void GuestViewBase::ContentsZoomChange(bool zoom_in) { | 625 void GuestViewBase::ContentsZoomChange(bool zoom_in) { |
627 ui_zoom::PageZoom::Zoom( | 626 zoom::PageZoom::Zoom(embedder_web_contents(), zoom_in |
628 embedder_web_contents(), | 627 ? content::PAGE_ZOOM_IN |
629 zoom_in ? content::PAGE_ZOOM_IN : content::PAGE_ZOOM_OUT); | 628 : content::PAGE_ZOOM_OUT); |
630 } | 629 } |
631 | 630 |
632 void GuestViewBase::HandleKeyboardEvent( | 631 void GuestViewBase::HandleKeyboardEvent( |
633 WebContents* source, | 632 WebContents* source, |
634 const content::NativeWebKeyboardEvent& event) { | 633 const content::NativeWebKeyboardEvent& event) { |
635 if (!attached()) | 634 if (!attached()) |
636 return; | 635 return; |
637 | 636 |
638 // Send the keyboard events back to the embedder to reprocess them. | 637 // Send the keyboard events back to the embedder to reprocess them. |
639 embedder_web_contents()->GetDelegate()-> | 638 embedder_web_contents()->GetDelegate()-> |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
719 embedder_web_contents()->GetDelegate()->FindReply(embedder_web_contents(), | 718 embedder_web_contents()->GetDelegate()->FindReply(embedder_web_contents(), |
720 request_id, | 719 request_id, |
721 number_of_matches, | 720 number_of_matches, |
722 selection_rect, | 721 selection_rect, |
723 active_match_ordinal, | 722 active_match_ordinal, |
724 final_update); | 723 final_update); |
725 } | 724 } |
726 } | 725 } |
727 | 726 |
728 void GuestViewBase::OnZoomChanged( | 727 void GuestViewBase::OnZoomChanged( |
729 const ui_zoom::ZoomController::ZoomChangedEventData& data) { | 728 const zoom::ZoomController::ZoomChangedEventData& data) { |
730 if (data.web_contents == embedder_web_contents()) { | 729 if (data.web_contents == embedder_web_contents()) { |
731 // The embedder's zoom level has changed. | 730 // The embedder's zoom level has changed. |
732 auto guest_zoom_controller = | 731 auto guest_zoom_controller = |
733 ui_zoom::ZoomController::FromWebContents(web_contents()); | 732 zoom::ZoomController::FromWebContents(web_contents()); |
734 if (content::ZoomValuesEqual(data.new_zoom_level, | 733 if (content::ZoomValuesEqual(data.new_zoom_level, |
735 guest_zoom_controller->GetZoomLevel())) { | 734 guest_zoom_controller->GetZoomLevel())) { |
736 return; | 735 return; |
737 } | 736 } |
738 // When the embedder's zoom level doesn't match the guest's, then update the | 737 // When the embedder's zoom level doesn't match the guest's, then update the |
739 // guest's zoom level to match. | 738 // guest's zoom level to match. |
740 guest_zoom_controller->SetZoomLevel(data.new_zoom_level); | 739 guest_zoom_controller->SetZoomLevel(data.new_zoom_level); |
741 return; | 740 return; |
742 } | 741 } |
743 | 742 |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
786 } | 785 } |
787 InitWithWebContents(*create_params, guest_web_contents); | 786 InitWithWebContents(*create_params, guest_web_contents); |
788 callback.Run(guest_web_contents); | 787 callback.Run(guest_web_contents); |
789 } | 788 } |
790 | 789 |
791 double GuestViewBase::GetEmbedderZoomFactor() const { | 790 double GuestViewBase::GetEmbedderZoomFactor() const { |
792 if (!embedder_web_contents()) | 791 if (!embedder_web_contents()) |
793 return 1.0; | 792 return 1.0; |
794 | 793 |
795 return content::ZoomLevelToZoomFactor( | 794 return content::ZoomLevelToZoomFactor( |
796 ui_zoom::ZoomController::GetZoomLevelForWebContents( | 795 zoom::ZoomController::GetZoomLevelForWebContents( |
797 embedder_web_contents())); | 796 embedder_web_contents())); |
798 } | 797 } |
799 | 798 |
800 void GuestViewBase::SetUpSizing(const base::DictionaryValue& params) { | 799 void GuestViewBase::SetUpSizing(const base::DictionaryValue& params) { |
801 // Read the autosize parameters passed in from the embedder. | 800 // Read the autosize parameters passed in from the embedder. |
802 bool auto_size_enabled = auto_size_enabled_; | 801 bool auto_size_enabled = auto_size_enabled_; |
803 params.GetBoolean(kAttributeAutoSize, &auto_size_enabled); | 802 params.GetBoolean(kAttributeAutoSize, &auto_size_enabled); |
804 | 803 |
805 int max_height = max_auto_size_.height(); | 804 int max_height = max_auto_size_.height(); |
806 int max_width = max_auto_size_.width(); | 805 int max_width = max_auto_size_.width(); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
840 set_size_params.max_size.reset(new gfx::Size(max_width, max_height)); | 839 set_size_params.max_size.reset(new gfx::Size(max_width, max_height)); |
841 set_size_params.normal_size.reset(new gfx::Size(normal_width, normal_height)); | 840 set_size_params.normal_size.reset(new gfx::Size(normal_width, normal_height)); |
842 | 841 |
843 // Call SetSize to apply all the appropriate validation and clipping of | 842 // Call SetSize to apply all the appropriate validation and clipping of |
844 // values. | 843 // values. |
845 SetSize(set_size_params); | 844 SetSize(set_size_params); |
846 } | 845 } |
847 | 846 |
848 void GuestViewBase::SetGuestZoomLevelToMatchEmbedder() { | 847 void GuestViewBase::SetGuestZoomLevelToMatchEmbedder() { |
849 auto embedder_zoom_controller = | 848 auto embedder_zoom_controller = |
850 ui_zoom::ZoomController::FromWebContents(owner_web_contents()); | 849 zoom::ZoomController::FromWebContents(owner_web_contents()); |
851 if (!embedder_zoom_controller) | 850 if (!embedder_zoom_controller) |
852 return; | 851 return; |
853 | 852 |
854 ui_zoom::ZoomController::FromWebContents(web_contents()) | 853 zoom::ZoomController::FromWebContents(web_contents()) |
855 ->SetZoomLevel(embedder_zoom_controller->GetZoomLevel()); | 854 ->SetZoomLevel(embedder_zoom_controller->GetZoomLevel()); |
856 } | 855 } |
857 | 856 |
858 void GuestViewBase::StartTrackingEmbedderZoomLevel() { | 857 void GuestViewBase::StartTrackingEmbedderZoomLevel() { |
859 if (!ZoomPropagatesFromEmbedderToGuest()) | 858 if (!ZoomPropagatesFromEmbedderToGuest()) |
860 return; | 859 return; |
861 | 860 |
862 auto embedder_zoom_controller = | 861 auto embedder_zoom_controller = |
863 ui_zoom::ZoomController::FromWebContents(owner_web_contents()); | 862 zoom::ZoomController::FromWebContents(owner_web_contents()); |
864 // Chrome Apps do not have a ZoomController. | 863 // Chrome Apps do not have a ZoomController. |
865 if (!embedder_zoom_controller) | 864 if (!embedder_zoom_controller) |
866 return; | 865 return; |
867 // Listen to the embedder's zoom changes. | 866 // Listen to the embedder's zoom changes. |
868 embedder_zoom_controller->AddObserver(this); | 867 embedder_zoom_controller->AddObserver(this); |
869 | 868 |
870 // Set the guest's initial zoom level to be equal to the embedder's. | 869 // Set the guest's initial zoom level to be equal to the embedder's. |
871 SetGuestZoomLevelToMatchEmbedder(); | 870 SetGuestZoomLevelToMatchEmbedder(); |
872 } | 871 } |
873 | 872 |
874 void GuestViewBase::StopTrackingEmbedderZoomLevel() { | 873 void GuestViewBase::StopTrackingEmbedderZoomLevel() { |
875 if (!attached() || !ZoomPropagatesFromEmbedderToGuest()) | 874 if (!attached() || !ZoomPropagatesFromEmbedderToGuest()) |
876 return; | 875 return; |
877 | 876 |
878 auto embedder_zoom_controller = | 877 auto embedder_zoom_controller = |
879 ui_zoom::ZoomController::FromWebContents(owner_web_contents()); | 878 zoom::ZoomController::FromWebContents(owner_web_contents()); |
880 // Chrome Apps do not have a ZoomController. | 879 // Chrome Apps do not have a ZoomController. |
881 if (!embedder_zoom_controller) | 880 if (!embedder_zoom_controller) |
882 return; | 881 return; |
883 embedder_zoom_controller->RemoveObserver(this); | 882 embedder_zoom_controller->RemoveObserver(this); |
884 } | 883 } |
885 | 884 |
886 void GuestViewBase::UpdateGuestSize(const gfx::Size& new_size, | 885 void GuestViewBase::UpdateGuestSize(const gfx::Size& new_size, |
887 bool due_to_auto_resize) { | 886 bool due_to_auto_resize) { |
888 if (due_to_auto_resize) | 887 if (due_to_auto_resize) |
889 GuestSizeChangedDueToAutoSize(guest_size_, new_size); | 888 GuestSizeChangedDueToAutoSize(guest_size_, new_size); |
890 DispatchOnResizeEvent(guest_size_, new_size); | 889 DispatchOnResizeEvent(guest_size_, new_size); |
891 guest_size_ = new_size; | 890 guest_size_ = new_size; |
892 } | 891 } |
893 | 892 |
894 } // namespace guest_view | 893 } // namespace guest_view |
OLD | NEW |