| 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..401e0777649774c37db307e2eb0e4a3b6622c8c5 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);
|
| @@ -95,9 +94,6 @@ void SetDefaultsFromValue(const base::DictionaryValue* dict,
|
| ExtensionAction* action) {
|
| const int kDefaultTabId = ExtensionAction::kDefaultTabId;
|
| std::string str_value;
|
| - int int_value;
|
| - SkBitmap bitmap;
|
| - gfx::ImageSkia icon;
|
|
|
| // For each value, don't set it if it has been modified already.
|
| if (dict->GetString(kPopupUrlStorageKey, &str_value) &&
|
| @@ -121,9 +117,11 @@ void SetDefaultsFromValue(const base::DictionaryValue* dict,
|
| !action->HasBadgeTextColor(kDefaultTabId)) {
|
| action->SetBadgeTextColor(kDefaultTabId, RawStringToSkColor(str_value));
|
| }
|
| - if (dict->GetInteger(kAppearanceStorageKey, &int_value) &&
|
| +
|
| + int appearance_storage = 0;
|
| + if (dict->GetInteger(kAppearanceStorageKey, &appearance_storage) &&
|
| !action->HasIsVisible(kDefaultTabId)) {
|
| - switch (int_value) {
|
| + switch (appearance_storage) {
|
| case INVISIBLE:
|
| case OBSOLETE_WANTS_ATTENTION:
|
| action->SetIsVisible(kDefaultTabId, false);
|
| @@ -137,13 +135,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>(icon_size) / ExtensionAction::ActionIconSize();
|
| icon.AddRepresentation(gfx::ImageSkiaRep(bitmap, scale));
|
| }
|
| }
|
| @@ -173,18 +176,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
|
|
|