Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1621)

Unified Diff: chrome/browser/extensions/extension_action_storage_manager.cc

Issue 1492073003: Handle more scale factors for extension Browser Action icons (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: test catches real bug! Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698