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

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: addressing comments Created 4 years, 7 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 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 #include "content/renderer/ime_event_guard.h" 85 #include "content/renderer/ime_event_guard.h"
86 #include "content/renderer/input/input_handler_manager.h" 86 #include "content/renderer/input/input_handler_manager.h"
87 #include "content/renderer/internal_document_state_data.h" 87 #include "content/renderer/internal_document_state_data.h"
88 #include "content/renderer/media/audio_device_factory.h" 88 #include "content/renderer/media/audio_device_factory.h"
89 #include "content/renderer/media/video_capture_impl_manager.h" 89 #include "content/renderer/media/video_capture_impl_manager.h"
90 #include "content/renderer/navigation_state_impl.h" 90 #include "content/renderer/navigation_state_impl.h"
91 #include "content/renderer/render_frame_impl.h" 91 #include "content/renderer/render_frame_impl.h"
92 #include "content/renderer/render_frame_proxy.h" 92 #include "content/renderer/render_frame_proxy.h"
93 #include "content/renderer/render_process.h" 93 #include "content/renderer/render_process.h"
94 #include "content/renderer/render_thread_impl.h" 94 #include "content/renderer/render_thread_impl.h"
95 #include "content/renderer/render_view_mouse_lock_dispatcher.h"
96 #include "content/renderer/render_widget_fullscreen_pepper.h" 95 #include "content/renderer/render_widget_fullscreen_pepper.h"
97 #include "content/renderer/renderer_webapplicationcachehost_impl.h" 96 #include "content/renderer/renderer_webapplicationcachehost_impl.h"
98 #include "content/renderer/resizing_mode_selector.h" 97 #include "content/renderer/resizing_mode_selector.h"
99 #include "content/renderer/savable_resources.h" 98 #include "content/renderer/savable_resources.h"
100 #include "content/renderer/speech_recognition_dispatcher.h" 99 #include "content/renderer/speech_recognition_dispatcher.h"
101 #include "content/renderer/text_input_client_observer.h" 100 #include "content/renderer/text_input_client_observer.h"
102 #include "content/renderer/web_ui_extension_data.h" 101 #include "content/renderer/web_ui_extension_data.h"
103 #include "content/renderer/websharedworker_proxy.h" 102 #include "content/renderer/websharedworker_proxy.h"
104 #include "media/audio/audio_output_device.h" 103 #include "media/audio/audio_output_device.h"
105 #include "media/base/media_switches.h" 104 #include "media/base/media_switches.h"
(...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after
396 PendingFileChooser(const FileChooserParams& p, WebFileChooserCompletion* c) 395 PendingFileChooser(const FileChooserParams& p, WebFileChooserCompletion* c)
397 : params(p), 396 : params(p),
398 completion(c) { 397 completion(c) {
399 } 398 }
400 FileChooserParams params; 399 FileChooserParams params;
401 WebFileChooserCompletion* completion; // MAY BE NULL to skip callback. 400 WebFileChooserCompletion* completion; // MAY BE NULL to skip callback.
402 }; 401 };
403 402
404 namespace { 403 namespace {
405 404
406 class WebWidgetLockTarget : public MouseLockDispatcher::LockTarget {
407 public:
408 explicit WebWidgetLockTarget(blink::WebWidget* webwidget)
409 : webwidget_(webwidget) {}
410
411 void OnLockMouseACK(bool succeeded) override {
412 if (succeeded)
413 webwidget_->didAcquirePointerLock();
414 else
415 webwidget_->didNotAcquirePointerLock();
416 }
417
418 void OnMouseLockLost() override { webwidget_->didLosePointerLock(); }
419
420 bool HandleMouseLockedInputEvent(const blink::WebMouseEvent& event) override {
421 // The WebWidget handles mouse lock in WebKit's handleInputEvent().
422 return false;
423 }
424
425 private:
426 blink::WebWidget* webwidget_;
427 };
428
429 WebDragData DropDataToWebDragData(const DropData& drop_data) { 405 WebDragData DropDataToWebDragData(const DropData& drop_data) {
430 std::vector<WebDragData::Item> item_list; 406 std::vector<WebDragData::Item> item_list;
431 407
432 // These fields are currently unused when dragging into WebKit. 408 // These fields are currently unused when dragging into WebKit.
433 DCHECK(drop_data.download_metadata.empty()); 409 DCHECK(drop_data.download_metadata.empty());
434 DCHECK(drop_data.file_contents.empty()); 410 DCHECK(drop_data.file_contents.empty());
435 DCHECK(drop_data.file_description_filename.empty()); 411 DCHECK(drop_data.file_description_filename.empty());
436 412
437 if (!drop_data.text.is_null()) { 413 if (!drop_data.text.is_null()) {
438 WebDragData::Item item; 414 WebDragData::Item item;
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
647 top_controls_constraints_(TOP_CONTROLS_STATE_BOTH), 623 top_controls_constraints_(TOP_CONTROLS_STATE_BOTH),
648 #endif 624 #endif
649 top_controls_shrink_blink_size_(false), 625 top_controls_shrink_blink_size_(false),
650 top_controls_height_(0.f), 626 top_controls_height_(0.f),
651 webview_(nullptr), 627 webview_(nullptr),
652 has_scrolled_focused_editable_node_into_rect_(false), 628 has_scrolled_focused_editable_node_into_rect_(false),
653 page_zoom_level_(params.page_zoom_level), 629 page_zoom_level_(params.page_zoom_level),
654 main_render_frame_(nullptr), 630 main_render_frame_(nullptr),
655 frame_widget_(nullptr), 631 frame_widget_(nullptr),
656 speech_recognition_dispatcher_(NULL), 632 speech_recognition_dispatcher_(NULL),
657 mouse_lock_dispatcher_(NULL),
658 #if defined(OS_ANDROID) 633 #if defined(OS_ANDROID)
659 expected_content_intent_id_(0), 634 expected_content_intent_id_(0),
660 #endif 635 #endif
661 enumeration_completion_id_(0), 636 enumeration_completion_id_(0),
662 session_storage_namespace_id_(params.session_storage_namespace_id) { 637 session_storage_namespace_id_(params.session_storage_namespace_id) {
663 GetWidget()->set_owner_delegate(this); 638 GetWidget()->set_owner_delegate(this);
664 } 639 }
665 640
666 void RenderViewImpl::Initialize(const ViewMsg_New_Params& params, 641 void RenderViewImpl::Initialize(const ViewMsg_New_Params& params,
667 bool was_created_by_renderer) { 642 bool was_created_by_renderer) {
668 SetRoutingID(params.view_id); 643 SetRoutingID(params.view_id);
669 644
670 int opener_view_routing_id; 645 int opener_view_routing_id;
671 WebFrame* opener_frame = RenderFrameImpl::ResolveOpener( 646 WebFrame* opener_frame = RenderFrameImpl::ResolveOpener(
672 params.opener_frame_route_id, &opener_view_routing_id); 647 params.opener_frame_route_id, &opener_view_routing_id);
673 if (opener_view_routing_id != MSG_ROUTING_NONE && was_created_by_renderer) 648 if (opener_view_routing_id != MSG_ROUTING_NONE && was_created_by_renderer)
674 opener_id_ = opener_view_routing_id; 649 opener_id_ = opener_view_routing_id;
675 650
676 display_mode_ = params.initial_size.display_mode; 651 display_mode_ = params.initial_size.display_mode;
677 652
678 // Ensure we start with a valid next_page_id_ from the browser. 653 // Ensure we start with a valid next_page_id_ from the browser.
679 DCHECK_GE(next_page_id_, 0); 654 DCHECK_GE(next_page_id_, 0);
680 655
681 webview_ = WebView::create(this); 656 webview_ = WebView::create(this);
682 webwidget_ = webview_->widget(); 657 RenderWidget::DoInit(MSG_ROUTING_NONE, webview_->widget(), nullptr, false);
683 webwidget_mouse_lock_target_.reset(new WebWidgetLockTarget(webwidget_));
684 658
685 g_view_map.Get().insert(std::make_pair(webview(), this)); 659 g_view_map.Get().insert(std::make_pair(webview(), this));
686 g_routing_id_view_map.Get().insert(std::make_pair(GetRoutingID(), this)); 660 g_routing_id_view_map.Get().insert(std::make_pair(GetRoutingID(), this));
687 661
688 const base::CommandLine& command_line = 662 const base::CommandLine& command_line =
689 *base::CommandLine::ForCurrentProcess(); 663 *base::CommandLine::ForCurrentProcess();
690 664
691 if (command_line.HasSwitch(switches::kStatsCollectionController)) 665 if (command_line.HasSwitch(switches::kStatsCollectionController))
692 stats_collection_observer_.reset(new StatsCollectionObserver(this)); 666 stats_collection_observer_.reset(new StatsCollectionObserver(this));
693 667
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
801 if (!params.enable_auto_resize) { 775 if (!params.enable_auto_resize) {
802 OnResize(params.initial_size); 776 OnResize(params.initial_size);
803 } else { 777 } else {
804 OnEnableAutoResize(params.min_size, params.max_size); 778 OnEnableAutoResize(params.min_size, params.max_size);
805 } 779 }
806 780
807 #if defined(OS_MACOSX) 781 #if defined(OS_MACOSX)
808 new TextInputClientObserver(this); 782 new TextInputClientObserver(this);
809 #endif // defined(OS_MACOSX) 783 #endif // defined(OS_MACOSX)
810 784
811 // The next group of objects all implement RenderViewObserver, so are deleted
812 // along with the RenderView automatically.
813 mouse_lock_dispatcher_ = new RenderViewMouseLockDispatcher(this);
814
815 // We don't use HistoryController in OOPIF-enabled modes. 785 // We don't use HistoryController in OOPIF-enabled modes.
816 if (!SiteIsolationPolicy::UseSubframeNavigationEntries()) 786 if (!SiteIsolationPolicy::UseSubframeNavigationEntries())
817 history_controller_.reset(new HistoryController(this)); 787 history_controller_.reset(new HistoryController(this));
818 788
819 new IdleUserDetector(this); 789 new IdleUserDetector(this);
820 790
821 if (command_line.HasSwitch(switches::kDomAutomationController)) 791 if (command_line.HasSwitch(switches::kDomAutomationController))
822 enabled_bindings_ |= BINDINGS_POLICY_DOM_AUTOMATION; 792 enabled_bindings_ |= BINDINGS_POLICY_DOM_AUTOMATION;
823 if (command_line.HasSwitch(switches::kStatsCollectionController)) 793 if (command_line.HasSwitch(switches::kStatsCollectionController))
824 enabled_bindings_ |= BINDINGS_POLICY_STATS_COLLECTION; 794 enabled_bindings_ |= BINDINGS_POLICY_STATS_COLLECTION;
(...skipping 1159 matching lines...) Expand 10 before | Expand all | Expand 10 after
1984 1954
1985 // NOTE: initial_rect_ may still have its default values at this point, but 1955 // NOTE: initial_rect_ may still have its default values at this point, but
1986 // that's okay. It'll be ignored if disposition is not NEW_POPUP, or the 1956 // that's okay. It'll be ignored if disposition is not NEW_POPUP, or the
1987 // browser process will impose a default position otherwise. 1957 // browser process will impose a default position otherwise.
1988 Send(new ViewHostMsg_ShowView(opener_id_, GetRoutingID(), 1958 Send(new ViewHostMsg_ShowView(opener_id_, GetRoutingID(),
1989 NavigationPolicyToDisposition(policy), 1959 NavigationPolicyToDisposition(policy),
1990 initial_rect_, opened_by_user_gesture_)); 1960 initial_rect_, opened_by_user_gesture_));
1991 SetPendingWindowRect(initial_rect_); 1961 SetPendingWindowRect(initial_rect_);
1992 } 1962 }
1993 1963
1994 bool RenderViewImpl::requestPointerLock() {
1995 return mouse_lock_dispatcher_->LockMouse(webwidget_mouse_lock_target_.get());
1996 }
1997
1998 void RenderViewImpl::requestPointerUnlock() {
1999 mouse_lock_dispatcher_->UnlockMouse(webwidget_mouse_lock_target_.get());
2000 }
2001
2002 bool RenderViewImpl::isPointerLocked() {
2003 return mouse_lock_dispatcher_->IsMouseLockedTo(
2004 webwidget_mouse_lock_target_.get());
2005 }
2006
2007 void RenderViewImpl::onMouseDown(const WebNode& mouse_down_node) { 1964 void RenderViewImpl::onMouseDown(const WebNode& mouse_down_node) {
2008 FOR_EACH_OBSERVER( 1965 FOR_EACH_OBSERVER(
2009 RenderViewObserver, observers_, OnMouseDown(mouse_down_node)); 1966 RenderViewObserver, observers_, OnMouseDown(mouse_down_node));
2010 } 1967 }
2011 1968
2012 void RenderViewImpl::didHandleGestureEvent( 1969 void RenderViewImpl::didHandleGestureEvent(
2013 const WebGestureEvent& event, 1970 const WebGestureEvent& event,
2014 bool event_cancelled) { 1971 bool event_cancelled) {
2015 RenderWidget::didHandleGestureEvent(event, event_cancelled); 1972 RenderWidget::didHandleGestureEvent(event, event_cancelled);
2016 1973
(...skipping 1369 matching lines...) Expand 10 before | Expand all | Expand 10 after
3386 return render_frame->focused_pepper_plugin(); 3343 return render_frame->focused_pepper_plugin();
3387 } 3344 }
3388 frame = frame->traverseNext(false); 3345 frame = frame->traverseNext(false);
3389 } 3346 }
3390 3347
3391 return nullptr; 3348 return nullptr;
3392 } 3349 }
3393 #endif 3350 #endif
3394 3351
3395 } // namespace content 3352 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698