Reland r124453. The change was reverted in 140030 to be merged with M20.

Original CL:
---
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: https://chromiumcodereview.appspot.com/10536012

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@140691 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc
index 0fa18e04..14b716e 100644
--- a/content/renderer/render_widget.cc
+++ b/content/renderer/render_widget.cc
@@ -72,6 +72,7 @@
 using content::RenderThread;
 
 RenderWidget::RenderWidget(WebKit::WebPopupType popup_type,
+                           const WebKit::WebScreenInfo& screen_info,
                            bool swapped_out)
     : routing_id_(MSG_ROUTING_NONE),
       surface_id_(0),
@@ -103,6 +104,7 @@
       is_accelerated_compositing_active_(false),
       animation_update_pending_(false),
       invalidation_task_posted_(false),
+      screen_info_(screen_info),
       invert_(false) {
   if (!swapped_out)
     RenderProcess::current()->AddRefProcess();
@@ -125,10 +127,11 @@
 
 // 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, false));
+      new RenderWidget(popup_type, screen_info, false));
   widget->Init(opener_id);  // adds reference
   return widget;
 }
@@ -1663,19 +1666,7 @@
 }
 
 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() {