OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "content/renderer/render_view_impl.h" | 5 #include "content/renderer/render_view_impl.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <cmath> | 8 #include <cmath> |
9 #include <memory> | 9 #include <memory> |
10 | 10 |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
87 #include "content/renderer/ime_event_guard.h" | 87 #include "content/renderer/ime_event_guard.h" |
88 #include "content/renderer/input/input_handler_manager.h" | 88 #include "content/renderer/input/input_handler_manager.h" |
89 #include "content/renderer/internal_document_state_data.h" | 89 #include "content/renderer/internal_document_state_data.h" |
90 #include "content/renderer/media/audio_device_factory.h" | 90 #include "content/renderer/media/audio_device_factory.h" |
91 #include "content/renderer/media/video_capture_impl_manager.h" | 91 #include "content/renderer/media/video_capture_impl_manager.h" |
92 #include "content/renderer/navigation_state_impl.h" | 92 #include "content/renderer/navigation_state_impl.h" |
93 #include "content/renderer/render_frame_impl.h" | 93 #include "content/renderer/render_frame_impl.h" |
94 #include "content/renderer/render_frame_proxy.h" | 94 #include "content/renderer/render_frame_proxy.h" |
95 #include "content/renderer/render_process.h" | 95 #include "content/renderer/render_process.h" |
96 #include "content/renderer/render_thread_impl.h" | 96 #include "content/renderer/render_thread_impl.h" |
97 #include "content/renderer/render_view_mouse_lock_dispatcher.h" | |
98 #include "content/renderer/render_widget_fullscreen_pepper.h" | 97 #include "content/renderer/render_widget_fullscreen_pepper.h" |
99 #include "content/renderer/renderer_webapplicationcachehost_impl.h" | 98 #include "content/renderer/renderer_webapplicationcachehost_impl.h" |
100 #include "content/renderer/resizing_mode_selector.h" | 99 #include "content/renderer/resizing_mode_selector.h" |
101 #include "content/renderer/savable_resources.h" | 100 #include "content/renderer/savable_resources.h" |
102 #include "content/renderer/speech_recognition_dispatcher.h" | 101 #include "content/renderer/speech_recognition_dispatcher.h" |
103 #include "content/renderer/text_input_client_observer.h" | 102 #include "content/renderer/text_input_client_observer.h" |
104 #include "content/renderer/web_ui_extension_data.h" | 103 #include "content/renderer/web_ui_extension_data.h" |
105 #include "content/renderer/websharedworker_proxy.h" | 104 #include "content/renderer/websharedworker_proxy.h" |
106 #include "media/audio/audio_output_device.h" | 105 #include "media/audio/audio_output_device.h" |
107 #include "media/base/media_switches.h" | 106 #include "media/base/media_switches.h" |
(...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
398 PendingFileChooser(const FileChooserParams& p, WebFileChooserCompletion* c) | 397 PendingFileChooser(const FileChooserParams& p, WebFileChooserCompletion* c) |
399 : params(p), | 398 : params(p), |
400 completion(c) { | 399 completion(c) { |
401 } | 400 } |
402 FileChooserParams params; | 401 FileChooserParams params; |
403 WebFileChooserCompletion* completion; // MAY BE NULL to skip callback. | 402 WebFileChooserCompletion* completion; // MAY BE NULL to skip callback. |
404 }; | 403 }; |
405 | 404 |
406 namespace { | 405 namespace { |
407 | 406 |
408 class WebWidgetLockTarget : public MouseLockDispatcher::LockTarget { | |
409 public: | |
410 explicit WebWidgetLockTarget(blink::WebWidget* webwidget) | |
411 : webwidget_(webwidget) {} | |
412 | |
413 void OnLockMouseACK(bool succeeded) override { | |
414 if (succeeded) | |
415 webwidget_->didAcquirePointerLock(); | |
416 else | |
417 webwidget_->didNotAcquirePointerLock(); | |
418 } | |
419 | |
420 void OnMouseLockLost() override { webwidget_->didLosePointerLock(); } | |
421 | |
422 bool HandleMouseLockedInputEvent(const blink::WebMouseEvent& event) override { | |
423 // The WebWidget handles mouse lock in WebKit's handleInputEvent(). | |
424 return false; | |
425 } | |
426 | |
427 private: | |
428 blink::WebWidget* webwidget_; | |
429 }; | |
430 | |
431 WebDragData DropDataToWebDragData(const DropData& drop_data) { | 407 WebDragData DropDataToWebDragData(const DropData& drop_data) { |
432 std::vector<WebDragData::Item> item_list; | 408 std::vector<WebDragData::Item> item_list; |
433 | 409 |
434 // These fields are currently unused when dragging into WebKit. | 410 // These fields are currently unused when dragging into WebKit. |
435 DCHECK(drop_data.download_metadata.empty()); | 411 DCHECK(drop_data.download_metadata.empty()); |
436 DCHECK(drop_data.file_contents.empty()); | 412 DCHECK(drop_data.file_contents.empty()); |
437 DCHECK(drop_data.file_description_filename.empty()); | 413 DCHECK(drop_data.file_description_filename.empty()); |
438 | 414 |
439 if (!drop_data.text.is_null()) { | 415 if (!drop_data.text.is_null()) { |
440 WebDragData::Item item; | 416 WebDragData::Item item; |
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
654 top_controls_constraints_(TOP_CONTROLS_STATE_BOTH), | 630 top_controls_constraints_(TOP_CONTROLS_STATE_BOTH), |
655 #endif | 631 #endif |
656 top_controls_shrink_blink_size_(false), | 632 top_controls_shrink_blink_size_(false), |
657 top_controls_height_(0.f), | 633 top_controls_height_(0.f), |
658 webview_(nullptr), | 634 webview_(nullptr), |
659 has_scrolled_focused_editable_node_into_rect_(false), | 635 has_scrolled_focused_editable_node_into_rect_(false), |
660 page_zoom_level_(params.page_zoom_level), | 636 page_zoom_level_(params.page_zoom_level), |
661 main_render_frame_(nullptr), | 637 main_render_frame_(nullptr), |
662 frame_widget_(nullptr), | 638 frame_widget_(nullptr), |
663 speech_recognition_dispatcher_(NULL), | 639 speech_recognition_dispatcher_(NULL), |
664 mouse_lock_dispatcher_(NULL), | |
665 #if defined(OS_ANDROID) | 640 #if defined(OS_ANDROID) |
666 expected_content_intent_id_(0), | 641 expected_content_intent_id_(0), |
667 #endif | 642 #endif |
668 enumeration_completion_id_(0), | 643 enumeration_completion_id_(0), |
669 session_storage_namespace_id_(params.session_storage_namespace_id) { | 644 session_storage_namespace_id_(params.session_storage_namespace_id) { |
670 GetWidget()->set_owner_delegate(this); | 645 GetWidget()->set_owner_delegate(this); |
671 } | 646 } |
672 | 647 |
673 void RenderViewImpl::Initialize(const ViewMsg_New_Params& params, | 648 void RenderViewImpl::Initialize(const ViewMsg_New_Params& params, |
674 bool was_created_by_renderer) { | 649 bool was_created_by_renderer) { |
675 SetRoutingID(params.view_id); | 650 SetRoutingID(params.view_id); |
676 | 651 |
677 int opener_view_routing_id; | 652 int opener_view_routing_id; |
678 WebFrame* opener_frame = RenderFrameImpl::ResolveOpener( | 653 WebFrame* opener_frame = RenderFrameImpl::ResolveOpener( |
679 params.opener_frame_route_id, &opener_view_routing_id); | 654 params.opener_frame_route_id, &opener_view_routing_id); |
680 if (opener_view_routing_id != MSG_ROUTING_NONE && was_created_by_renderer) | 655 if (opener_view_routing_id != MSG_ROUTING_NONE && was_created_by_renderer) |
681 opener_id_ = opener_view_routing_id; | 656 opener_id_ = opener_view_routing_id; |
682 | 657 |
683 display_mode_ = params.initial_size.display_mode; | 658 display_mode_ = params.initial_size.display_mode; |
684 | 659 |
685 // Ensure we start with a valid next_page_id_ from the browser. | 660 // Ensure we start with a valid next_page_id_ from the browser. |
686 DCHECK_GE(next_page_id_, 0); | 661 DCHECK_GE(next_page_id_, 0); |
687 | 662 |
688 webview_ = WebView::create(this); | 663 webview_ = WebView::create(this); |
689 webwidget_ = webview_->widget(); | 664 RenderWidget::DoInit(MSG_ROUTING_NONE, webview_->widget(), nullptr); |
690 webwidget_mouse_lock_target_.reset(new WebWidgetLockTarget(webwidget_)); | |
691 | 665 |
692 g_view_map.Get().insert(std::make_pair(webview(), this)); | 666 g_view_map.Get().insert(std::make_pair(webview(), this)); |
693 g_routing_id_view_map.Get().insert(std::make_pair(GetRoutingID(), this)); | 667 g_routing_id_view_map.Get().insert(std::make_pair(GetRoutingID(), this)); |
694 | 668 |
695 const base::CommandLine& command_line = | 669 const base::CommandLine& command_line = |
696 *base::CommandLine::ForCurrentProcess(); | 670 *base::CommandLine::ForCurrentProcess(); |
697 | 671 |
698 if (command_line.HasSwitch(switches::kStatsCollectionController)) | 672 if (command_line.HasSwitch(switches::kStatsCollectionController)) |
699 stats_collection_observer_.reset(new StatsCollectionObserver(this)); | 673 stats_collection_observer_.reset(new StatsCollectionObserver(this)); |
700 | 674 |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
766 content_detectors_.push_back(base::WrapUnique(new AddressDetector())); | 740 content_detectors_.push_back(base::WrapUnique(new AddressDetector())); |
767 const std::string& contry_iso = | 741 const std::string& contry_iso = |
768 params.renderer_preferences.network_contry_iso; | 742 params.renderer_preferences.network_contry_iso; |
769 if (!contry_iso.empty()) { | 743 if (!contry_iso.empty()) { |
770 content_detectors_.push_back( | 744 content_detectors_.push_back( |
771 base::WrapUnique(new PhoneNumberDetector(contry_iso))); | 745 base::WrapUnique(new PhoneNumberDetector(contry_iso))); |
772 } | 746 } |
773 content_detectors_.push_back(base::WrapUnique(new EmailDetector())); | 747 content_detectors_.push_back(base::WrapUnique(new EmailDetector())); |
774 #endif | 748 #endif |
775 | 749 |
776 RenderThread::Get()->AddRoute(GetRoutingID(), this); | |
777 // Take a reference on behalf of the RenderThread. This will be balanced | |
778 // when we receive ViewMsg_Close in the RenderWidget (which RenderView | |
779 // inherits from). | |
780 AddRef(); | |
781 if (RenderThreadImpl::current()) { | |
782 RenderThreadImpl::current()->WidgetCreated(); | |
783 if (is_hidden_) | |
784 RenderThreadImpl::current()->WidgetHidden(); | |
785 } | |
786 | |
787 // If this is a popup, we must wait for the CreatingNew_ACK message before | 750 // If this is a popup, we must wait for the CreatingNew_ACK message before |
788 // completing initialization. Otherwise, we can finish it now. | 751 // completing initialization. Otherwise, we can finish it now. |
789 if (opener_id_ == MSG_ROUTING_NONE) | 752 if (opener_id_ == MSG_ROUTING_NONE) |
790 did_show_ = true; | 753 did_show_ = true; |
791 | 754 |
792 // Set the main frame's name. Only needs to be done for WebLocalFrames, | 755 // Set the main frame's name. Only needs to be done for WebLocalFrames, |
793 // since the remote case was handled as part of SetReplicatedState on the | 756 // since the remote case was handled as part of SetReplicatedState on the |
794 // proxy above. | 757 // proxy above. |
795 if (!params.replicated_frame_state.name.empty() && | 758 if (!params.replicated_frame_state.name.empty() && |
796 webview()->mainFrame()->isWebLocalFrame()) { | 759 webview()->mainFrame()->isWebLocalFrame()) { |
(...skipping 11 matching lines...) Expand all Loading... |
808 if (!params.enable_auto_resize) { | 771 if (!params.enable_auto_resize) { |
809 OnResize(params.initial_size); | 772 OnResize(params.initial_size); |
810 } else { | 773 } else { |
811 OnEnableAutoResize(params.min_size, params.max_size); | 774 OnEnableAutoResize(params.min_size, params.max_size); |
812 } | 775 } |
813 | 776 |
814 #if defined(OS_MACOSX) | 777 #if defined(OS_MACOSX) |
815 new TextInputClientObserver(this); | 778 new TextInputClientObserver(this); |
816 #endif // defined(OS_MACOSX) | 779 #endif // defined(OS_MACOSX) |
817 | 780 |
818 // The next group of objects all implement RenderViewObserver, so are deleted | |
819 // along with the RenderView automatically. | |
820 mouse_lock_dispatcher_ = new RenderViewMouseLockDispatcher(this); | |
821 | |
822 // We don't use HistoryController in OOPIF-enabled modes. | 781 // We don't use HistoryController in OOPIF-enabled modes. |
823 if (!SiteIsolationPolicy::UseSubframeNavigationEntries()) | 782 if (!SiteIsolationPolicy::UseSubframeNavigationEntries()) |
824 history_controller_.reset(new HistoryController(this)); | 783 history_controller_.reset(new HistoryController(this)); |
825 | 784 |
826 new IdleUserDetector(this); | 785 new IdleUserDetector(this); |
827 | 786 |
828 if (command_line.HasSwitch(switches::kDomAutomationController)) | 787 if (command_line.HasSwitch(switches::kDomAutomationController)) |
829 enabled_bindings_ |= BINDINGS_POLICY_DOM_AUTOMATION; | 788 enabled_bindings_ |= BINDINGS_POLICY_DOM_AUTOMATION; |
830 if (command_line.HasSwitch(switches::kStatsCollectionController)) | 789 if (command_line.HasSwitch(switches::kStatsCollectionController)) |
831 enabled_bindings_ |= BINDINGS_POLICY_STATS_COLLECTION; | 790 enabled_bindings_ |= BINDINGS_POLICY_STATS_COLLECTION; |
(...skipping 1160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1992 | 1951 |
1993 // NOTE: initial_rect_ may still have its default values at this point, but | 1952 // NOTE: initial_rect_ may still have its default values at this point, but |
1994 // that's okay. It'll be ignored if disposition is not NEW_POPUP, or the | 1953 // that's okay. It'll be ignored if disposition is not NEW_POPUP, or the |
1995 // browser process will impose a default position otherwise. | 1954 // browser process will impose a default position otherwise. |
1996 Send(new ViewHostMsg_ShowView(opener_id_, GetRoutingID(), | 1955 Send(new ViewHostMsg_ShowView(opener_id_, GetRoutingID(), |
1997 NavigationPolicyToDisposition(policy), | 1956 NavigationPolicyToDisposition(policy), |
1998 initial_rect_, opened_by_user_gesture_)); | 1957 initial_rect_, opened_by_user_gesture_)); |
1999 SetPendingWindowRect(initial_rect_); | 1958 SetPendingWindowRect(initial_rect_); |
2000 } | 1959 } |
2001 | 1960 |
2002 bool RenderViewImpl::requestPointerLock() { | |
2003 return mouse_lock_dispatcher_->LockMouse(webwidget_mouse_lock_target_.get()); | |
2004 } | |
2005 | |
2006 void RenderViewImpl::requestPointerUnlock() { | |
2007 mouse_lock_dispatcher_->UnlockMouse(webwidget_mouse_lock_target_.get()); | |
2008 } | |
2009 | |
2010 bool RenderViewImpl::isPointerLocked() { | |
2011 return mouse_lock_dispatcher_->IsMouseLockedTo( | |
2012 webwidget_mouse_lock_target_.get()); | |
2013 } | |
2014 | |
2015 void RenderViewImpl::onMouseDown(const WebNode& mouse_down_node) { | 1961 void RenderViewImpl::onMouseDown(const WebNode& mouse_down_node) { |
2016 FOR_EACH_OBSERVER( | 1962 FOR_EACH_OBSERVER( |
2017 RenderViewObserver, observers_, OnMouseDown(mouse_down_node)); | 1963 RenderViewObserver, observers_, OnMouseDown(mouse_down_node)); |
2018 } | 1964 } |
2019 | 1965 |
2020 void RenderViewImpl::didHandleGestureEvent( | 1966 void RenderViewImpl::didHandleGestureEvent( |
2021 const WebGestureEvent& event, | 1967 const WebGestureEvent& event, |
2022 bool event_cancelled) { | 1968 bool event_cancelled) { |
2023 RenderWidget::didHandleGestureEvent(event, event_cancelled); | 1969 RenderWidget::didHandleGestureEvent(event, event_cancelled); |
2024 | 1970 |
(...skipping 1370 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3395 return render_frame->focused_pepper_plugin(); | 3341 return render_frame->focused_pepper_plugin(); |
3396 } | 3342 } |
3397 frame = frame->traverseNext(false); | 3343 frame = frame->traverseNext(false); |
3398 } | 3344 } |
3399 | 3345 |
3400 return nullptr; | 3346 return nullptr; |
3401 } | 3347 } |
3402 #endif | 3348 #endif |
3403 | 3349 |
3404 } // namespace content | 3350 } // namespace content |
OLD | NEW |