| Index: views/controls/progress_bar.cc
 | 
| diff --git a/views/controls/progress_bar.cc b/views/controls/progress_bar.cc
 | 
| index 8c6f0d0b852fe408c1d81d4dcdc5016388919925..7e4aecfb12ee5caac9a748159385bc24f52ab21d 100644
 | 
| --- a/views/controls/progress_bar.cc
 | 
| +++ b/views/controls/progress_bar.cc
 | 
| @@ -26,54 +26,82 @@ const int kCornerRadius = 3;
 | 
|  // Progress bar's border width
 | 
|  const int kBorderWidth = 1;
 | 
|  
 | 
| -static void AddRoundRectPath(int x, int y,
 | 
| -                             int w, int h,
 | 
| -                             int corner_radius,
 | 
| -                             SkPath* path) {
 | 
| +static void AddRoundRectPathWithPadding(int x, int y,
 | 
| +                                        int w, int h,
 | 
| +                                        int corner_radius,
 | 
| +                                        SkScalar padding,
 | 
| +                                        SkPath* path) {
 | 
|    DCHECK(path);
 | 
|    if (path == NULL)
 | 
|      return;
 | 
| -  SkScalar half = SkIntToScalar(1) / 2;
 | 
|    SkRect rect;
 | 
|    rect.set(
 | 
| -      SkIntToScalar(x) + half, SkIntToScalar(y) + half,
 | 
| -      SkIntToScalar(x + w) - half, SkIntToScalar(y + h) - half);
 | 
| +      SkIntToScalar(x) + padding, SkIntToScalar(y) + padding,
 | 
| +      SkIntToScalar(x + w) - padding, SkIntToScalar(y + h) - padding);
 | 
|    path->addRoundRect(
 | 
|        rect,
 | 
| -      SkIntToScalar(corner_radius - half),
 | 
| -      SkIntToScalar(corner_radius - half));
 | 
| +      SkIntToScalar(corner_radius - padding),
 | 
| +      SkIntToScalar(corner_radius - padding));
 | 
| +}
 | 
| +
 | 
| +static void AddRoundRectPath(int x, int y,
 | 
| +                             int w, int h,
 | 
| +                             int corner_radius,
 | 
| +                             SkPath* path) {
 | 
| +  static const SkScalar half = SkIntToScalar(1) / 2;
 | 
| +  AddRoundRectPathWithPadding(x, y, w, h, corner_radius, half, path);
 | 
|  }
 | 
|  
 | 
|  static void FillRoundRect(gfx::Canvas* canvas,
 | 
|                            int x, int y,
 | 
|                            int w, int h,
 | 
|                            int corner_radius,
 | 
| -                          SkColor gradient_start_color,
 | 
| -                          SkColor gradient_end_color,
 | 
| +                          const SkColor colors[],
 | 
| +                          const SkScalar points[],
 | 
| +                          int count,
 | 
|                            bool gradient_horizontal) {
 | 
|    SkPath path;
 | 
|    AddRoundRectPath(x, y, w, h, corner_radius, &path);
 | 
|    SkPaint paint;
 | 
|    paint.setStyle(SkPaint::kFill_Style);
 | 
|    paint.setFlags(SkPaint::kAntiAlias_Flag);
 | 
| +
 | 
| +  SkPoint p[2];
 | 
| +  p[0].set(SkIntToScalar(x), SkIntToScalar(y));
 | 
| +  if (gradient_horizontal) {
 | 
| +    p[1].set(SkIntToScalar(x + w), SkIntToScalar(y));
 | 
| +  } else {
 | 
| +    p[1].set(SkIntToScalar(x), SkIntToScalar(y + h));
 | 
| +  }
 | 
| +  SkShader* s = SkGradientShader::CreateLinear(
 | 
| +      p, colors, points, count, SkShader::kClamp_TileMode, NULL);
 | 
| +  paint.setShader(s);
 | 
| +  // Need to unref shader, otherwise never deleted.
 | 
| +  s->unref();
 | 
| +
 | 
| +  canvas->AsCanvasSkia()->drawPath(path, paint);
 | 
| +}
 | 
