Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / themes / browser_theme_pack.cc
index e8f5de1..fe2f645 100644 (file)
 #include "base/values.h"
 #include "chrome/browser/themes/theme_properties.h"
 #include "chrome/common/extensions/manifest_handlers/theme_handler.h"
+#include "components/crx_file/id_util.h"
 #include "content/public/browser/browser_thread.h"
-#include "extensions/common/id_util.h"
 #include "grit/theme_resources.h"
-#include "grit/ui_resources.h"
 #include "third_party/skia/include/core/SkCanvas.h"
 #include "ui/base/resource/data_pack.h"
 #include "ui/base/resource/resource_bundle.h"
@@ -34,6 +33,7 @@
 #include "ui/gfx/screen.h"
 #include "ui/gfx/size_conversions.h"
 #include "ui/gfx/skia_util.h"
+#include "ui/resources/grit/ui_resources.h"
 
 using content::BrowserThread;
 using extensions::Extension;
@@ -43,7 +43,7 @@ namespace {
 // Version number of the current theme pack. We just throw out and rebuild
 // theme packs that aren't int-equal to this. Increment this number if you
 // change default theme assets.
-const int kThemePackVersion = 33;
+const int kThemePackVersion = 35;
 
 // IDs that are in the DataPack won't clash with the positive integer
 // uint16. kHeaderID should always have the maximum value because we want the
@@ -96,6 +96,9 @@ struct PersistingImagesTable {
 
 // IDR_* resource names change whenever new resources are added; use persistent
 // IDs when storing to a cached pack.
+//
+// TODO(erg): The cocoa port is the last user of the IDR_*_[HP] variants. These
+// should be removed once the cocoa port no longer uses them.
 PersistingImagesTable kPersistingImages[] = {
   { PRS_THEME_FRAME, IDR_THEME_FRAME,
     "theme_frame" },
@@ -109,8 +112,10 @@ PersistingImagesTable kPersistingImages[] = {
     "theme_toolbar" },
   { PRS_THEME_TAB_BACKGROUND, IDR_THEME_TAB_BACKGROUND,
     "theme_tab_background" },
+#if !defined(OS_MACOSX)
   { PRS_THEME_TAB_BACKGROUND_INCOGNITO, IDR_THEME_TAB_BACKGROUND_INCOGNITO,
     "theme_tab_background_incognito" },
+#endif
   { PRS_THEME_TAB_BACKGROUND_V, IDR_THEME_TAB_BACKGROUND_V,
     "theme_tab_background_v"},
   { PRS_THEME_NTP_BACKGROUND, IDR_THEME_NTP_BACKGROUND,
@@ -162,37 +167,37 @@ PersistingImagesTable kPersistingImages[] = {
 };
 const size_t kPersistingImagesLength = arraysize(kPersistingImages);
 
-#if defined(OS_WIN)
+#if defined(USE_ASH) && !defined(OS_CHROMEOS)
 // Persistent theme ids for Windows.
-const int PRS_THEME_FRAME_WIN = 100;
-const int PRS_THEME_FRAME_INACTIVE_WIN = 101;
-const int PRS_THEME_FRAME_INCOGNITO_WIN = 102;
-const int PRS_THEME_FRAME_INCOGNITO_INACTIVE_WIN = 103;
-const int PRS_THEME_TOOLBAR_WIN = 104;
-const int PRS_THEME_TAB_BACKGROUND_WIN = 105;
-const int PRS_THEME_TAB_BACKGROUND_INCOGNITO_WIN = 106;
+const int PRS_THEME_FRAME_DESKTOP = 100;
+const int PRS_THEME_FRAME_INACTIVE_DESKTOP = 101;
+const int PRS_THEME_FRAME_INCOGNITO_DESKTOP = 102;
+const int PRS_THEME_FRAME_INCOGNITO_INACTIVE_DESKTOP = 103;
+const int PRS_THEME_TOOLBAR_DESKTOP = 104;
+const int PRS_THEME_TAB_BACKGROUND_DESKTOP = 105;
+const int PRS_THEME_TAB_BACKGROUND_INCOGNITO_DESKTOP = 106;
 
 // Persistent theme to resource id mapping for Windows AURA.
-PersistingImagesTable kPersistingImagesWinDesktopAura[] = {
-  { PRS_THEME_FRAME_WIN, IDR_THEME_FRAME_WIN,
+PersistingImagesTable kPersistingImagesDesktopAura[] = {
+  { PRS_THEME_FRAME_DESKTOP, IDR_THEME_FRAME_DESKTOP,
     "theme_frame" },
-  { PRS_THEME_FRAME_INACTIVE_WIN, IDR_THEME_FRAME_INACTIVE_WIN,
+  { PRS_THEME_FRAME_INACTIVE_DESKTOP, IDR_THEME_FRAME_INACTIVE_DESKTOP,
     "theme_frame_inactive" },
-  { PRS_THEME_FRAME_INCOGNITO_WIN, IDR_THEME_FRAME_INCOGNITO_WIN,
+  { PRS_THEME_FRAME_INCOGNITO_DESKTOP, IDR_THEME_FRAME_INCOGNITO_DESKTOP,
     "theme_frame_incognito" },
-  { PRS_THEME_FRAME_INCOGNITO_INACTIVE_WIN,
-    IDR_THEME_FRAME_INCOGNITO_INACTIVE_WIN,
+  { PRS_THEME_FRAME_INCOGNITO_INACTIVE_DESKTOP,
+    IDR_THEME_FRAME_INCOGNITO_INACTIVE_DESKTOP,
     "theme_frame_incognito_inactive" },
-  { PRS_THEME_TOOLBAR_WIN, IDR_THEME_TOOLBAR_WIN,
+  { PRS_THEME_TOOLBAR_DESKTOP, IDR_THEME_TOOLBAR_DESKTOP,
     "theme_toolbar" },
-  { PRS_THEME_TAB_BACKGROUND_WIN, IDR_THEME_TAB_BACKGROUND_WIN,
+  { PRS_THEME_TAB_BACKGROUND_DESKTOP, IDR_THEME_TAB_BACKGROUND_DESKTOP,
     "theme_tab_background" },
-  { PRS_THEME_TAB_BACKGROUND_INCOGNITO_WIN,
-    IDR_THEME_TAB_BACKGROUND_INCOGNITO_WIN,
+  { PRS_THEME_TAB_BACKGROUND_INCOGNITO_DESKTOP,
+    IDR_THEME_TAB_BACKGROUND_INCOGNITO_DESKTOP,
     "theme_tab_background_incognito" },
 };
-const size_t kPersistingImagesWinDesktopAuraLength =
-    arraysize(kPersistingImagesWinDesktopAura);
+const size_t kPersistingImagesDesktopAuraLength =
+    arraysize(kPersistingImagesDesktopAura);
 #endif
 
 int GetPersistentIDByNameHelper(const std::string& key,
@@ -221,10 +226,10 @@ int GetPersistentIDByIDR(int idr) {
       int prs_id = kPersistingImages[i].persistent_id;
       (*lookup_table)[idr] = prs_id;
     }
-#if defined(OS_WIN)
-    for (size_t i = 0; i < kPersistingImagesWinDesktopAuraLength; ++i) {
-      int idr = kPersistingImagesWinDesktopAura[i].idr_id;
-      int prs_id = kPersistingImagesWinDesktopAura[i].persistent_id;
+#if defined(USE_ASH) && !defined(OS_CHROMEOS)
+    for (size_t i = 0; i < kPersistingImagesDesktopAuraLength; ++i) {
+      int idr = kPersistingImagesDesktopAura[i].idr_id;
+      int prs_id = kPersistingImagesDesktopAura[i].persistent_id;
       (*lookup_table)[idr] = prs_id;
     }
 #endif
@@ -233,6 +238,24 @@ int GetPersistentIDByIDR(int idr) {
   return (it == lookup_table->end()) ? -1 : it->second;
 }
 
+// Returns the maximum persistent id.
+int GetMaxPersistentId() {
+  static int max_prs_id = -1;
+  if (max_prs_id == -1) {
+    for (size_t i = 0; i < kPersistingImagesLength; ++i) {
+      if (kPersistingImages[i].persistent_id > max_prs_id)
+        max_prs_id = kPersistingImages[i].persistent_id;
+    }
+#if defined(USE_ASH) && !defined(OS_CHROMEOS)
+    for (size_t i = 0; i < kPersistingImagesDesktopAuraLength; ++i) {
+      if (kPersistingImagesDesktopAura[i].persistent_id > max_prs_id)
+        max_prs_id = kPersistingImagesDesktopAura[i].persistent_id;
+    }
+#endif
+  }
+  return max_prs_id;
+}
+
 // Returns true if the scales in |input| match those in |expected|.
 // The order must match as the index is used in determining the raw id.
 bool InputScalesValid(const base::StringPiece& input,
@@ -244,7 +267,7 @@ bool InputScalesValid(const base::StringPiece& input,
   // Do a memcpy to avoid misaligned memory access.
   memcpy(scales.get(), input.data(), input.size());
   for (size_t index = 0; index < scales_size; ++index) {
-    if (scales[index] != ui::GetImageScale(expected[index]))
+    if (scales[index] != ui::GetScaleForScaleFactor(expected[index]))
       return false;
   }
   return true;
@@ -255,7 +278,7 @@ std::string GetScaleFactorsAsString(
     const std::vector<ui::ScaleFactor>& scale_factors) {
   scoped_ptr<float[]> scales(new float[scale_factors.size()]);
   for (size_t i = 0; i < scale_factors.size(); ++i)
-    scales[i] = ui::GetImageScale(scale_factors[i]);
+    scales[i] = ui::GetScaleForScaleFactor(scale_factors[i]);
   std::string out_string = std::string(
       reinterpret_cast<const char*>(scales.get()),
       scale_factors.size() * sizeof(float));
@@ -341,11 +364,11 @@ IntToIntTable kFrameTintMap[] = {
   { PRS_THEME_FRAME_INCOGNITO, ThemeProperties::TINT_FRAME_INCOGNITO },
   { PRS_THEME_FRAME_INCOGNITO_INACTIVE,
     ThemeProperties::TINT_FRAME_INCOGNITO_INACTIVE },
-#if defined(OS_WIN)
-  { PRS_THEME_FRAME_WIN, ThemeProperties::TINT_FRAME },
-  { PRS_THEME_FRAME_INACTIVE_WIN, ThemeProperties::TINT_FRAME_INACTIVE },
-  { PRS_THEME_FRAME_INCOGNITO_WIN, ThemeProperties::TINT_FRAME_INCOGNITO },
-  { PRS_THEME_FRAME_INCOGNITO_INACTIVE_WIN,
+#if defined(USE_ASH) && !defined(OS_CHROMEOS)
+  { PRS_THEME_FRAME_DESKTOP, ThemeProperties::TINT_FRAME },
+  { PRS_THEME_FRAME_INACTIVE_DESKTOP, ThemeProperties::TINT_FRAME_INACTIVE },
+  { PRS_THEME_FRAME_INCOGNITO_DESKTOP, ThemeProperties::TINT_FRAME_INCOGNITO },
+  { PRS_THEME_FRAME_INCOGNITO_INACTIVE_DESKTOP,
     ThemeProperties::TINT_FRAME_INCOGNITO_INACTIVE },
 #endif
 };
@@ -355,9 +378,10 @@ IntToIntTable kFrameTintMap[] = {
 IntToIntTable kTabBackgroundMap[] = {
   { PRS_THEME_TAB_BACKGROUND, PRS_THEME_FRAME },
   { PRS_THEME_TAB_BACKGROUND_INCOGNITO, PRS_THEME_FRAME_INCOGNITO },
-#if defined(OS_WIN)
-  { PRS_THEME_TAB_BACKGROUND_WIN, PRS_THEME_FRAME_WIN },
-  { PRS_THEME_TAB_BACKGROUND_INCOGNITO_WIN, PRS_THEME_FRAME_INCOGNITO_WIN },
+#if defined(USE_ASH) && !defined(OS_CHROMEOS)
+  { PRS_THEME_TAB_BACKGROUND_DESKTOP, PRS_THEME_FRAME_DESKTOP },
+  { PRS_THEME_TAB_BACKGROUND_INCOGNITO_DESKTOP,
+    PRS_THEME_FRAME_INCOGNITO_DESKTOP },
 #endif
 };
 
@@ -389,8 +413,8 @@ struct CropEntry kImagesToCrop[] = {
   { PRS_THEME_TOOLBAR, 200, false },
   { PRS_THEME_BUTTON_BACKGROUND, 60, false },
   { PRS_THEME_WINDOW_CONTROL_BACKGROUND, 50, false },
-#if defined(OS_WIN)
-  { PRS_THEME_TOOLBAR_WIN, 200, false }
+#if defined(USE_ASH) && !defined(OS_CHROMEOS)
+  { PRS_THEME_TOOLBAR_DESKTOP, 200, false }
 #endif
 };
 
@@ -450,14 +474,10 @@ SkBitmap CreateLowQualityResizedBitmap(const SkBitmap& source_bitmap,
   gfx::Size scaled_size = gfx::ToCeiledSize(
       gfx::ScaleSize(gfx::Size(source_bitmap.width(),
                                source_bitmap.height()),
-                     ui::GetImageScale(desired_scale_factor) /
-                     ui::GetImageScale(source_scale_factor)));
+                     ui::GetScaleForScaleFactor(desired_scale_factor) /
+                     ui::GetScaleForScaleFactor(source_scale_factor)));
   SkBitmap scaled_bitmap;
-  scaled_bitmap.setConfig(SkBitmap::kARGB_8888_Config,
-                          scaled_size.width(),
-                          scaled_size.height());
-  if (!scaled_bitmap.allocPixels())
-    SK_CRASH();
+  scaled_bitmap.allocN32Pixels(scaled_size.width(), scaled_size.height());
   scaled_bitmap.eraseARGB(0, 0, 0, 0);
   SkCanvas canvas(scaled_bitmap);
   SkRect scaled_bounds = RectToSkRect(gfx::Rect(scaled_size));
@@ -473,9 +493,9 @@ class ThemeImageSource: public gfx::ImageSkiaSource {
  public:
   explicit ThemeImageSource(const gfx::ImageSkia& source) : source_(source) {
   }
-  virtual ~ThemeImageSource() {}
+  ~ThemeImageSource() override {}
 
-  virtual gfx::ImageSkiaRep GetImageForScale(float scale) OVERRIDE {
+  gfx::ImageSkiaRep GetImageForScale(float scale) override {
     if (source_.HasRepresentation(scale))
       return source_.GetRepresentation(scale);
     const gfx::ImageSkiaRep& rep_100p = source_.GetRepresentation(1.0f);
@@ -502,10 +522,10 @@ class ThemeImagePngSource : public gfx::ImageSkiaSource {
 
   explicit ThemeImagePngSource(const PngMap& png_map) : png_map_(png_map) {}
 
-  virtual ~ThemeImagePngSource() {}
+  ~ThemeImagePngSource() override {}
 
  private:
-  virtual gfx::ImageSkiaRep GetImageForScale(float scale) OVERRIDE {
+  gfx::ImageSkiaRep GetImageForScale(float scale) override {
     ui::ScaleFactor scale_factor = ui::GetSupportedScaleFactor(scale);
     // Look up the bitmap for |scale factor| in the bitmap map. If found
     // return it.
@@ -534,8 +554,8 @@ class ThemeImagePngSource : public gfx::ImageSkiaSource {
     for (PngMap::const_iterator png_it = png_map_.begin();
          png_it != png_map_.end(); ++png_it) {
       if (available_png_it == png_map_.end() ||
-          ui::GetImageScale(png_it->first) >
-          ui::GetImageScale(available_png_it->first)) {
+          ui::GetScaleForScaleFactor(png_it->first) >
+          ui::GetScaleForScaleFactor(available_png_it->first)) {
         available_png_it = png_it;
       }
     }
@@ -591,11 +611,10 @@ class TabBackgroundImageSource: public gfx::CanvasImageSource {
         vertical_offset_(vertical_offset) {
   }
 
-  virtual ~TabBackgroundImageSource() {
-  }
+  ~TabBackgroundImageSource() override {}
 
   // Overridden from CanvasImageSource:
-  virtual void Draw(gfx::Canvas* canvas) OVERRIDE {
+  void Draw(gfx::Canvas* canvas) override {
     gfx::ImageSkia bg_tint =
         gfx::ImageSkiaOperations::CreateHSLShiftedImage(image_to_tint_,
             hsl_shift_);
@@ -721,9 +740,8 @@ scoped_refptr<BrowserThemePack> BrowserThemePack::BuildFromDataPack(
   }
   // TODO(erg): Check endianess once DataPack works on the other endian.
   std::string theme_id(reinterpret_cast<char*>(pack->header_->theme_id),
-                       extensions::id_util::kIdSize);
-  std::string truncated_id =
-      expected_id.substr(0, extensions::id_util::kIdSize);
+                       crx_file::id_util::kIdSize);
+  std::string truncated_id = expected_id.substr(0, crx_file::id_util::kIdSize);
   if (theme_id != truncated_id) {
     DLOG(ERROR) << "Wrong id: " << theme_id << " vs " << expected_id;
     return NULL;
@@ -755,6 +773,7 @@ scoped_refptr<BrowserThemePack> BrowserThemePack::BuildFromDataPack(
   if (!InputScalesValid(pointer, pack->scale_factors_)) {
     DLOG(ERROR) << "BuildFromDataPack failure! The pack scale factors differ "
                 << "from those supported by platform.";
+    return NULL;
   }
   return pack;
 }
@@ -768,9 +787,9 @@ void BrowserThemePack::GetThemeableImageIDRs(std::set<int>* result) {
   for (size_t i = 0; i < kPersistingImagesLength; ++i)
     result->insert(kPersistingImages[i].idr_id);
 
-#if defined(OS_WIN)
-  for (size_t i = 0; i < kPersistingImagesWinDesktopAuraLength; ++i)
-    result->insert(kPersistingImagesWinDesktopAura[i].idr_id);
+#if defined(USE_ASH) && !defined(OS_CHROMEOS)
+  for (size_t i = 0; i < kPersistingImagesDesktopAuraLength; ++i)
+    result->insert(kPersistingImagesDesktopAura[i].idr_id);
 #endif
 }
 
@@ -870,8 +889,7 @@ gfx::Image BrowserThemePack::GetImageNamed(int idr_id) {
       png_map[scale_factors_[i]] = memory;
   }
   if (!png_map.empty()) {
-    gfx::ImageSkia image_skia(new ThemeImagePngSource(png_map),
-                              ui::SCALE_FACTOR_100P);
+    gfx::ImageSkia image_skia(new ThemeImagePngSource(png_map), 1.0f);
     // |image_skia| takes ownership of ThemeImagePngSource.
     gfx::Image ret = gfx::Image(image_skia);
     images_on_ui_thread_[prs_id] = ret;
@@ -926,6 +944,11 @@ BrowserThemePack::BrowserThemePack()
       display_properties_(NULL),
       source_images_(NULL) {
   scale_factors_ = ui::GetSupportedScaleFactors();
+  // On Windows HiDPI SCALE_FACTOR_100P may not be supported by default.
+  if (std::find(scale_factors_.begin(), scale_factors_.end(),
+                ui::SCALE_FACTOR_100P) == scale_factors_.end()) {
+    scale_factors_.push_back(ui::SCALE_FACTOR_100P);
+  }
 }
 
 void BrowserThemePack::BuildHeader(const Extension* extension) {
@@ -945,7 +968,7 @@ void BrowserThemePack::BuildHeader(const Extension* extension) {
   header_->little_endian = 1;
 
   const std::string& id = extension->id();
-  memcpy(header_->theme_id, id.c_str(), extensions::id_util::kIdSize);
+  memcpy(header_->theme_id, id.c_str(), crx_file::id_util::kIdSize);
 }
 
 void BrowserThemePack::BuildTintsFromJSON(
@@ -973,6 +996,7 @@ void BrowserThemePack::BuildTintsFromJSON(
       if (tint_list->GetDouble(0, &hsl.h) &&
           tint_list->GetDouble(1, &hsl.s) &&
           tint_list->GetDouble(2, &hsl.l)) {
+        MakeHSLShiftValid(&hsl);
         int id = GetIntForString(iter.key(), kTintTable, kTintTableLength);
         if (id != -1) {
           temp_tints[id] = hsl;
@@ -1209,10 +1233,10 @@ void BrowserThemePack::AddFileAtScaleToMap(const std::string& image_name,
   int id = GetPersistentIDByName(image_name);
   if (id != -1)
     (*file_paths)[id][scale_factor] = image_path;
-#if defined(OS_WIN)
+#if defined(USE_ASH) && !defined(OS_CHROMEOS)
   id = GetPersistentIDByNameHelper(image_name,
-                                   kPersistingImagesWinDesktopAura,
-                                   kPersistingImagesWinDesktopAuraLength);
+                                   kPersistingImagesDesktopAura,
+                                   kPersistingImagesDesktopAuraLength);
   if (id != -1)
     (*file_paths)[id][scale_factor] = image_path;
 #endif
@@ -1282,7 +1306,7 @@ bool BrowserThemePack::LoadRawBitmapsTo(
                                     &bitmap)) {
             image_skia.AddRepresentation(
                 gfx::ImageSkiaRep(bitmap,
-                                  ui::GetImageScale(scale_factor)));
+                                  ui::GetScaleForScaleFactor(scale_factor)));
           } else {
             NOTREACHED() << "Unable to decode theme image resource "
                          << it->first;
@@ -1337,15 +1361,15 @@ void BrowserThemePack::CreateFrameImages(ImageCache* images) const {
     // thing and just use the default images.
     int prs_base_id = 0;
 
-#if defined(OS_WIN)
-    if (prs_id == PRS_THEME_FRAME_INCOGNITO_INACTIVE_WIN) {
-      prs_base_id = images->count(PRS_THEME_FRAME_INCOGNITO_WIN) ?
-                    PRS_THEME_FRAME_INCOGNITO_WIN : PRS_THEME_FRAME_WIN;
-    } else if (prs_id == PRS_THEME_FRAME_INACTIVE_WIN) {
-      prs_base_id = PRS_THEME_FRAME_WIN;
-    } else if (prs_id == PRS_THEME_FRAME_INCOGNITO_WIN &&
-                !images->count(PRS_THEME_FRAME_INCOGNITO_WIN)) {
-      prs_base_id = PRS_THEME_FRAME_WIN;
+#if defined(USE_ASH) && !defined(OS_CHROMEOS)
+    if (prs_id == PRS_THEME_FRAME_INCOGNITO_INACTIVE_DESKTOP) {
+      prs_base_id = images->count(PRS_THEME_FRAME_INCOGNITO_DESKTOP) ?
+                    PRS_THEME_FRAME_INCOGNITO_DESKTOP : PRS_THEME_FRAME_DESKTOP;
+    } else if (prs_id == PRS_THEME_FRAME_INACTIVE_DESKTOP) {
+      prs_base_id = PRS_THEME_FRAME_DESKTOP;
+    } else if (prs_id == PRS_THEME_FRAME_INCOGNITO_DESKTOP &&
+                !images->count(PRS_THEME_FRAME_INCOGNITO_DESKTOP)) {
+      prs_base_id = PRS_THEME_FRAME_DESKTOP;
     }
 #endif
     if (!prs_base_id) {
@@ -1368,8 +1392,8 @@ void BrowserThemePack::CreateFrameImages(ImageCache* images) const {
     } else if (prs_base_id != prs_id && images->count(prs_base_id)) {
       frame = (*images)[prs_base_id];
     } else if (prs_base_id == PRS_THEME_FRAME_OVERLAY) {
-#if defined(OS_WIN)
-      if (images->count(PRS_THEME_FRAME_WIN)) {
+#if defined(USE_ASH) && !defined(OS_CHROMEOS)
+      if (images->count(PRS_THEME_FRAME_DESKTOP)) {
 #else
       if (images->count(PRS_THEME_FRAME)) {
 #endif
@@ -1382,10 +1406,10 @@ void BrowserThemePack::CreateFrameImages(ImageCache* images) const {
       // If the theme doesn't specify an image, then apply the tint to
       // the default frame.
       frame = rb.GetImageNamed(IDR_THEME_FRAME);
-#if defined(OS_WIN) && defined(USE_AURA)
-      if (prs_id >= PRS_THEME_FRAME_WIN &&
-          prs_id <= PRS_THEME_FRAME_INCOGNITO_INACTIVE_WIN) {
-        frame = rb.GetImageNamed(IDR_THEME_FRAME_WIN);
+#if defined(USE_ASH) && !defined(OS_CHROMEOS)
+      if (prs_id >= PRS_THEME_FRAME_DESKTOP &&
+          prs_id <= PRS_THEME_FRAME_INCOGNITO_INACTIVE_DESKTOP) {
+        frame = rb.GetImageNamed(IDR_THEME_FRAME_DESKTOP);
       }
 #endif
     }
@@ -1452,7 +1476,6 @@ void BrowserThemePack::CreateTabBackgroundImages(ImageCache* images) const {
 
 void BrowserThemePack::RepackImages(const ImageCache& images,
                                     RawImages* reencoded_images) const {
-  typedef std::vector<ui::ScaleFactor> ScaleFactors;
   for (ImageCache::const_iterator it = images.begin();
        it != images.end(); ++it) {
     gfx::ImageSkia image_skia = *it->second.ToImageSkia();
@@ -1520,7 +1543,7 @@ int BrowserThemePack::GetRawIDByPersistentID(
 
   for (size_t i = 0; i < scale_factors_.size(); ++i) {
     if (scale_factors_[i] == scale_factor)
-      return static_cast<int>(kPersistingImagesLength * i) + prs_id;
+      return ((GetMaxPersistentId() + 1) * i) + prs_id;
   }
   return -1;
 }
@@ -1532,7 +1555,8 @@ bool BrowserThemePack::GetScaleFactorFromManifestKey(
   if (base::StringToInt(key, &percent)) {
     float scale = static_cast<float>(percent) / 100.0f;
     for (size_t i = 0; i < scale_factors_.size(); ++i) {
-      if (fabs(ui::GetImageScale(scale_factors_[i]) - scale) < 0.001) {
+      if (fabs(ui::GetScaleForScaleFactor(scale_factors_[i]) - scale)
+              < 0.001) {
         *scale_factor = scale_factors_[i];
         return true;
       }
@@ -1569,8 +1593,8 @@ void BrowserThemePack::GenerateRawImageForAllSupportedScales(int prs_id) {
   for (size_t i = 0; i < scale_factors_.size(); ++i) {
     int raw_id = GetRawIDByPersistentID(prs_id, scale_factors_[i]);
     if ((available_scale_factor == ui::SCALE_FACTOR_NONE ||
-         (ui::GetImageScale(scale_factors_[i]) >
-          ui::GetImageScale(available_scale_factor))) &&
+         (ui::GetScaleForScaleFactor(scale_factors_[i]) >
+          ui::GetScaleForScaleFactor(available_scale_factor))) &&
         image_memory_.find(raw_id) != image_memory_.end()) {
       available_scale_factor = scale_factors_[i];
     }