Expose a concept of bottom overdraw amount for cc drawing viewport.

When the physical output surface is larger than the visible viewport,
we need to subtract the overdraw to ensure you can scroll to the
full content of the page.

Resizing the output surface is expensive on mobile devices, so we
minimize resizes and deal with this size mismatch.

BUG=161303, 221995

Review URL: https://chromiumcodereview.appspot.com/12437023

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@190142 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc
index e6265584..23511ac 100644
--- a/content/renderer/render_widget.cc
+++ b/content/renderer/render_widget.cc
@@ -142,6 +142,7 @@
       opener_id_(MSG_ROUTING_NONE),
       init_complete_(false),
       current_paint_buf_(NULL),
+      overdraw_bottom_height_(0.f),
       next_paint_flags_(0),
       filtered_time_per_frame_(0.0f),
       update_reply_pending_(false),
@@ -346,6 +347,7 @@
 
 void RenderWidget::Resize(const gfx::Size& new_size,
                           const gfx::Size& physical_backing_size,
+                          float overdraw_bottom_height,
                           const gfx::Rect& resizer_rect,
                           bool is_fullscreen,
                           ResizeAck resize_ack) {
@@ -357,10 +359,13 @@
   if (!webwidget_)
     return;
 
-  if (compositor_)
+  if (compositor_) {
     compositor_->setViewportSize(new_size, physical_backing_size);
+    compositor_->SetOverdrawBottomHeight(overdraw_bottom_height);
+  }
 
   physical_backing_size_ = physical_backing_size;
+  overdraw_bottom_height_ = overdraw_bottom_height;
   resizer_rect_ = resizer_rect;
 
   // NOTE: We may have entered fullscreen mode without changing our size.
@@ -435,10 +440,11 @@
 
 void RenderWidget::OnResize(const gfx::Size& new_size,
                             const gfx::Size& physical_backing_size,
+                            float overdraw_bottom_height,
                             const gfx::Rect& resizer_rect,
                             bool is_fullscreen) {
-  Resize(new_size, physical_backing_size, resizer_rect, is_fullscreen,
-         SEND_RESIZE_ACK);
+  Resize(new_size, physical_backing_size, overdraw_bottom_height, resizer_rect,
+         is_fullscreen, SEND_RESIZE_ACK);
 }
 
 void RenderWidget::OnChangeResizeRect(const gfx::Rect& resizer_rect) {
@@ -1624,7 +1630,8 @@
       SetPendingWindowRect(pos);
     } else {
       WebSize new_size(pos.width, pos.height);
-      Resize(new_size, new_size, WebRect(), is_fullscreen_, NO_RESIZE_ACK);
+      Resize(new_size, new_size, overdraw_bottom_height_,
+             WebRect(), is_fullscreen_, NO_RESIZE_ACK);
       view_screen_rect_ = pos;
       window_screen_rect_ = pos;
     }