Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(41)

Side by Side Diff: content/renderer/render_view_impl.cc

Issue 1980133002: Implement pointer lock API for out-of-process iframes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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, false);
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 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
805 if (!params.enable_auto_resize) { 779 if (!params.enable_auto_resize) {
806 OnResize(params.initial_size); 780 OnResize(params.initial_size);
807 } else { 781 } else {
808 OnEnableAutoResize(params.min_size, params.max_size); 782 OnEnableAutoResize(params.min_size, params.max_size);
809 } 783 }
810 784
811 #if defined(OS_MACOSX) 785 #if defined(OS_MACOSX)
812 new TextInputClientObserver(this); 786 new TextInputClientObserver(this);
813 #endif // defined(OS_MACOSX) 787 #endif // defined(OS_MACOSX)
814 788
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. 789 // We don't use HistoryController in OOPIF-enabled modes.
820 if (!SiteIsolationPolicy::UseSubframeNavigationEntries()) 790 if (!SiteIsolationPolicy::UseSubframeNavigationEntries())
821 history_controller_.reset(new HistoryController(this)); 791 history_controller_.reset(new HistoryController(this));
822 792
823 new IdleUserDetector(this); 793 new IdleUserDetector(this);
824 794
825 if (command_line.HasSwitch(switches::kDomAutomationController)) 795 if (command_line.HasSwitch(switches::kDomAutomationController))
826 enabled_bindings_ |= BINDINGS_POLICY_DOM_AUTOMATION; 796 enabled_bindings_ |= BINDINGS_POLICY_DOM_AUTOMATION;
827 if (command_line.HasSwitch(switches::kStatsCollectionController)) 797 if (command_line.HasSwitch(switches::kStatsCollectionController))
828 enabled_bindings_ |= BINDINGS_POLICY_STATS_COLLECTION; 798 enabled_bindings_ |= BINDINGS_POLICY_STATS_COLLECTION;
(...skipping 1158 matching lines...) Expand 10 before | Expand all | Expand 10 after
1987 1957
1988 // NOTE: initial_rect_ may still have its default values at this point, but 1958 // NOTE: initial_rect_ may still have its default values at this point, but
1989 // that's okay. It'll be ignored if disposition is not NEW_POPUP, or the 1959 // that's okay. It'll be ignored if disposition is not NEW_POPUP, or the
1990 // browser process will impose a default position otherwise. 1960 // browser process will impose a default position otherwise.
1991 Send(new ViewHostMsg_ShowView(opener_id_, GetRoutingID(), 1961 Send(new ViewHostMsg_ShowView(opener_id_, GetRoutingID(),
1992 NavigationPolicyToDisposition(policy), 1962 NavigationPolicyToDisposition(policy),
1993 initial_rect_, opened_by_user_gesture_)); 1963 initial_rect_, opened_by_user_gesture_));
1994 SetPendingWindowRect(initial_rect_); 1964 SetPendingWindowRect(initial_rect_);
1995 } 1965 }
1996 1966
1997 bool RenderViewImpl::requestPointerLock() {
1998 return mouse_lock_dispatcher_->LockMouse(webwidget_mouse_lock_target_.get());
1999 }
2000
2001 void RenderViewImpl::requestPointerUnlock() {
2002 mouse_lock_dispatcher_->UnlockMouse(webwidget_mouse_lock_target_.get());
2003 }
2004
2005 bool RenderViewImpl::isPointerLocked() {
2006 return mouse_lock_dispatcher_->IsMouseLockedTo(
2007 webwidget_mouse_lock_target_.get());
2008 }
2009
2010 void RenderViewImpl::onMouseDown(const WebNode& mouse_down_node) { 1967 void RenderViewImpl::onMouseDown(const WebNode& mouse_down_node) {
2011 FOR_EACH_OBSERVER( 1968 FOR_EACH_OBSERVER(
2012 RenderViewObserver, observers_, OnMouseDown(mouse_down_node)); 1969 RenderViewObserver, observers_, OnMouseDown(mouse_down_node));
2013 } 1970 }
2014 1971
2015 void RenderViewImpl::didHandleGestureEvent( 1972 void RenderViewImpl::didHandleGestureEvent(
2016 const WebGestureEvent& event, 1973 const WebGestureEvent& event,
2017 bool event_cancelled) { 1974 bool event_cancelled) {
2018 RenderWidget::didHandleGestureEvent(event, event_cancelled); 1975 RenderWidget::didHandleGestureEvent(event, event_cancelled);
2019 1976
(...skipping 1370 matching lines...) Expand 10 before | Expand all | Expand 10 after
3390 return render_frame->focused_pepper_plugin(); 3347 return render_frame->focused_pepper_plugin();
3391 } 3348 }
3392 frame = frame->traverseNext(false); 3349 frame = frame->traverseNext(false);
3393 } 3350 }
3394 3351
3395 return nullptr; 3352 return nullptr;
3396 } 3353 }
3397 #endif 3354 #endif
3398 3355
3399 } // namespace content 3356 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698