Commit d1917365 authored by thakis@chromium.org's avatar thakis@chromium.org

extensions: Fix crash on empty extension action icons

BUG=141386

Review URL: https://chromiumcodereview.appspot.com/10855090

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@150962 0039d316-1c4b-4281-b951-d872f2087c98
parent c7535d6e
...@@ -104,8 +104,10 @@ void SetDefaultsFromValue(const base::DictionaryValue* dict, ...@@ -104,8 +104,10 @@ void SetDefaultsFromValue(const base::DictionaryValue* dict,
action->SetAppearance(kTabId, action->SetAppearance(kTabId,
static_cast<ExtensionAction::Appearance>(int_value)); static_cast<ExtensionAction::Appearance>(int_value));
if (dict->GetString(kIconStorageKey, &str_value) && if (dict->GetString(kIconStorageKey, &str_value) &&
StringToSkBitmap(str_value, &bitmap)) StringToSkBitmap(str_value, &bitmap)) {
action->SetIcon(kTabId, bitmap); CHECK(!bitmap.isNull());
action->SetIcon(kTabId, gfx::Image(bitmap));
}
} }
// Store |action|'s default values in a DictionaryValue for use in storing to // Store |action|'s default values in a DictionaryValue for use in storing to
...@@ -409,7 +411,8 @@ bool ExtensionActionSetIconFunction::RunExtensionAction() { ...@@ -409,7 +411,8 @@ bool ExtensionActionSetIconFunction::RunExtensionAction() {
PickleIterator iter(bitmap_pickle); PickleIterator iter(bitmap_pickle);
SkBitmap bitmap; SkBitmap bitmap;
EXTENSION_FUNCTION_VALIDATE(IPC::ReadParam(&bitmap_pickle, &iter, &bitmap)); EXTENSION_FUNCTION_VALIDATE(IPC::ReadParam(&bitmap_pickle, &iter, &bitmap));
extension_action_->SetIcon(tab_id_, bitmap); CHECK(!bitmap.isNull());
extension_action_->SetIcon(tab_id_, gfx::Image(bitmap));
} else if (details_->GetInteger("iconIndex", &icon_index)) { } else if (details_->GetInteger("iconIndex", &icon_index)) {
// If --enable-script-badges is on there might legitimately be an iconIndex // If --enable-script-badges is on there might legitimately be an iconIndex
// set. Until we decide what to do with that, ignore. // set. Until we decide what to do with that, ignore.
...@@ -421,7 +424,7 @@ bool ExtensionActionSetIconFunction::RunExtensionAction() { ...@@ -421,7 +424,7 @@ bool ExtensionActionSetIconFunction::RunExtensionAction() {
error_ = kIconIndexOutOfBounds; error_ = kIconIndexOutOfBounds;
return false; return false;
} }
extension_action_->SetIcon(tab_id_, SkBitmap()); extension_action_->SetIcon(tab_id_, gfx::Image());
extension_action_->SetIconIndex(tab_id_, icon_index); extension_action_->SetIconIndex(tab_id_, icon_index);
} else { } else {
EXTENSION_FUNCTION_VALIDATE(false); EXTENSION_FUNCTION_VALIDATE(false);
......
...@@ -2378,8 +2378,8 @@ bool Extension::LoadScriptBadge(string16* error) { ...@@ -2378,8 +2378,8 @@ bool Extension::LoadScriptBadge(string16* error) {
} else { } else {
script_badge_->SetIcon( script_badge_->SetIcon(
ExtensionAction::kDefaultTabId, ExtensionAction::kDefaultTabId,
*ui::ResourceBundle::GetSharedInstance().GetImageNamed( ui::ResourceBundle::GetSharedInstance().GetImageNamed(
IDR_EXTENSIONS_FAVICON).ToSkBitmap()); IDR_EXTENSIONS_FAVICON));
} }
return true; return true;
......
...@@ -223,8 +223,8 @@ void ExtensionAction::CacheIcon(const std::string& path, ...@@ -223,8 +223,8 @@ void ExtensionAction::CacheIcon(const std::string& path,
path_to_icon_cache_.insert(std::make_pair(path, icon)); path_to_icon_cache_.insert(std::make_pair(path, icon));
} }
void ExtensionAction::SetIcon(int tab_id, const SkBitmap& bitmap) { void ExtensionAction::SetIcon(int tab_id, const gfx::Image& image) {
SetValue(&icon_, tab_id, gfx::Image(bitmap)); SetValue(&icon_, tab_id, image);
} }
gfx::Image ExtensionAction::GetIcon(int tab_id) const { gfx::Image ExtensionAction::GetIcon(int tab_id) const {
......
...@@ -168,7 +168,7 @@ class ExtensionAction { ...@@ -168,7 +168,7 @@ class ExtensionAction {
void CacheIcon(const std::string& path, const gfx::Image& icon); void CacheIcon(const std::string& path, const gfx::Image& icon);
// Set this action's icon bitmap on a specific tab. // Set this action's icon bitmap on a specific tab.
void SetIcon(int tab_id, const SkBitmap& bitmap); void SetIcon(int tab_id, const gfx::Image& image);
// Get the icon for a tab, or the default if no icon was set for this tab, // Get the icon for a tab, or the default if no icon was set for this tab,
// retrieving icons that have been specified by path from the previous // retrieving icons that have been specified by path from the previous
......
...@@ -77,11 +77,11 @@ TEST_F(ExtensionActionTest, Icon) { ...@@ -77,11 +77,11 @@ TEST_F(ExtensionActionTest, Icon) {
action.CacheIcon("the_default.png", icon2); action.CacheIcon("the_default.png", icon2);
ASSERT_TRUE(ImagesAreEqual(icon2, action.GetIcon(1))); ASSERT_TRUE(ImagesAreEqual(icon2, action.GetIcon(1)));
action.SetIcon(ExtensionAction::kDefaultTabId, *icon1.ToSkBitmap()); action.SetIcon(ExtensionAction::kDefaultTabId, icon1);
ASSERT_TRUE(ImagesAreEqual(icon1, action.GetIcon(100))) ASSERT_TRUE(ImagesAreEqual(icon1, action.GetIcon(100)))
<< "SetIcon(kDefaultTabId) overrides the default_icon_path."; << "SetIcon(kDefaultTabId) overrides the default_icon_path.";
action.SetIcon(100, *icon2.ToSkBitmap()); action.SetIcon(100, icon2);
ASSERT_TRUE(ImagesAreEqual(icon1, action.GetIcon(1))); ASSERT_TRUE(ImagesAreEqual(icon1, action.GetIcon(1)));
ASSERT_TRUE(ImagesAreEqual(icon2, action.GetIcon(100))); ASSERT_TRUE(ImagesAreEqual(icon2, action.GetIcon(100)));
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment