| Index: chrome/browser/android/compositor/layer/toolbar_layer.cc | 
| diff --git a/chrome/browser/android/compositor/layer/toolbar_layer.cc b/chrome/browser/android/compositor/layer/toolbar_layer.cc | 
| index 4015f17e84c8d495986e7b1605f88da2cfd42e1b..e2389b8b0f10ef5e290a04bfe1f279e4726d624f 100644 | 
| --- a/chrome/browser/android/compositor/layer/toolbar_layer.cc | 
| +++ b/chrome/browser/android/compositor/layer/toolbar_layer.cc | 
| @@ -8,6 +8,7 @@ | 
| #include "cc/layers/solid_color_layer.h" | 
| #include "cc/layers/ui_resource_layer.h" | 
| #include "cc/resources/scoped_ui_resource.h" | 
| +#include "chrome/browser/android/compositor/resources/toolbar_resource.h" | 
| #include "content/public/browser/android/compositor.h" | 
| #include "third_party/skia/include/core/SkColor.h" | 
| #include "ui/android/resources/nine_patch_resource.h" | 
| @@ -37,9 +38,8 @@ void ToolbarLayer::PushResource( | 
| bool show_debug, | 
| bool clip_shadow, | 
| bool browser_controls_at_bottom) { | 
| -  // TODO(khushalsagar): This should not be a nine-patch resource. | 
| -  ui::NinePatchResource* resource = | 
| -      ui::NinePatchResource::From(resource_manager_->GetResource( | 
| +  ToolbarResource* resource = | 
| +      ToolbarResource::From(resource_manager_->GetResource( | 
| ui::ANDROID_RESOURCE_TYPE_DYNAMIC, toolbar_resource_id)); | 
|  | 
| // Ensure the toolbar resource is available before making the layer visible. | 
| @@ -47,63 +47,50 @@ void ToolbarLayer::PushResource( | 
| if (!resource) | 
| return; | 
|  | 
| -  // This layer effectively draws over the space it takes for shadows.  Set the | 
| -  // bounds to the non-shadow size so that other things can properly line up. | 
| -  // Padding height does not include the height of the tabstrip, so we add | 
| -  // it explicitly by adding y offset. | 
| -  gfx::Size size = | 
| -      gfx::Size(resource->padding().width(), | 
| -                resource->padding().height() + resource->padding().y()); | 
| -  layer_->SetBounds(size); | 
| +  // This layer effectively draws over the space the resource takes for shadows. | 
| +  // Set the bounds to the non-shadow size so that other things can properly | 
| +  // line up. | 
| +  gfx::Size toolbar_bounds = | 
| +      gfx::Size(resource->size().width(), | 
| +                resource->size().height() - resource->shadow_height()); | 
| +  layer_->SetBounds(toolbar_bounds); | 
|  | 
| // The toolbar_root_ contains all of the layers that make up the toolbar. The | 
| // toolbar_root_ is moved around inside of layer_ to allow appropriate | 
| // clipping of the shadow. | 
| -  toolbar_root_->SetBounds(resource->padding().size()); | 
| - | 
| -  gfx::PointF root_layer_position(0, y_offset); | 
| -  gfx::PointF background_position(resource->padding().origin()); | 
| +  toolbar_root_->SetBounds(toolbar_bounds); | 
| if (browser_controls_at_bottom) { | 
| -    // The toolbar's position as if it were completely shown. | 
| -    float base_toolbar_y = window_height - resource->padding().size().height(); | 
| -    float layer_offset = | 
| -        resource->size().height() - resource->padding().size().height(); | 
| - | 
| -    root_layer_position.set_y(base_toolbar_y + y_offset); | 
| -    toolbar_root_->SetPosition(gfx::PointF(0, -layer_offset)); | 
| -    background_position.set_y(layer_offset); | 
| +    // If the browser controld are at bottom, this means that the shadow is at | 
| +    // top of the container, i.e., at the top of the resource bitmap, move the | 
| +    // toolbar up by the amount of the shadow to allow clipping if necessary. | 
| +    toolbar_root_->SetPosition(gfx::PointF(0, -resource->shadow_height())); | 
| } | 
| -  layer_->SetPosition(root_layer_position); | 
|  | 
| -  toolbar_background_layer_->SetBounds(resource->padding().size()); | 
| -  toolbar_background_layer_->SetPosition(background_position); | 
| +  toolbar_background_layer_->SetBounds(resource->toolbar_rect().size()); | 
| +  toolbar_background_layer_->SetPosition( | 
| +      gfx::PointF(resource->toolbar_rect().origin())); | 
| toolbar_background_layer_->SetBackgroundColor(toolbar_background_color); | 
|  | 
| -  bool url_bar_visible = (resource->aperture().width() != 0); | 
| +  bool url_bar_visible = (resource->location_bar_content_rect().width() != 0); | 
| url_bar_background_layer_->SetHideLayerAndSubtree(!url_bar_visible); | 
| if (url_bar_visible) { | 
| ui::NinePatchResource* url_bar_background_resource = | 
| ui::NinePatchResource::From(resource_manager_->GetResource( | 
| ui::ANDROID_RESOURCE_TYPE_STATIC, url_bar_background_resource_id)); | 
| -    gfx::Size url_bar_size(resource->aperture().width() + | 
| -                               url_bar_background_resource->size().width() - | 
| -                               url_bar_background_resource->padding().width(), | 
| -                           resource->aperture().height() + | 
| -                               url_bar_background_resource->size().height() - | 
| -                               url_bar_background_resource->padding().height()); | 
| -    gfx::Rect url_bar_border( | 
| -        url_bar_background_resource->Border(url_bar_size)); | 
| -    gfx::PointF url_bar_position = gfx::PointF( | 
| -        resource->aperture().x() - url_bar_background_resource->padding().x(), | 
| -        resource->aperture().y() - url_bar_background_resource->padding().y()); | 
|  | 
| -    url_bar_background_layer_->SetUIResourceId( | 
| -        url_bar_background_resource->ui_resource()->id()); | 
| -    url_bar_background_layer_->SetBorder(url_bar_border); | 
| +    gfx::Size draw_size(url_bar_background_resource->DrawSize( | 
| +        resource->location_bar_content_rect().size())); | 
| +    gfx::Rect border(url_bar_background_resource->Border(draw_size)); | 
| +    gfx::PointF position(url_bar_background_resource->DrawPosition( | 
| +        resource->location_bar_content_rect().origin())); | 
| + | 
| +    url_bar_background_layer_->SetBounds(draw_size); | 
| +    url_bar_background_layer_->SetPosition(position); | 
| +    url_bar_background_layer_->SetBorder(border); | 
| url_bar_background_layer_->SetAperture( | 
| url_bar_background_resource->aperture()); | 
| -    url_bar_background_layer_->SetBounds(url_bar_size); | 
| -    url_bar_background_layer_->SetPosition(url_bar_position); | 
| +    url_bar_background_layer_->SetUIResourceId( | 
| +        url_bar_background_resource->ui_resource()->id()); | 
| url_bar_background_layer_->SetOpacity(url_bar_alpha); | 
| } | 
|  | 
| @@ -114,8 +101,9 @@ void ToolbarLayer::PushResource( | 
|  | 
| anonymize_layer_->SetHideLayerAndSubtree(!anonymize); | 
| if (anonymize) { | 
| -    anonymize_layer_->SetPosition(gfx::PointF(resource->aperture().origin())); | 
| -    anonymize_layer_->SetBounds(resource->aperture().size()); | 
| +    anonymize_layer_->SetPosition( | 
| +        gfx::PointF(resource->location_bar_content_rect().origin())); | 
| +    anonymize_layer_->SetBounds(resource->location_bar_content_rect().size()); | 
| anonymize_layer_->SetBackgroundColor(toolbar_textbox_background_color); | 
| } | 
|  | 
| @@ -124,6 +112,14 @@ void ToolbarLayer::PushResource( | 
| layer_->AddChild(debug_layer_); | 
| else if (!show_debug && debug_layer_->parent()) | 
| debug_layer_->RemoveFromParent(); | 
| + | 
| +  gfx::PointF root_layer_position(0, y_offset); | 
| +  if (browser_controls_at_bottom) { | 
| +    // The toolbar's position as if it were completely shown. | 
| +    float base_toolbar_y = window_height - toolbar_bounds.height(); | 
| +    root_layer_position.set_y(base_toolbar_y + y_offset); | 
| +  } | 
| +  layer_->SetPosition(root_layer_position); | 
| } | 
|  | 
| void ToolbarLayer::UpdateProgressBar(int progress_bar_x, | 
|  |