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/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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |