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

Side by Side Diff: content/browser/web_contents/web_contents_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
« no previous file with comments | « content/browser/web_contents/web_contents_impl.h ('k') | content/content_renderer.gypi » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/browser/web_contents/web_contents_impl.h" 5 #include "content/browser/web_contents/web_contents_impl.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <cmath> 9 #include <cmath>
10 #include <utility> 10 #include <utility>
(...skipping 399 matching lines...) Expand 10 before | Expand all | Expand 10 after
410 is_subframe_(false), 410 is_subframe_(false),
411 force_disable_overscroll_content_(false), 411 force_disable_overscroll_content_(false),
412 last_dialog_suppressed_(false), 412 last_dialog_suppressed_(false),
413 geolocation_service_context_(new GeolocationServiceContext()), 413 geolocation_service_context_(new GeolocationServiceContext()),
414 accessibility_mode_( 414 accessibility_mode_(
415 BrowserAccessibilityStateImpl::GetInstance()->accessibility_mode()), 415 BrowserAccessibilityStateImpl::GetInstance()->accessibility_mode()),
416 audio_stream_monitor_(this), 416 audio_stream_monitor_(this),
417 bluetooth_connected_device_count_(0), 417 bluetooth_connected_device_count_(0),
418 virtual_keyboard_requested_(false), 418 virtual_keyboard_requested_(false),
419 page_scale_factor_is_one_(true), 419 page_scale_factor_is_one_(true),
420 mouse_lock_widget_(nullptr),
420 loading_weak_factory_(this), 421 loading_weak_factory_(this),
421 weak_factory_(this) { 422 weak_factory_(this) {
422 frame_tree_.SetFrameRemoveListener( 423 frame_tree_.SetFrameRemoveListener(
423 base::Bind(&WebContentsImpl::OnFrameRemoved, 424 base::Bind(&WebContentsImpl::OnFrameRemoved,
424 base::Unretained(this))); 425 base::Unretained(this)));
425 #if defined(OS_ANDROID) 426 #if defined(OS_ANDROID)
426 media_web_contents_observer_.reset(new MediaWebContentsObserverAndroid(this)); 427 media_web_contents_observer_.reset(new MediaWebContentsObserverAndroid(this));
427 #else 428 #else
428 media_web_contents_observer_.reset(new MediaWebContentsObserver(this)); 429 media_web_contents_observer_.reset(new MediaWebContentsObserver(this));
429 #endif 430 #endif
(...skipping 1269 matching lines...) Expand 10 before | Expand all | Expand 10 after
1699 if (delegate_ && delegate_->EmbedsFullscreenWidget()) 1700 if (delegate_ && delegate_->EmbedsFullscreenWidget())
1700 delegate_->ExitFullscreenModeForTab(this); 1701 delegate_->ExitFullscreenModeForTab(this);
1701 FOR_EACH_OBSERVER(WebContentsObserver, 1702 FOR_EACH_OBSERVER(WebContentsObserver,
1702 observers_, 1703 observers_,
1703 DidDestroyFullscreenWidget()); 1704 DidDestroyFullscreenWidget());
1704 fullscreen_widget_process_id_ = ChildProcessHost::kInvalidUniqueID; 1705 fullscreen_widget_process_id_ = ChildProcessHost::kInvalidUniqueID;
1705 fullscreen_widget_routing_id_ = MSG_ROUTING_NONE; 1706 fullscreen_widget_routing_id_ = MSG_ROUTING_NONE;
1706 if (fullscreen_widget_had_focus_at_shutdown_) 1707 if (fullscreen_widget_had_focus_at_shutdown_)
1707 view_->RestoreFocus(); 1708 view_->RestoreFocus();
1708 } 1709 }
1710
1711 if (mouse_lock_widget_ == render_widget_host)
1712 mouse_lock_widget_ = nullptr;
1709 } 1713 }
1710 1714
1711 void WebContentsImpl::RenderWidgetGotFocus( 1715 void WebContentsImpl::RenderWidgetGotFocus(
1712 RenderWidgetHostImpl* render_widget_host) { 1716 RenderWidgetHostImpl* render_widget_host) {
1713 // Notify the observers if an embedded fullscreen widget was focused. 1717 // Notify the observers if an embedded fullscreen widget was focused.
1714 if (delegate_ && render_widget_host && delegate_->EmbedsFullscreenWidget() && 1718 if (delegate_ && render_widget_host && delegate_->EmbedsFullscreenWidget() &&
1715 render_widget_host->GetView() == GetFullscreenRenderWidgetHostView()) { 1719 render_widget_host->GetView() == GetFullscreenRenderWidgetHostView()) {
1716 NotifyWebContentsFocused(); 1720 NotifyWebContentsFocused();
1717 } 1721 }
1718 } 1722 }
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
1889 return blink::WebDisplayModeBrowser; 1893 return blink::WebDisplayModeBrowser;
1890 1894
1891 return delegate_ ? delegate_->GetDisplayMode(this) 1895 return delegate_ ? delegate_->GetDisplayMode(this)
1892 : blink::WebDisplayModeBrowser; 1896 : blink::WebDisplayModeBrowser;
1893 } 1897 }
1894 1898
1895 void WebContentsImpl::RequestToLockMouse( 1899 void WebContentsImpl::RequestToLockMouse(
1896 RenderWidgetHostImpl* render_widget_host, 1900 RenderWidgetHostImpl* render_widget_host,
1897 bool user_gesture, 1901 bool user_gesture,
1898 bool last_unlocked_by_target) { 1902 bool last_unlocked_by_target) {
1899 if (render_widget_host != GetRenderViewHost()->GetWidget()) { 1903 if (mouse_lock_widget_) {
1900 render_widget_host->GotResponseToLockMouseRequest(false); 1904 render_widget_host->GotResponseToLockMouseRequest(false);
1901 return; 1905 return;
1902 } 1906 }
1903 1907
1904 if (delegate_) 1908 bool widget_in_frame_tree = false;
1909 for (FrameTreeNode* node : frame_tree_.Nodes()) {
1910 if (node->current_frame_host()->GetRenderWidgetHost() ==
1911 render_widget_host) {
1912 widget_in_frame_tree = true;
1913 break;
1914 }
1915 }
1916
1917 if (widget_in_frame_tree && delegate_) {
1918 mouse_lock_widget_ = render_widget_host;
1905 delegate_->RequestToLockMouse(this, user_gesture, last_unlocked_by_target); 1919 delegate_->RequestToLockMouse(this, user_gesture, last_unlocked_by_target);
1906 else 1920 } else {
1907 GotResponseToLockMouseRequest(false); 1921 render_widget_host->GotResponseToLockMouseRequest(false);
1922 }
1908 } 1923 }
1909 1924
1910 void WebContentsImpl::LostMouseLock(RenderWidgetHostImpl* render_widget_host) { 1925 void WebContentsImpl::LostMouseLock(RenderWidgetHostImpl* render_widget_host) {
1911 if (!RenderViewHostImpl::From(render_widget_host)) 1926 CHECK(mouse_lock_widget_);
1912 return; 1927 mouse_lock_widget_->SendMouseLockLost();
1928 mouse_lock_widget_ = nullptr;
1913 1929
1914 if (delegate_) 1930 if (delegate_)
1915 delegate_->LostMouseLock(); 1931 delegate_->LostMouseLock();
1916 } 1932 }
1917 1933
1918 void WebContentsImpl::ForwardCompositorProto( 1934 void WebContentsImpl::ForwardCompositorProto(
1919 RenderWidgetHostImpl* render_widget_host, 1935 RenderWidgetHostImpl* render_widget_host,
1920 const std::vector<uint8_t>& proto) { 1936 const std::vector<uint8_t>& proto) {
1921 if (delegate_) 1937 if (delegate_)
1922 delegate_->ForwardCompositorProto(render_widget_host, proto); 1938 delegate_->ForwardCompositorProto(render_widget_host, proto);
(...skipping 1044 matching lines...) Expand 10 before | Expand all | Expand 10 after
2967 } 2983 }
2968 2984
2969 gfx::Size WebContentsImpl::GetPreferredSize() const { 2985 gfx::Size WebContentsImpl::GetPreferredSize() const {
2970 return capturer_count_ == 0 ? preferred_size_ : preferred_size_for_capture_; 2986 return capturer_count_ == 0 ? preferred_size_ : preferred_size_for_capture_;
2971 } 2987 }
2972 2988
2973 bool WebContentsImpl::GotResponseToLockMouseRequest(bool allowed) { 2989 bool WebContentsImpl::GotResponseToLockMouseRequest(bool allowed) {
2974 if (GetBrowserPluginGuest()) 2990 if (GetBrowserPluginGuest())
2975 return GetBrowserPluginGuest()->LockMouse(allowed); 2991 return GetBrowserPluginGuest()->LockMouse(allowed);
2976 2992
2977 return GetRenderViewHost() 2993 if (mouse_lock_widget_)
2978 ? GetRenderViewHost()->GetWidget()->GotResponseToLockMouseRequest( 2994 return mouse_lock_widget_->GotResponseToLockMouseRequest(allowed);
2979 allowed) 2995 return false;
2980 : false;
2981 } 2996 }
2982 2997
2983 bool WebContentsImpl::HasOpener() const { 2998 bool WebContentsImpl::HasOpener() const {
2984 return GetOpener() != NULL; 2999 return GetOpener() != NULL;
2985 } 3000 }
2986 3001
2987 WebContentsImpl* WebContentsImpl::GetOpener() const { 3002 WebContentsImpl* WebContentsImpl::GetOpener() const {
2988 FrameTreeNode* opener_ftn = frame_tree_.root()->opener(); 3003 FrameTreeNode* opener_ftn = frame_tree_.root()->opener();
2989 return opener_ftn ? FromFrameTreeNode(opener_ftn) : nullptr; 3004 return opener_ftn ? FromFrameTreeNode(opener_ftn) : nullptr;
2990 } 3005 }
(...skipping 2114 matching lines...) Expand 10 before | Expand all | Expand 10 after
5105 for (RenderViewHost* render_view_host : render_view_host_set) 5120 for (RenderViewHost* render_view_host : render_view_host_set)
5106 render_view_host->OnWebkitPreferencesChanged(); 5121 render_view_host->OnWebkitPreferencesChanged();
5107 } 5122 }
5108 5123
5109 void WebContentsImpl::SetJavaScriptDialogManagerForTesting( 5124 void WebContentsImpl::SetJavaScriptDialogManagerForTesting(
5110 JavaScriptDialogManager* dialog_manager) { 5125 JavaScriptDialogManager* dialog_manager) {
5111 dialog_manager_ = dialog_manager; 5126 dialog_manager_ = dialog_manager;
5112 } 5127 }
5113 5128
5114 } // namespace content 5129 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/web_contents/web_contents_impl.h ('k') | content/content_renderer.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698