| +
 | 
| +static void FillRoundRect(gfx::Canvas* canvas,
 | 
| +                          int x, int y,
 | 
| +                          int w, int h,
 | 
| +                          int corner_radius,
 | 
| +                          SkColor gradient_start_color,
 | 
| +                          SkColor gradient_end_color,
 | 
| +                          bool gradient_horizontal) {
 | 
|    if (gradient_start_color != gradient_end_color) {
 | 
| -    SkPoint p[2];
 | 
| -    p[0].set(SkIntToScalar(x), SkIntToScalar(y));
 | 
| -    if (gradient_horizontal) {
 | 
| -      p[1].set(SkIntToScalar(x + w), SkIntToScalar(y));
 | 
| -    } else {
 | 
| -      p[1].set(SkIntToScalar(x), SkIntToScalar(y + h));
 | 
| -    }
 | 
|      SkColor colors[2] = { gradient_start_color, gradient_end_color };
 | 
| -    SkShader* s = SkGradientShader::CreateLinear(
 | 
| -        p, colors, NULL, 2, SkShader::kClamp_TileMode, NULL);
 | 
| -    paint.setShader(s);
 | 
| -    // Need to unref shader, otherwise never deleted.
 | 
| -    s->unref();
 | 
| +    FillRoundRect(canvas, x, y, w, h, corner_radius,
 | 
| +                  colors, NULL, 2, gradient_horizontal);
 | 
|    } else {
 | 
| +    SkPath path;
 | 
| +    AddRoundRectPath(x, y, w, h, corner_radius, &path);
 | 
| +    SkPaint paint;
 | 
| +    paint.setStyle(SkPaint::kFill_Style);
 | 
| +    paint.setFlags(SkPaint::kAntiAlias_Flag);
 | 
|      paint.setColor(gradient_start_color);
 | 
| +    canvas->AsCanvasSkia()->drawPath(path, paint);
 | 
|    }
 | 
| -  canvas->AsCanvasSkia()->drawPath(path, paint);
 | 
|  }
 | 
|  
 | 
