diff options
author | fsamuel@chromium.org <fsamuel@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-01 19:46:41 +0000 |
---|---|---|
committer | fsamuel@chromium.org <fsamuel@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-01 19:46:41 +0000 |
commit | 6fd35b7c94a0629832f723591a335d6c91ba33e7 (patch) | |
tree | 89eebb17f7004be5de1d7b9ca93335051ee33c9a /content | |
parent | 1234f0a554182a3cb6bbf0b5262f9e8d87a636e6 (diff) | |
download | chromium_src-6fd35b7c94a0629832f723591a335d6c91ba33e7.zip chromium_src-6fd35b7c94a0629832f723591a335d6c91ba33e7.tar.gz chromium_src-6fd35b7c94a0629832f723591a335d6c91ba33e7.tar.bz2 |
WebWidgetClient::screenInfo() no longer does a synchronous IPC.
Instead it grabs the necessary info from a cached WebScreenInfo factory.
BUG=111401
TEST=Manually
Review URL: http://codereview.chromium.org/9302022
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@124453 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content')
-rw-r--r-- | content/browser/renderer_host/render_message_filter.cc | 1 | ||||
-rw-r--r-- | content/browser/renderer_host/render_message_filter.h | 2 | ||||
-rw-r--r-- | content/browser/renderer_host/render_message_filter_win.cc | 8 | ||||
-rw-r--r-- | content/browser/renderer_host/render_view_host.cc | 17 | ||||
-rw-r--r-- | content/browser/renderer_host/render_widget_host.cc | 9 | ||||
-rw-r--r-- | content/browser/renderer_host/render_widget_host.h | 2 | ||||
-rw-r--r-- | content/common/view_messages.h | 10 | ||||
-rw-r--r-- | content/renderer/render_thread_impl.cc | 3 | ||||
-rw-r--r-- | content/renderer/render_view_impl.cc | 17 | ||||
-rw-r--r-- | content/renderer/render_view_impl.h | 6 | ||||
-rw-r--r-- | content/renderer/render_widget.cc | 24 | ||||
-rw-r--r-- | content/renderer/render_widget.h | 9 | ||||
-rw-r--r-- | content/renderer/render_widget_fullscreen.cc | 2 | ||||
-rw-r--r-- | content/test/render_view_test.cc | 4 |
14 files changed, 57 insertions, 57 deletions
diff --git a/content/browser/renderer_host/render_message_filter.cc b/content/browser/renderer_host/render_message_filter.cc index 88d7c0f..2e021d7 100644 --- a/content/browser/renderer_host/render_message_filter.cc +++ b/content/browser/renderer_host/render_message_filter.cc @@ -330,7 +330,6 @@ bool RenderMessageFilter::OnMessageReceived(const IPC::Message& message, // On Windows, we handle these on the IO thread to avoid a deadlock with // plugins. On non-Windows systems, we need to handle them on the UI // thread. - IPC_MESSAGE_HANDLER(ViewHostMsg_GetScreenInfo, OnGetScreenInfo) IPC_MESSAGE_HANDLER(ViewHostMsg_GetWindowRect, OnGetWindowRect) IPC_MESSAGE_HANDLER(ViewHostMsg_GetRootWindowRect, OnGetRootWindowRect) #endif diff --git a/content/browser/renderer_host/render_message_filter.h b/content/browser/renderer_host/render_message_filter.h index bc0e0c9..22f6618 100644 --- a/content/browser/renderer_host/render_message_filter.h +++ b/content/browser/renderer_host/render_message_filter.h @@ -136,8 +136,6 @@ class RenderMessageFilter : public content::BrowserMessageFilter { #if defined(OS_WIN) && !defined(USE_AURA) // On Windows, we handle these on the IO thread to avoid a deadlock with // plugins. On non-Windows systems, we need to handle them on the UI thread. - void OnGetScreenInfo(gfx::NativeViewId window, - WebKit::WebScreenInfo* results); void OnGetWindowRect(gfx::NativeViewId window, gfx::Rect* rect); void OnGetRootWindowRect(gfx::NativeViewId window, gfx::Rect* rect); #endif diff --git a/content/browser/renderer_host/render_message_filter_win.cc b/content/browser/renderer_host/render_message_filter_win.cc index c48159b..9b58562 100644 --- a/content/browser/renderer_host/render_message_filter_win.cc +++ b/content/browser/renderer_host/render_message_filter_win.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -49,9 +49,3 @@ void RenderMessageFilter::OnGetRootWindowRect(gfx::NativeViewId window_id, *rect = GetVisibleWindowRect(GetAncestor(gfx::NativeViewFromId(window_id), GA_ROOT)); } - -void RenderMessageFilter::OnGetScreenInfo(gfx::NativeViewId view, - WebKit::WebScreenInfo* results) { - *results = - WebKit::WebScreenInfoFactory::screenInfo(gfx::NativeViewFromId(view)); -} diff --git a/content/browser/renderer_host/render_view_host.cc b/content/browser/renderer_host/render_view_host.cc index 8065ad9..8d951e1 100644 --- a/content/browser/renderer_host/render_view_host.cc +++ b/content/browser/renderer_host/render_view_host.cc @@ -53,6 +53,9 @@ #include "net/base/net_util.h" #include "net/url_request/url_request_context_getter.h" #include "third_party/skia/include/core/SkBitmap.h" +#if defined(OS_WIN) +#include "third_party/WebKit/Source/WebKit/chromium/public/win/WebScreenInfoFactory.h" +#endif #include "ui/gfx/native_widget_types.h" #include "webkit/fileapi/isolated_context.h" #include "webkit/glue/webaccessibility.h" @@ -211,6 +214,20 @@ bool RenderViewHost::CreateRenderView(const string16& frame_name, params.session_storage_namespace_id = session_storage_namespace_->id(); params.frame_name = frame_name; params.next_page_id = next_page_id; +#if defined(OS_POSIX) || defined(USE_AURA) + if (view()) { + static_cast<content::RenderWidgetHostViewPort*>( + view())->GetScreenInfo(¶ms.screen_info); + } else { + content::RenderWidgetHostViewPort::GetDefaultScreenInfo( + ¶ms.screen_info); + } +#else + params.screen_info = + WebKit::WebScreenInfoFactory::screenInfo( + gfx::NativeViewFromId(GetNativeViewId())); +#endif + Send(new ViewMsg_New(params)); // If it's enabled, tell the renderer to set up the Javascript bindings for diff --git a/content/browser/renderer_host/render_widget_host.cc b/content/browser/renderer_host/render_widget_host.cc index a760a0d..d08f150 100644 --- a/content/browser/renderer_host/render_widget_host.cc +++ b/content/browser/renderer_host/render_widget_host.cc @@ -281,7 +281,6 @@ bool RenderWidgetHostImpl::OnMessageReceived(const IPC::Message &msg) { IPC_MESSAGE_HANDLER(ViewHostMsg_LockMouse, OnMsgLockMouse) IPC_MESSAGE_HANDLER(ViewHostMsg_UnlockMouse, OnMsgUnlockMouse) #if defined(OS_POSIX) || defined(USE_AURA) - IPC_MESSAGE_HANDLER(ViewHostMsg_GetScreenInfo, OnMsgGetScreenInfo) IPC_MESSAGE_HANDLER(ViewHostMsg_GetWindowRect, OnMsgGetWindowRect) IPC_MESSAGE_HANDLER(ViewHostMsg_GetRootWindowRect, OnMsgGetRootWindowRect) #endif @@ -1351,14 +1350,6 @@ void RenderWidgetHostImpl::OnMsgUnlockMouse() { } #if defined(OS_POSIX) || defined(USE_AURA) -void RenderWidgetHostImpl::OnMsgGetScreenInfo(gfx::NativeViewId window_id, - WebKit::WebScreenInfo* results) { - if (view_) - view_->GetScreenInfo(results); - else - RenderWidgetHostViewPort::GetDefaultScreenInfo(results); -} - void RenderWidgetHostImpl::OnMsgGetWindowRect(gfx::NativeViewId window_id, gfx::Rect* results) { if (view_) diff --git a/content/browser/renderer_host/render_widget_host.h b/content/browser/renderer_host/render_widget_host.h index da38d6f..7abb547 100644 --- a/content/browser/renderer_host/render_widget_host.h +++ b/content/browser/renderer_host/render_widget_host.h @@ -691,8 +691,6 @@ class CONTENT_EXPORT RenderWidgetHostImpl : public RenderWidgetHost, void OnMsgUnlockMouse(); #if defined(OS_POSIX) || defined(USE_AURA) - void OnMsgGetScreenInfo(gfx::NativeViewId view, - WebKit::WebScreenInfo* results); void OnMsgGetWindowRect(gfx::NativeViewId window_id, gfx::Rect* results); void OnMsgGetRootWindowRect(gfx::NativeViewId window_id, gfx::Rect* results); #endif diff --git a/content/common/view_messages.h b/content/common/view_messages.h index 851dde9..0062c41 100644 --- a/content/common/view_messages.h +++ b/content/common/view_messages.h @@ -627,6 +627,9 @@ IPC_STRUCT_BEGIN(ViewMsg_New_Params) // existing navigation that might be loaded in the view. Page IDs are unique // to a view and are only updated by the renderer after this initial value. IPC_STRUCT_MEMBER(int32, next_page_id) + + // The properties of the screen associated with the view. + IPC_STRUCT_MEMBER(WebKit::WebScreenInfo, screen_info) IPC_STRUCT_END() // Messages sent from the browser to the renderer. @@ -1648,13 +1651,6 @@ IPC_SYNC_MESSAGE_CONTROL1_3(ViewHostMsg_LoadFont, uint32 /* font id */) #endif -// Returns WebScreenInfo corresponding to the view. -// TODO(shess): Provide a mapping from reply_msg->routing_id() to -// HWND so that we can eliminate the NativeViewId parameter. -IPC_SYNC_MESSAGE_ROUTED1_1(ViewHostMsg_GetScreenInfo, - gfx::NativeViewId /* view */, - WebKit::WebScreenInfo /* results */) - // Send the tooltip text for the current mouse position to the browser. IPC_MESSAGE_ROUTED2(ViewHostMsg_SetTooltipText, string16 /* tooltip text string */, diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc index 03f00ac..1f5216e 100644 --- a/content/renderer/render_thread_impl.cc +++ b/content/renderer/render_thread_impl.cc @@ -859,7 +859,8 @@ void RenderThreadImpl::OnCreateNewView(const ViewMsg_New_Params& params) { params.surface_id, params.session_storage_namespace_id, params.frame_name, - params.next_page_id); + params.next_page_id, + params.screen_info); } GpuChannelHost* RenderThreadImpl::EstablishGpuChannelSync( diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc index 0ef8d4a..2bdb745 100644 --- a/content/renderer/render_view_impl.cc +++ b/content/renderer/render_view_impl.cc @@ -418,8 +418,9 @@ RenderViewImpl::RenderViewImpl( int32 surface_id, int64 session_storage_namespace_id, const string16& frame_name, - int32 next_page_id) - : RenderWidget(WebKit::WebPopupTypeNone), + int32 next_page_id, + const WebKit::WebScreenInfo& screen_info) + : RenderWidget(WebKit::WebPopupTypeNone, screen_info), webkit_preferences_(webkit_prefs), send_content_state_immediately_(false), enabled_bindings_(0), @@ -617,7 +618,8 @@ RenderViewImpl* RenderViewImpl::Create( int32 surface_id, int64 session_storage_namespace_id, const string16& frame_name, - int32 next_page_id) { + int32 next_page_id, + const WebKit::WebScreenInfo& screen_info) { DCHECK(routing_id != MSG_ROUTING_NONE); return new RenderViewImpl( parent_hwnd, @@ -629,7 +631,8 @@ RenderViewImpl* RenderViewImpl::Create( surface_id, session_storage_namespace_id, frame_name, - next_page_id); // adds reference + next_page_id, + screen_info); } WebKit::WebPeerConnectionHandler* RenderViewImpl::CreatePeerConnectionHandler( @@ -1468,7 +1471,8 @@ WebView* RenderViewImpl::createView( surface_id, cloned_session_storage_namespace_id, frame_name, - 1); + 1, + screen_info_); view->opened_by_user_gesture_ = params.user_gesture; // Record whether the creator frame is trying to suppress the opener field. @@ -1488,7 +1492,8 @@ WebView* RenderViewImpl::createView( } WebWidget* RenderViewImpl::createPopupMenu(WebKit::WebPopupType popup_type) { - RenderWidget* widget = RenderWidget::Create(routing_id_, popup_type); + RenderWidget* widget = + RenderWidget::Create(routing_id_, popup_type, screen_info_); return widget->webwidget(); } diff --git a/content/renderer/render_view_impl.h b/content/renderer/render_view_impl.h index f912804..fb2621f 100644 --- a/content/renderer/render_view_impl.h +++ b/content/renderer/render_view_impl.h @@ -184,7 +184,8 @@ class RenderViewImpl : public RenderWidget, int32 surface_id, int64 session_storage_namespace_id, const string16& frame_name, - int32 next_page_id); + int32 next_page_id, + const WebKit::WebScreenInfo& screen_info); // Returns the RenderViewImpl containing the given WebView. CONTENT_EXPORT static RenderViewImpl* FromWebView(WebKit::WebView* webview); @@ -720,7 +721,8 @@ class RenderViewImpl : public RenderWidget, int32 surface_id, int64 session_storage_namespace_id, const string16& frame_name, - int32 next_page_id); + int32 next_page_id, + const WebKit::WebScreenInfo& screen_info); // Do not delete directly. This class is reference counted. virtual ~RenderViewImpl(); diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc index b4d7159..ca73dfe 100644 --- a/content/renderer/render_widget.cc +++ b/content/renderer/render_widget.cc @@ -70,7 +70,8 @@ using WebKit::WebVector; using WebKit::WebWidget; using content::RenderThread; -RenderWidget::RenderWidget(WebKit::WebPopupType popup_type) +RenderWidget::RenderWidget(WebKit::WebPopupType popup_type, + const WebKit::WebScreenInfo& screen_info) : routing_id_(MSG_ROUTING_NONE), surface_id_(0), webwidget_(NULL), @@ -101,6 +102,7 @@ RenderWidget::RenderWidget(WebKit::WebPopupType popup_type) animation_update_pending_(false), animation_task_posted_(false), invalidation_task_posted_(false), + screen_info_(screen_info), invert_(false) { RenderProcess::current()->AddRefProcess(); DCHECK(RenderThread::Get()); @@ -122,9 +124,11 @@ RenderWidget::~RenderWidget() { // static RenderWidget* RenderWidget::Create(int32 opener_id, - WebKit::WebPopupType popup_type) { + WebKit::WebPopupType popup_type, + const WebKit::WebScreenInfo& screen_info) { DCHECK(opener_id != MSG_ROUTING_NONE); - scoped_refptr<RenderWidget> widget(new RenderWidget(popup_type)); + scoped_refptr<RenderWidget> widget( + new RenderWidget(popup_type, screen_info)); widget->Init(opener_id); // adds reference return widget; } @@ -1586,19 +1590,7 @@ bool RenderWidget::CanComposeInline() { } WebScreenInfo RenderWidget::screenInfo() { - WebScreenInfo results; - if (host_window_set_) - Send(new ViewHostMsg_GetScreenInfo(routing_id_, host_window_, &results)); - else { - DLOG(WARNING) << "Unable to retrieve screen information, no host window"; -#if defined(USE_AURA) - // TODO(backer): Remove this a temporary workaround for crbug.com/111929 - // once we get a proper fix. - results.availableRect.width = 1000; - results.availableRect.height = 1000; -#endif - } - return results; + return screen_info_; } void RenderWidget::resetInputMethod() { diff --git a/content/renderer/render_widget.h b/content/renderer/render_widget.h index d1968e0..6adf3e8 100644 --- a/content/renderer/render_widget.h +++ b/content/renderer/render_widget.h @@ -76,7 +76,8 @@ class CONTENT_EXPORT RenderWidget // Creates a new RenderWidget. The opener_id is the routing ID of the // RenderView that this widget lives inside. static RenderWidget* Create(int32 opener_id, - WebKit::WebPopupType popup_type); + WebKit::WebPopupType popup_type, + const WebKit::WebScreenInfo& screen_info); // Creates a WebWidget based on the popup type. static WebKit::WebWidget* CreateWebWidget(RenderWidget* render_widget); @@ -157,7 +158,8 @@ class CONTENT_EXPORT RenderWidget // For unit tests. friend class RenderWidgetTest; - explicit RenderWidget(WebKit::WebPopupType popup_type); + RenderWidget(WebKit::WebPopupType popup_type, + const WebKit::WebScreenInfo& screen_info); virtual ~RenderWidget(); // Initializes this view with the given opener. CompleteInit must be called @@ -496,6 +498,9 @@ class CONTENT_EXPORT RenderWidget // case NULL is added to the queue. std::deque<ViewHostMsg_UpdateRect*> updates_pending_swap_; + // Properties of the screen hosting this RenderWidget instance. + WebKit::WebScreenInfo screen_info_; + // Set to true if we should invert all pixels. bool invert_; diff --git a/content/renderer/render_widget_fullscreen.cc b/content/renderer/render_widget_fullscreen.cc index f71b780..7916889 100644 --- a/content/renderer/render_widget_fullscreen.cc +++ b/content/renderer/render_widget_fullscreen.cc @@ -46,5 +46,5 @@ void RenderWidgetFullscreen::show(WebKit::WebNavigationPolicy) { } RenderWidgetFullscreen::RenderWidgetFullscreen() - : RenderWidget(WebKit::WebPopupTypeNone) { + : RenderWidget(WebKit::WebPopupTypeNone, WebKit::WebScreenInfo()) { } diff --git a/content/test/render_view_test.cc b/content/test/render_view_test.cc index 00a3456..4a78be6 100644 --- a/content/test/render_view_test.cc +++ b/content/test/render_view_test.cc @@ -14,6 +14,7 @@ #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebInputEvent.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebKit.h" +#include "third_party/WebKit/Source/WebKit/chromium/public/WebScreenInfo.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebScriptController.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebScriptSource.h" #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebURLRequest.h" @@ -156,7 +157,8 @@ void RenderViewTest::SetUp() { kSurfaceId, kInvalidSessionStorageNamespaceId, string16(), - 1); + 1, + WebKit::WebScreenInfo()); view->AddRef(); view_ = view; |