Chromium Code Reviews| Index: chrome/browser/extensions/extension_action_storage_manager.cc |
| diff --git a/chrome/browser/extensions/extension_action_storage_manager.cc b/chrome/browser/extensions/extension_action_storage_manager.cc |
| index a7de1e6a51eb3674fdcc7152105db9fc9d63b7fc..d6fd34884b60a47dae32f5522abf397e8a956707 100644 |
| --- a/chrome/browser/extensions/extension_action_storage_manager.cc |
| +++ b/chrome/browser/extensions/extension_action_storage_manager.cc |
| @@ -75,8 +75,7 @@ bool StringToSkBitmap(const std::string& str, SkBitmap* bitmap) { |
| } |
| // Conversion function for reading/writing to storage. |
| -std::string RepresentationToString(const gfx::ImageSkia& image, float scale) { |
| - SkBitmap bitmap = image.GetRepresentation(scale).sk_bitmap(); |
| +std::string BitmapToString(const SkBitmap& bitmap) { |
| SkAutoLockPixels lock_image(bitmap); |
| std::vector<unsigned char> data; |
| bool success = gfx::PNGCodec::EncodeBGRASkBitmap(bitmap, false, &data); |
| @@ -96,8 +95,6 @@ void SetDefaultsFromValue(const base::DictionaryValue* dict, |
| const int kDefaultTabId = ExtensionAction::kDefaultTabId; |
| std::string str_value; |
| int int_value; |
|
Devlin
2015/12/03 00:00:38
while you're here, could you also initialize this?
Evan Stade
2015/12/04 01:29:53
Done.
|
| - SkBitmap bitmap; |
| - gfx::ImageSkia icon; |
| // For each value, don't set it if it has been modified already. |
| if (dict->GetString(kPopupUrlStorageKey, &str_value) && |
| @@ -137,13 +134,18 @@ void SetDefaultsFromValue(const base::DictionaryValue* dict, |
| const base::DictionaryValue* icon_value = NULL; |
| if (dict->GetDictionary(kIconStorageKey, &icon_value) && |
| !action->HasIcon(kDefaultTabId)) { |
| - for (size_t i = 0; i < extension_misc::kNumExtensionActionIconSizes; i++) { |
| - const extension_misc::IconRepresentationInfo& icon_info = |
| - extension_misc::kExtensionActionIconSizes[i]; |
| - if (icon_value->GetString(icon_info.size_string, &str_value) && |
| - StringToSkBitmap(str_value, &bitmap)) { |
| + gfx::ImageSkia icon; |
| + SkBitmap bitmap; |
| + for (base::DictionaryValue::Iterator iter(*icon_value); !iter.IsAtEnd(); |
| + iter.Advance()) { |
| + int icon_size = 0; |
| + std::string icon_string; |
| + if (base::StringToInt(iter.key(), &icon_size) && |
| + iter.value().GetAsString(&icon_string) && |
| + StringToSkBitmap(icon_string, &bitmap)) { |
| CHECK(!bitmap.isNull()); |
| - float scale = ui::GetScaleForScaleFactor(icon_info.scale); |
| + float scale = |
| + static_cast<float>(ExtensionAction::ActionIconSize()) / icon_size; |
| icon.AddRepresentation(gfx::ImageSkiaRep(bitmap, scale)); |
| } |
| } |
| @@ -173,18 +175,15 @@ scoped_ptr<base::DictionaryValue> DefaultsToValue(ExtensionAction* action) { |
| action->GetExplicitlySetIcon(kDefaultTabId).AsImageSkia(); |
| if (!icon.isNull()) { |
| scoped_ptr<base::DictionaryValue> icon_value(new base::DictionaryValue()); |
| - for (size_t i = 0; i < extension_misc::kNumExtensionActionIconSizes; i++) { |
| - const extension_misc::IconRepresentationInfo& icon_info = |
| - extension_misc::kExtensionActionIconSizes[i]; |
| - float scale = ui::GetScaleForScaleFactor(icon_info.scale); |
| - if (icon.HasRepresentation(scale)) { |
| - icon_value->SetString(icon_info.size_string, |
| - RepresentationToString(icon, scale)); |
| - } |
| + std::vector<gfx::ImageSkiaRep> image_reps = icon.image_reps(); |
| + for (const gfx::ImageSkiaRep& rep : image_reps) { |
| + int size = static_cast<int>(rep.scale() * icon.width()); |
| + std::string size_string = base::IntToString(size); |
| + icon_value->SetString(size_string, BitmapToString(rep.sk_bitmap())); |
| } |
| - dict->Set(kIconStorageKey, icon_value.release()); |
| + dict->Set(kIconStorageKey, icon_value.Pass()); |
| } |
| - return dict.Pass(); |
| + return dict; |
| } |
| } // namespace |