OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <utility> | 5 #include <utility> |
6 | 6 |
7 #include "chrome/common/extensions/api/extension_action/action_info.h" | 7 #include "chrome/common/extensions/api/extension_action/action_info.h" |
8 #include "chrome/common/extensions/manifest_tests/chrome_manifest_test.h" | 8 #include "chrome/common/extensions/manifest_tests/chrome_manifest_test.h" |
9 #include "extensions/common/constants.h" | 9 #include "extensions/common/constants.h" |
10 #include "extensions/common/error_utils.h" | 10 #include "extensions/common/error_utils.h" |
11 #include "extensions/common/extension_builder.h" | 11 #include "extensions/common/extension_builder.h" |
12 #include "extensions/common/extension_icon_set.h" | 12 #include "extensions/common/extension_icon_set.h" |
13 #include "extensions/common/manifest_constants.h" | 13 #include "extensions/common/manifest_constants.h" |
14 #include "extensions/common/value_builder.h" | 14 #include "extensions/common/value_builder.h" |
15 #include "testing/gtest/include/gtest/gtest.h" | 15 #include "testing/gtest/include/gtest/gtest.h" |
16 | 16 |
17 namespace extensions { | 17 namespace extensions { |
18 | 18 |
19 namespace errors = manifest_errors; | 19 namespace errors = manifest_errors; |
20 | 20 |
21 namespace { | 21 namespace { |
22 | 22 |
23 class BrowserActionManifestTest : public ChromeManifestTest { | 23 class BrowserActionManifestTest : public ChromeManifestTest { |
24 }; | 24 }; |
25 | 25 |
26 TEST_F(BrowserActionManifestTest, | 26 TEST_F(BrowserActionManifestTest, |
27 BrowserActionManifestIcons_NoDefaultIcons) { | 27 BrowserActionManifestIcons_NoDefaultIcons) { |
28 scoped_refptr<const Extension> extension = | 28 scoped_refptr<const Extension> extension = |
29 ExtensionBuilder() | 29 ExtensionBuilder() |
30 .SetManifest(std::move( | 30 .SetManifest( |
31 DictionaryBuilder() | 31 DictionaryBuilder() |
32 .Set("name", "No default properties") | 32 .Set("name", "No default properties") |
33 .Set("version", "1.0.0") | 33 .Set("version", "1.0.0") |
34 .Set("manifest_version", 2) | 34 .Set("manifest_version", 2) |
35 .Set("browser_action", std::move(DictionaryBuilder().Set( | 35 .Set( |
36 "default_title", "Title"))))) | 36 "browser_action", |
| 37 DictionaryBuilder().Set("default_title", "Title").Build()) |
| 38 .Build()) |
37 .Build(); | 39 .Build(); |
38 | 40 |
39 ASSERT_TRUE(extension.get()); | 41 ASSERT_TRUE(extension.get()); |
40 const ActionInfo* browser_action_info = | 42 const ActionInfo* browser_action_info = |
41 ActionInfo::GetBrowserActionInfo(extension.get()); | 43 ActionInfo::GetBrowserActionInfo(extension.get()); |
42 ASSERT_TRUE(browser_action_info); | 44 ASSERT_TRUE(browser_action_info); |
43 EXPECT_TRUE(browser_action_info->default_icon.empty()); | 45 EXPECT_TRUE(browser_action_info->default_icon.empty()); |
44 } | 46 } |
45 | 47 |
46 TEST_F(BrowserActionManifestTest, | 48 TEST_F(BrowserActionManifestTest, |
47 BrowserActionManifestIcons_StringDefaultIcon) { | 49 BrowserActionManifestIcons_StringDefaultIcon) { |
48 scoped_refptr<const Extension> extension = | 50 scoped_refptr<const Extension> extension = |
49 ExtensionBuilder() | 51 ExtensionBuilder() |
50 .SetManifest(std::move( | 52 .SetManifest( |
51 DictionaryBuilder() | 53 DictionaryBuilder() |
52 .Set("name", "String default icon") | 54 .Set("name", "String default icon") |
53 .Set("version", "1.0.0") | 55 .Set("version", "1.0.0") |
54 .Set("manifest_version", 2) | 56 .Set("manifest_version", 2) |
55 .Set("browser_action", std::move(DictionaryBuilder().Set( | 57 .Set("browser_action", DictionaryBuilder() |
56 "default_icon", "icon.png"))))) | 58 .Set("default_icon", "icon.png") |
| 59 .Build()) |
| 60 .Build()) |
57 .Build(); | 61 .Build(); |
58 | 62 |
59 ASSERT_TRUE(extension.get()); | 63 ASSERT_TRUE(extension.get()); |
60 const ActionInfo* browser_action_info = | 64 const ActionInfo* browser_action_info = |
61 ActionInfo::GetBrowserActionInfo(extension.get()); | 65 ActionInfo::GetBrowserActionInfo(extension.get()); |
62 ASSERT_TRUE(browser_action_info); | 66 ASSERT_TRUE(browser_action_info); |
63 ASSERT_FALSE(browser_action_info->default_icon.empty()); | 67 ASSERT_FALSE(browser_action_info->default_icon.empty()); |
64 | 68 |
65 const ExtensionIconSet& icons = browser_action_info->default_icon; | 69 const ExtensionIconSet& icons = browser_action_info->default_icon; |
66 | 70 |
67 EXPECT_EQ(1u, icons.map().size()); | 71 EXPECT_EQ(1u, icons.map().size()); |
68 EXPECT_EQ("icon.png", icons.Get(extension_misc::EXTENSION_ICON_GIGANTOR, | 72 EXPECT_EQ("icon.png", icons.Get(extension_misc::EXTENSION_ICON_GIGANTOR, |
69 ExtensionIconSet::MATCH_EXACTLY)); | 73 ExtensionIconSet::MATCH_EXACTLY)); |
70 } | 74 } |
71 | 75 |
72 TEST_F(BrowserActionManifestTest, | 76 TEST_F(BrowserActionManifestTest, |
73 BrowserActionManifestIcons_DictDefaultIcon) { | 77 BrowserActionManifestIcons_DictDefaultIcon) { |
74 // Arbitrary sizes should be allowed (useful for various scale factors). | 78 // Arbitrary sizes should be allowed (useful for various scale factors). |
75 scoped_refptr<const Extension> extension = | 79 scoped_refptr<const Extension> extension = |
76 ExtensionBuilder() | 80 ExtensionBuilder() |
77 .SetManifest(std::move( | 81 .SetManifest( |
78 DictionaryBuilder() | 82 DictionaryBuilder() |
79 .Set("name", "Dictionary default icon") | 83 .Set("name", "Dictionary default icon") |
80 .Set("version", "1.0.0") | 84 .Set("version", "1.0.0") |
81 .Set("manifest_version", 2) | 85 .Set("manifest_version", 2) |
82 .Set("browser_action", | 86 .Set("browser_action", |
83 std::move(DictionaryBuilder().Set( | 87 DictionaryBuilder() |
84 "default_icon", | 88 .Set("default_icon", DictionaryBuilder() |
85 std::move(DictionaryBuilder() | 89 .Set("19", "icon19.png") |
86 .Set("19", "icon19.png") | 90 .Set("24", "icon24.png") |
87 .Set("24", "icon24.png") | 91 .Set("38", "icon38.png") |
88 .Set("38", "icon38.png"))))))) | 92 .Build()) |
| 93 .Build()) |
| 94 .Build()) |
89 .Build(); | 95 .Build(); |
90 | 96 |
91 ASSERT_TRUE(extension.get()); | 97 ASSERT_TRUE(extension.get()); |
92 const ActionInfo* browser_action_info = | 98 const ActionInfo* browser_action_info = |
93 ActionInfo::GetBrowserActionInfo(extension.get()); | 99 ActionInfo::GetBrowserActionInfo(extension.get()); |
94 ASSERT_TRUE(browser_action_info); | 100 ASSERT_TRUE(browser_action_info); |
95 ASSERT_FALSE(browser_action_info->default_icon.empty()); | 101 ASSERT_FALSE(browser_action_info->default_icon.empty()); |
96 | 102 |
97 const ExtensionIconSet& icons = browser_action_info->default_icon; | 103 const ExtensionIconSet& icons = browser_action_info->default_icon; |
98 | 104 |
99 // 24px icon should be included. | 105 // 24px icon should be included. |
100 EXPECT_EQ(3u, icons.map().size()); | 106 EXPECT_EQ(3u, icons.map().size()); |
101 EXPECT_EQ("icon19.png", icons.Get(19, ExtensionIconSet::MATCH_EXACTLY)); | 107 EXPECT_EQ("icon19.png", icons.Get(19, ExtensionIconSet::MATCH_EXACTLY)); |
102 EXPECT_EQ("icon24.png", icons.Get(24, ExtensionIconSet::MATCH_EXACTLY)); | 108 EXPECT_EQ("icon24.png", icons.Get(24, ExtensionIconSet::MATCH_EXACTLY)); |
103 EXPECT_EQ("icon38.png", icons.Get(38, ExtensionIconSet::MATCH_EXACTLY)); | 109 EXPECT_EQ("icon38.png", icons.Get(38, ExtensionIconSet::MATCH_EXACTLY)); |
104 } | 110 } |
105 | 111 |
106 TEST_F(BrowserActionManifestTest, | 112 TEST_F(BrowserActionManifestTest, |
107 BrowserActionManifestIcons_InvalidDefaultIcon) { | 113 BrowserActionManifestIcons_InvalidDefaultIcon) { |
108 scoped_ptr<base::DictionaryValue> manifest_value = | 114 scoped_ptr<base::DictionaryValue> manifest_value = |
109 DictionaryBuilder() | 115 DictionaryBuilder() |
110 .Set("name", "Invalid default icon") | 116 .Set("name", "Invalid default icon") |
111 .Set("version", "1.0.0") | 117 .Set("version", "1.0.0") |
112 .Set("manifest_version", 2) | 118 .Set("manifest_version", 2) |
113 .Set("browser_action", | 119 .Set("browser_action", |
114 std::move(DictionaryBuilder().Set( | 120 DictionaryBuilder() |
115 "default_icon", | 121 .Set("default_icon", |
116 std::move(DictionaryBuilder() | 122 DictionaryBuilder() |
117 .Set("19", std::string()) // Invalid value. | 123 .Set("19", std::string()) // Invalid value. |
118 .Set("24", "icon24.png") | 124 .Set("24", "icon24.png") |
119 .Set("38", "icon38.png"))))) | 125 .Set("38", "icon38.png") |
| 126 .Build()) |
| 127 .Build()) |
120 .Build(); | 128 .Build(); |
121 | 129 |
122 base::string16 error = ErrorUtils::FormatErrorMessageUTF16( | 130 base::string16 error = ErrorUtils::FormatErrorMessageUTF16( |
123 errors::kInvalidIconPath, "19"); | 131 errors::kInvalidIconPath, "19"); |
124 LoadAndExpectError( | 132 LoadAndExpectError( |
125 ManifestData(std::move(manifest_value), "Invalid default icon"), | 133 ManifestData(std::move(manifest_value), "Invalid default icon"), |
126 errors::kInvalidIconPath); | 134 errors::kInvalidIconPath); |
127 } | 135 } |
128 | 136 |
129 } // namespace | 137 } // namespace |
130 } // namespace extensions | 138 } // namespace extensions |
OLD | NEW |