summaryrefslogtreecommitdiffstats
path: root/content
diff options
context:
space:
mode:
authorfsamuel@chromium.org <fsamuel@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-01 19:46:41 +0000
committerfsamuel@chromium.org <fsamuel@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-01 19:46:41 +0000
commit6fd35b7c94a0629832f723591a335d6c91ba33e7 (patch)
tree89eebb17f7004be5de1d7b9ca93335051ee33c9a /content
parent1234f0a554182a3cb6bbf0b5262f9e8d87a636e6 (diff)
downloadchromium_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.cc1
-rw-r--r--content/browser/renderer_host/render_message_filter.h2
-rw-r--r--content/browser/renderer_host/render_message_filter_win.cc8
-rw-r--r--content/browser/renderer_host/render_view_host.cc17
-rw-r--r--content/browser/renderer_host/render_widget_host.cc9
-rw-r--r--content/browser/renderer_host/render_widget_host.h2
-rw-r--r--content/common/view_messages.h10
-rw-r--r--content/renderer/render_thread_impl.cc3
-rw-r--r--content/renderer/render_view_impl.cc17
-rw-r--r--content/renderer/render_view_impl.h6
-rw-r--r--content/renderer/render_widget.cc24
-rw-r--r--content/renderer/render_widget.h9
-rw-r--r--content/renderer/render_widget_fullscreen.cc2
-rw-r--r--content/test/render_view_test.cc4
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(&params.screen_info);
+ } else {
+ content::RenderWidgetHostViewPort::GetDefaultScreenInfo(
+ &params.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;