| Index: chrome/browser/renderer_host/render_widget_host_view_gtk.cc
 | 
| diff --git a/chrome/browser/renderer_host/render_widget_host_view_gtk.cc b/chrome/browser/renderer_host/render_widget_host_view_gtk.cc
 | 
| index e4c460ced821340a35a8832f3dc68c6f62808749..56b64ad84f97a33bd49e3c1df5d4f9f942407e9b 100644
 | 
| --- a/chrome/browser/renderer_host/render_widget_host_view_gtk.cc
 | 
| +++ b/chrome/browser/renderer_host/render_widget_host_view_gtk.cc
 | 
| @@ -94,6 +94,8 @@ class RenderWidgetHostViewGtkWidget {
 | 
|   private:
 | 
|    static gboolean SizeAllocate(GtkWidget* widget, GtkAllocation* allocation,
 | 
|                                 RenderWidgetHostViewGtk* host_view) {
 | 
| +    host_view->requested_size_ = gfx::Size(allocation->width,
 | 
| +                                           allocation->height);
 | 
|      host_view->GetRenderWidgetHost()->WasResized();
 | 
|      return FALSE;
 | 
|    }
 | 
| @@ -386,23 +388,21 @@ void RenderWidgetHostViewGtk::WasHidden() {
 | 
|  
 | 
|  void RenderWidgetHostViewGtk::SetSize(const gfx::Size& size) {
 | 
|    // This is called when webkit has sent us a Move message.
 | 
| -  // If we are a popup, we want to handle this.
 | 
| -  // TODO(estade): are there other situations where we want to respect the
 | 
| -  // request?
 | 
| -#if !defined(TOOLKIT_VIEWS)
 | 
| +  int width = std::min(size.width(), kMaxWindowWidth);
 | 
| +  int height = std::min(size.height(), kMaxWindowHeight);
 | 
|    if (parent_) {
 | 
| -#else
 | 
| -  // TOOLKIT_VIEWS' resize logic flow matches windows. When the container widget
 | 
| -  // is resized, it calls RWH::WasSized, which sizes this widget using SetSize.
 | 
| -  // TODO(estade): figure out if the logic flow here can be normalized across
 | 
| -  //               platforms
 | 
| +    // We're a popup, honor the size request.
 | 
| +    gtk_widget_set_size_request(view_.get(), width, height);
 | 
| +  } else {
 | 
| +#if defined(TOOLKIT_VIEWS)
 | 
| +    // TOOLKIT_VIEWS' resize logic flow matches windows. so we go ahead and
 | 
| +    // size the widget.  In GTK+, the size of the widget is determined by it's
 | 
| +    // children.
 | 
| +    gtk_widget_set_size_request(view_.get(), width, height);
 | 
|  #endif
 | 
| -    gtk_widget_set_size_request(view_.get(),
 | 
| -                                std::min(size.width(), kMaxWindowWidth),
 | 
| -                                std::min(size.height(), kMaxWindowHeight));
 | 
| -#if !defined(TOOLKIT_VIEWS)
 | 
| +    requested_size_ = gfx::Size(width, height);
 | 
| +    host_->WasResized();
 | 
|    }
 | 
| -#endif
 | 
|  }
 | 
|  
 | 
|  gfx::NativeView RenderWidgetHostViewGtk::GetNativeView() {
 | 
| @@ -444,7 +444,9 @@ void RenderWidgetHostViewGtk::Hide() {
 | 
|  
 | 
|  gfx::Rect RenderWidgetHostViewGtk::GetViewBounds() const {
 | 
|    GtkAllocation* alloc = &view_.get()->allocation;
 | 
| -  return gfx::Rect(alloc->x, alloc->y, alloc->width, alloc->height);
 | 
| +  return gfx::Rect(alloc->x, alloc->y,
 | 
| +                   requested_size_.width(),
 | 
| +                   requested_size_.height());
 | 
|  }
 | 
|  
 | 
|  void RenderWidgetHostViewGtk::UpdateCursor(const WebCursor& cursor) {
 | 
| 
 |