summaryrefslogtreecommitdiffstats
path: root/extensions/common/manifest_handlers
diff options
context:
space:
mode:
authorestade <estade@chromium.org>2016-01-25 13:07:29 -0800
committerCommit bot <commit-bot@chromium.org>2016-01-25 21:09:04 +0000
commit63a6923752c66e597b8a10eddeada4f2ef1e82c9 (patch)
tree95395fba20a0c5145e7f8ae24ca3db305cb4ada5 /extensions/common/manifest_handlers
parent70a919c39f5d644c7676f9c76686166826dccc8d (diff)
downloadchromium_src-63a6923752c66e597b8a10eddeada4f2ef1e82c9.zip
chromium_src-63a6923752c66e597b8a10eddeada4f2ef1e82c9.tar.gz
chromium_src-63a6923752c66e597b8a10eddeada4f2ef1e82c9.tar.bz2
Extensions - Check for too big or too small manifest icons.
both product and browser action icons are affected by this check BUG=none Review URL: https://codereview.chromium.org/1618073002 Cr-Commit-Position: refs/heads/master@{#371311}
Diffstat (limited to 'extensions/common/manifest_handlers')
-rw-r--r--extensions/common/manifest_handlers/icons_handler_unittest.cc69
1 files changed, 69 insertions, 0 deletions
diff --git a/extensions/common/manifest_handlers/icons_handler_unittest.cc b/extensions/common/manifest_handlers/icons_handler_unittest.cc
new file mode 100644
index 0000000..fa644a9
--- /dev/null
+++ b/extensions/common/manifest_handlers/icons_handler_unittest.cc
@@ -0,0 +1,69 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/test/values_test_util.h"
+#include "extensions/common/manifest_handlers/icons_handler.h"
+#include "extensions/common/manifest_test.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace extensions {
+
+class ProductIconManifestTest : public ManifestTest {
+ public:
+ ProductIconManifestTest() {}
+
+ protected:
+ scoped_ptr<base::DictionaryValue> CreateManifest(
+ const std::string& extra_icons) {
+ scoped_ptr<base::DictionaryValue> manifest = base::DictionaryValue::From(
+ base::test::ParseJson("{ \n"
+ " \"name\": \"test\", \n"
+ " \"version\": \"0.1\", \n"
+ " \"manifest_version\": 2, \n"
+ " \"icons\": { \n" +
+ extra_icons + " \"16\": \"icon1.png\", \n"
+ " \"32\": \"icon2.png\" \n"
+ " } \n"
+ "} \n"));
+ EXPECT_TRUE(manifest);
+ return manifest;
+ }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(ProductIconManifestTest);
+};
+
+TEST_F(ProductIconManifestTest, Sizes) {
+ // Too big.
+ {
+ scoped_ptr<base::DictionaryValue> ext_manifest =
+ CreateManifest("\"100000\": \"icon3.png\", \n");
+ ManifestData manifest(std::move(ext_manifest), "test");
+ LoadAndExpectError(manifest, "Invalid key in icons: \"100000\".");
+ }
+ // Too small.
+ {
+ scoped_ptr<base::DictionaryValue> ext_manifest =
+ CreateManifest("\"0\": \"icon3.png\", \n");
+ ManifestData manifest(std::move(ext_manifest), "test");
+ LoadAndExpectError(manifest, "Invalid key in icons: \"0\".");
+ }
+ // NaN.
+ {
+ scoped_ptr<base::DictionaryValue> ext_manifest =
+ CreateManifest("\"sixteen\": \"icon3.png\", \n");
+ ManifestData manifest(std::move(ext_manifest), "test");
+ LoadAndExpectError(manifest, "Invalid key in icons: \"sixteen\".");
+ }
+ // Just right.
+ {
+ scoped_ptr<base::DictionaryValue> ext_manifest =
+ CreateManifest("\"512\": \"icon3.png\", \n");
+ ManifestData manifest(std::move(ext_manifest), "test");
+ scoped_refptr<extensions::Extension> extension =
+ LoadAndExpectSuccess(manifest);
+ }
+}
+
+} // namespace extensions