|  static void StrokeRoundRect(gfx::Canvas* canvas,
 | 
| @@ -114,6 +142,103 @@ gfx::Size ProgressBar::GetPreferredSize() {
 | 
|  }
 | 
|  
 | 
|  void ProgressBar::Paint(gfx::Canvas* canvas) {
 | 
| +#if defined(OS_CHROMEOS)
 | 
| +  const SkColor background_colors[] = {
 | 
| +    SkColorSetRGB(0xBB, 0xBB, 0xBB),
 | 
| +    SkColorSetRGB(0xE7, 0xE7, 0xE7),
 | 
| +    SkColorSetRGB(0xFE, 0xFE, 0xFE)
 | 
| +  };
 | 
| +
 | 
| +  const SkScalar background_points[] = {
 | 
| +    SkDoubleToScalar(0),
 | 
| +    SkDoubleToScalar(0.1),
 | 
| +    SkDoubleToScalar(1)
 | 
| +  };
 | 
| +  const SkColor background_border_color = SkColorSetRGB(0xA1, 0xA1, 0xA1);
 | 
| +
 | 
| +  // Draw background.
 | 
| +  FillRoundRect(canvas,
 | 
| +                0, 0, width(), height(),
 | 
| +                kCornerRadius,
 | 
| +                background_colors,
 | 
| +                background_points,
 | 
| +                arraysize(background_colors),
 | 
| +                false);
 | 
| +  StrokeRoundRect(canvas,
 | 
| +                  0, 0,
 | 
| +                  width(), height(),
 | 
| +                  kCornerRadius,
 | 
| +                  background_border_color,
 | 
| +                  kBorderWidth);
 | 
| +
 | 
| +  if (progress_ * width() > 1) {
 | 
| +    int progress_width = progress_ * width() / kMaxProgress;
 | 
| +
 | 
| +    bool enabled = IsEnabled();
 | 
| +
 | 
| +    const SkColor bar_color_start = enabled ?
 | 
| +        SkColorSetRGB(100, 116, 147) :
 | 
| +        SkColorSetRGB(229, 232, 237);
 | 
| +    const SkColor bar_color_end = enabled ?
 | 
| +        SkColorSetRGB(65, 73, 87) :
 | 
| +        SkColorSetRGB(224, 225, 227);
 | 
| +
 | 
| +    const SkColor bar_outer_color = enabled ?
 | 
| +        SkColorSetRGB(0x4A, 0x4A, 0x4A) :
 | 
| +        SkColorSetARGB(0x80, 0x4A, 0x4A, 0x4A);
 | 
| +
 | 
| +    const SkColor bar_inner_border_color =
 | 
| +        SkColorSetARGB(0x3F, 0xFF, 0xFF, 0xFF);  // 0.25 white
 | 
| +    const SkColor bar_inner_shadow_color =
 | 
| +        SkColorSetARGB(0x54, 0xFF, 0xFF, 0xFF);  // 0.33 white
 | 
| +
 | 
| +    // Draw bar background
 | 
| +    FillRoundRect(canvas,
 | 
| +                  0, 0, progress_width, height(),
 | 
| +                  kCornerRadius,
 | 
| +                  bar_color_start,
 | 
| +                  bar_color_end,
 | 
| +                  false);
 | 
| +
 | 
| +    // Draw inner stroke and shadow if wide enough.
 | 
| +    if (progress_width > 2 * kBorderWidth) {
 | 
| +      canvas->AsCanvasSkia()->save();
 | 
| +
 | 
| +      SkPath inner_path;
 | 
| +      AddRoundRectPathWithPadding(
 | 
| +          0, 0, progress_width, height(),
 | 
| +          kCornerRadius,
 | 
| +          SkIntToScalar(kBorderWidth),
 | 
| +          &inner_path);
 | 
| +      canvas->AsCanvasSkia()->clipPath(inner_path);
 | 
| +
 | 
| +      // Draw bar inner stroke
 | 
| +      StrokeRoundRect(canvas,
 | 
| +                      kBorderWidth, kBorderWidth,
 | 
| +                      progress_width - 2 * kBorderWidth,
 | 
| +                      height() - 2 * kBorderWidth,
 | 
| +                      kCornerRadius - kBorderWidth,
 | 
| +                      bar_inner_border_color,
 | 
| +                      kBorderWidth);
 | 
| +
 | 
| +      // Draw bar inner shadow
 | 
| +      StrokeRoundRect(canvas,
 | 
| +                      0, kBorderWidth, progress_width, height(),
 | 
| +                      kCornerRadius,
 | 
| +                      bar_inner_shadow_color,
 | 
| +                      kBorderWidth);
 | 
| +
 | 
| +      canvas->AsCanvasSkia()->restore();
 | 
| +    }
 | 
| +
 | 
| +    // Draw bar stroke
 | 
| +    StrokeRoundRect(canvas,
 | 
| +                    0, 0, progress_width, height(),
 | 
| +                    kCornerRadius,
 | 
| +                    bar_outer_color,
 | 
| +                    kBorderWidth);
 | 
| +  }
 | 
| +#else
 | 
|    SkColor bar_color_start = SkColorSetRGB(81, 138, 223);
 | 
|    SkColor bar_color_end = SkColorSetRGB(51, 103, 205);
 | 
|    SkColor background_color_start = SkColorSetRGB(212, 212, 212);
 | 
| @@ -141,6 +266,7 @@ void ProgressBar::Paint(gfx::Canvas* canvas) {
 | 
|                    kCornerRadius,
 | 
|                    border_color,
 | 
|                    kBorderWidth);
 | 
| +#endif
 | 
|  }
 | 
|  
 | 
|  std::string ProgressBar::GetClassName() const {
 | 
| 
 |