diff options
author | aa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-09-23 22:55:00 +0000 |
---|---|---|
committer | aa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-09-23 22:55:00 +0000 |
commit | 1cea23942dddeeb854a0f8120812e87b5c962d34 (patch) | |
tree | 8b957aaf4e349bd100791ac1c7d8e4c9edbc8dd3 /chrome/common | |
parent | 088ee1afadb121aaf01cb033c373ade1d35456ac (diff) | |
download | chromium_src-1cea23942dddeeb854a0f8120812e87b5c962d34.zip chromium_src-1cea23942dddeeb854a0f8120812e87b5c962d34.tar.gz chromium_src-1cea23942dddeeb854a0f8120812e87b5c962d34.tar.bz2 |
Allow extensions to request the icons of hosted apps.
BUG=53495
TEST=
Review URL: http://codereview.chromium.org/3409004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@60371 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/common')
-rw-r--r-- | chrome/common/extensions/extension.cc | 10 | ||||
-rw-r--r-- | chrome/common/extensions/extension_icon_set.cc | 13 | ||||
-rw-r--r-- | chrome/common/extensions/extension_icon_set.h | 3 | ||||
-rw-r--r-- | chrome/common/extensions/extension_icon_set_unittest.cc | 15 | ||||
-rw-r--r-- | chrome/common/extensions/extension_manifests_unittest.cc | 9 |
5 files changed, 50 insertions, 0 deletions
diff --git a/chrome/common/extensions/extension.cc b/chrome/common/extensions/extension.cc index 4a3f851..009f164 100644 --- a/chrome/common/extensions/extension.cc +++ b/chrome/common/extensions/extension.cc @@ -1147,6 +1147,16 @@ bool Extension::InitFromValue(const DictionaryValue& source, bool require_key, errors::kInvalidIconPath, key); return false; } + + if (icon_path.size() > 0 && icon_path[0] == '/') + icon_path = icon_path.substr(1); + + if (icon_path.empty()) { + *error = ExtensionErrorUtils::FormatErrorMessage( + errors::kInvalidIconPath, key); + return false; + } + icons_.Add(kIconSizes[i], icon_path); } } diff --git a/chrome/common/extensions/extension_icon_set.cc b/chrome/common/extensions/extension_icon_set.cc index 0679882..3eedce0 100644 --- a/chrome/common/extensions/extension_icon_set.cc +++ b/chrome/common/extensions/extension_icon_set.cc @@ -11,6 +11,7 @@ void ExtensionIconSet::Clear() { } void ExtensionIconSet::Add(int size, const std::string& path) { + DCHECK(path.size() > 0 && path[0] != '/'); map_[size] = path; } @@ -43,3 +44,15 @@ std::string ExtensionIconSet::Get(int size, MatchType match_type) const { return result == map_.end() ? std::string() : result->second; } } + +bool ExtensionIconSet::ContainsPath(const std::string& path) const { + DCHECK(path.size() > 0 && path[0] != '/'); + for (IconMap::const_iterator iter = map_.begin(); iter != map_.end(); + ++iter) { + LOG(ERROR) << iter->second << " , " << path; + if (iter->second == path) + return true; + } + + return false; +} diff --git a/chrome/common/extensions/extension_icon_set.h b/chrome/common/extensions/extension_icon_set.h index 474a0c1..d1dc9f3 100644 --- a/chrome/common/extensions/extension_icon_set.h +++ b/chrome/common/extensions/extension_icon_set.h @@ -32,6 +32,9 @@ class ExtensionIconSet { }; std::string Get(int size, MatchType match_type) const; + // Returns true if the set contains the specified path. + bool ContainsPath(const std::string& path) const; + private: IconMap map_; }; diff --git a/chrome/common/extensions/extension_icon_set_unittest.cc b/chrome/common/extensions/extension_icon_set_unittest.cc index d91206a..4da96bc 100644 --- a/chrome/common/extensions/extension_icon_set_unittest.cc +++ b/chrome/common/extensions/extension_icon_set_unittest.cc @@ -33,3 +33,18 @@ TEST(ExtensionIconSet, Basic) { EXPECT_EQ("", icons.Get(37, ExtensionIconSet::MATCH_SMALLER)); EXPECT_EQ("", icons.Get(47, ExtensionIconSet::MATCH_BIGGER)); } + +TEST(ExtensionIconSet, Values) { + ExtensionIconSet icons; + EXPECT_FALSE(icons.ContainsPath("foo")); + + icons.Add(1, "foo"); + icons.Add(2, "bar"); + + EXPECT_TRUE(icons.ContainsPath("foo")); + EXPECT_TRUE(icons.ContainsPath("bar")); + EXPECT_FALSE(icons.ContainsPath("baz")); + + icons.Clear(); + EXPECT_FALSE(icons.ContainsPath("foo")); +} diff --git a/chrome/common/extensions/extension_manifests_unittest.cc b/chrome/common/extensions/extension_manifests_unittest.cc index 38a03f8..d6b47db3 100644 --- a/chrome/common/extensions/extension_manifests_unittest.cc +++ b/chrome/common/extensions/extension_manifests_unittest.cc @@ -332,3 +332,12 @@ TEST_F(ExtensionManifestTest, DisallowExtensionPermissions) { } } } + +TEST_F(ExtensionManifestTest, NormalizeIconPaths) { + scoped_ptr<Extension> extension( + LoadAndExpectSuccess("normalize_icon_paths.json")); + EXPECT_EQ("16.png", + extension->icons().Get(16, ExtensionIconSet::MATCH_EXACTLY)); + EXPECT_EQ("48.png", + extension->icons().Get(48, ExtensionIconSet::MATCH_EXACTLY)); +} |