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