Index: chrome/browser/extensions/api/extension_action/extension_action_api.cc |
diff --git a/chrome/browser/extensions/api/extension_action/extension_action_api.cc b/chrome/browser/extensions/api/extension_action/extension_action_api.cc |
index cec939216ad4bb7d6535d8f75595f22aafdab9a5..15973bfb58c5bce7d4bdcf5d22d8688ce42c3e4c 100644 |
--- a/chrome/browser/extensions/api/extension_action/extension_action_api.cc |
+++ b/chrome/browser/extensions/api/extension_action/extension_action_api.cc |
@@ -138,34 +138,48 @@ std::string RepresentationToString(const gfx::ImageSkia& image, float scale) { |
// Set |action|'s default values to those specified in |dict|. |
void SetDefaultsFromValue(const base::DictionaryValue* dict, |
ExtensionAction* action) { |
- const int kTabId = ExtensionAction::kDefaultTabId; |
+ const int kDefaultTabId = ExtensionAction::kDefaultTabId; |
std::string str_value; |
int int_value; |
SkBitmap bitmap; |
gfx::ImageSkia icon; |
- if (dict->GetString(kPopupUrlStorageKey, &str_value)) |
- action->SetPopupUrl(kTabId, GURL(str_value)); |
- if (dict->GetString(kTitleStorageKey, &str_value)) |
- action->SetTitle(kTabId, str_value); |
- if (dict->GetString(kBadgeTextStorageKey, &str_value)) |
- action->SetBadgeText(kTabId, str_value); |
- if (dict->GetString(kBadgeBackgroundColorStorageKey, &str_value)) |
- action->SetBadgeBackgroundColor(kTabId, RawStringToSkColor(str_value)); |
- if (dict->GetString(kBadgeTextColorStorageKey, &str_value)) |
- action->SetBadgeTextColor(kTabId, RawStringToSkColor(str_value)); |
- if (dict->GetInteger(kAppearanceStorageKey, &int_value)) { |
+ // For each value, don't set it if it has been modified already. |
+ if (dict->GetString(kPopupUrlStorageKey, &str_value) && |
+ !action->HasPopupUrl(kDefaultTabId)) { |
+ action->SetPopupUrl(kDefaultTabId, GURL(str_value)); |
+ } |
+ if (dict->GetString(kTitleStorageKey, &str_value) && |
+ !action->HasTitle(kDefaultTabId)) { |
+ action->SetTitle(kDefaultTabId, str_value); |
+ } |
+ if (dict->GetString(kBadgeTextStorageKey, &str_value) && |
+ !action->HasBadgeText(kDefaultTabId)) { |
+ action->SetBadgeText(kDefaultTabId, str_value); |
+ } |
+ if (dict->GetString(kBadgeBackgroundColorStorageKey, &str_value) && |
+ !action->HasBadgeBackgroundColor(kDefaultTabId)) { |
+ action->SetBadgeBackgroundColor(kDefaultTabId, |
+ RawStringToSkColor(str_value)); |
+ } |
+ if (dict->GetString(kBadgeTextColorStorageKey, &str_value) && |
+ !action->HasBadgeTextColor(kDefaultTabId)) { |
+ action->SetBadgeTextColor(kDefaultTabId, RawStringToSkColor(str_value)); |
+ } |
+ if (dict->GetInteger(kAppearanceStorageKey, &int_value) && |
+ !action->HasIsVisible(kDefaultTabId)) { |
switch (int_value) { |
case INVISIBLE: |
case OBSOLETE_WANTS_ATTENTION: |
- action->SetIsVisible(kTabId, false); |
+ action->SetIsVisible(kDefaultTabId, false); |
case ACTIVE: |
- action->SetIsVisible(kTabId, true); |
+ action->SetIsVisible(kDefaultTabId, true); |
} |
} |
const base::DictionaryValue* icon_value = NULL; |
- if (dict->GetDictionary(kIconStorageKey, &icon_value)) { |
+ if (dict->GetDictionary(kIconStorageKey, &icon_value) && |
+ !action->HasIcon(kDefaultTabId)) { |
for (size_t i = 0; i < arraysize(kIconSizes); i++) { |
if (icon_value->GetString(kIconSizes[i].size_string, &str_value) && |
StringToSkBitmap(str_value, &bitmap)) { |
@@ -174,27 +188,29 @@ void SetDefaultsFromValue(const base::DictionaryValue* dict, |
icon.AddRepresentation(gfx::ImageSkiaRep(bitmap, scale)); |
} |
} |
- action->SetIcon(kTabId, gfx::Image(icon)); |
+ action->SetIcon(kDefaultTabId, gfx::Image(icon)); |
} |
} |
// Store |action|'s default values in a DictionaryValue for use in storing to |
// disk. |
scoped_ptr<base::DictionaryValue> DefaultsToValue(ExtensionAction* action) { |
- const int kTabId = ExtensionAction::kDefaultTabId; |
+ const int kDefaultTabId = ExtensionAction::kDefaultTabId; |
scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); |
- dict->SetString(kPopupUrlStorageKey, action->GetPopupUrl(kTabId).spec()); |
- dict->SetString(kTitleStorageKey, action->GetTitle(kTabId)); |
- dict->SetString(kBadgeTextStorageKey, action->GetBadgeText(kTabId)); |
- dict->SetString(kBadgeBackgroundColorStorageKey, |
- SkColorToRawString(action->GetBadgeBackgroundColor(kTabId))); |
+ dict->SetString(kPopupUrlStorageKey, |
+ action->GetPopupUrl(kDefaultTabId).spec()); |
+ dict->SetString(kTitleStorageKey, action->GetTitle(kDefaultTabId)); |
+ dict->SetString(kBadgeTextStorageKey, action->GetBadgeText(kDefaultTabId)); |
+ dict->SetString( |
+ kBadgeBackgroundColorStorageKey, |
+ SkColorToRawString(action->GetBadgeBackgroundColor(kDefaultTabId))); |
dict->SetString(kBadgeTextColorStorageKey, |
- SkColorToRawString(action->GetBadgeTextColor(kTabId))); |
+ SkColorToRawString(action->GetBadgeTextColor(kDefaultTabId))); |
dict->SetInteger(kAppearanceStorageKey, |
- action->GetIsVisible(kTabId) ? ACTIVE : INVISIBLE); |
+ action->GetIsVisible(kDefaultTabId) ? ACTIVE : INVISIBLE); |
- gfx::ImageSkia icon = action->GetExplicitlySetIcon(kTabId); |
+ gfx::ImageSkia icon = action->GetExplicitlySetIcon(kDefaultTabId); |
if (!icon.isNull()) { |
base::DictionaryValue* icon_value = new base::DictionaryValue(); |
for (size_t i = 0; i < arraysize(kIconSizes); i++) { |
@@ -440,7 +456,6 @@ void ExtensionActionStorageManager::Observe( |
if (profile != profile_) |
break; |
- extension_action->set_has_changed(true); |
WriteToStorage(extension_action); |
break; |
} |
@@ -480,13 +495,6 @@ void ExtensionActionStorageManager::ReadFromStorage( |
return; |
} |
- // Don't load values from storage if the extension has updated a value |
- // already. The extension may have only updated some of the values, but |
- // this is a good first approximation. If the extension is doing stuff |
- // to the browser action, we can assume it is ready to take over. |
- if (browser_action->has_changed()) |
- return; |
- |
const base::DictionaryValue* dict = NULL; |
if (!value.get() || !value->GetAsDictionary(&dict)) |
return; |