Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(675)

Side by Side Diff: chrome/common/extensions/extension_manifests_unittest.cc

Issue 3125031: Remove launch.container='window'. (Closed) Base URL: git://codf21.jail/chromium.git
Patch Set: Created 10 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 "base/command_line.h" 5 #include "base/command_line.h"
6 #include "base/file_path.h" 6 #include "base/file_path.h"
7 #include "base/file_util.h" 7 #include "base/file_util.h"
8 #include "base/path_service.h" 8 #include "base/path_service.h"
9 #include "base/scoped_ptr.h" 9 #include "base/scoped_ptr.h"
10 #include "base/string_util.h" 10 #include "base/string_util.h"
11 #include "chrome/common/chrome_paths.h" 11 #include "chrome/common/chrome_paths.h"
12 #include "chrome/common/chrome_switches.h" 12 #include "chrome/common/chrome_switches.h"
13 #include "chrome/common/extensions/extension.h" 13 #include "chrome/common/extensions/extension.h"
14 #include "chrome/common/extensions/extension_constants.h" 14 #include "chrome/common/extensions/extension_constants.h"
15 #include "chrome/common/extensions/extension_error_utils.h" 15 #include "chrome/common/extensions/extension_error_utils.h"
16 #include "chrome/common/json_value_serializer.h" 16 #include "chrome/common/json_value_serializer.h"
17 #include "testing/gtest/include/gtest/gtest.h" 17 #include "testing/gtest/include/gtest/gtest.h"
18 18
19 namespace errors = extension_manifest_errors; 19 namespace errors = extension_manifest_errors;
20 20
21 class ManifestTest : public testing::Test { 21 class ExtensionManifestTest : public testing::Test {
22 public: 22 public:
23 ManifestTest() : enable_apps_(true) {} 23 ExtensionManifestTest() : enable_apps_(true) {}
24 24
25 protected: 25 protected:
26 Extension* LoadExtension(const std::string& name, 26 Extension* LoadExtension(const std::string& name,
27 std::string* error) { 27 std::string* error) {
28 return LoadExtensionWithLocation(name, Extension::INTERNAL, error); 28 return LoadExtensionWithLocation(name, Extension::INTERNAL, error);
29 } 29 }
30 30
31 Extension* LoadExtensionWithLocation(const std::string& name, 31 Extension* LoadExtensionWithLocation(const std::string& name,
32 Extension::Location location, 32 Extension::Location location,
33 std::string* error) { 33 std::string* error) {
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
69 EXPECT_FALSE(extension.get()) << 69 EXPECT_FALSE(extension.get()) <<
70 "Expected failure loading extension '" << name << 70 "Expected failure loading extension '" << name <<
71 "', but didn't get one."; 71 "', but didn't get one.";
72 EXPECT_TRUE(MatchPatternASCII(error, expected_error)) << name << 72 EXPECT_TRUE(MatchPatternASCII(error, expected_error)) << name <<
73 " expected '" << expected_error << "' but got '" << error << "'"; 73 " expected '" << expected_error << "' but got '" << error << "'";
74 } 74 }
75 75
76 bool enable_apps_; 76 bool enable_apps_;
77 }; 77 };
78 78
79 TEST_F(ManifestTest, AppsDisabledByDefault) { 79 TEST_F(ExtensionManifestTest, AppsDisabledByDefault) {
80 #if defined(OS_CHROMEOS) 80 #if defined(OS_CHROMEOS)
81 // On ChromeOS, apps are enabled by default. 81 // On ChromeOS, apps are enabled by default.
82 if (Extension::AppsAreEnabled()) 82 if (Extension::AppsAreEnabled())
83 return; 83 return;
84 #endif 84 #endif
85 85
86 enable_apps_ = false; 86 enable_apps_ = false;
87 LoadAndExpectError("launch_local_path.json", errors::kAppsNotEnabled); 87 LoadAndExpectError("launch_local_path.json", errors::kAppsNotEnabled);
88 } 88 }
89 89
90 TEST_F(ManifestTest, ValidApp) { 90 TEST_F(ExtensionManifestTest, ValidApp) {
91 scoped_ptr<Extension> extension(LoadAndExpectSuccess("valid_app.json")); 91 scoped_ptr<Extension> extension(LoadAndExpectSuccess("valid_app.json"));
92 ASSERT_EQ(2u, extension->web_extent().patterns().size()); 92 ASSERT_EQ(2u, extension->web_extent().patterns().size());
93 EXPECT_EQ("http://www.google.com/mail/*", 93 EXPECT_EQ("http://www.google.com/mail/*",
94 extension->web_extent().patterns()[0].GetAsString()); 94 extension->web_extent().patterns()[0].GetAsString());
95 EXPECT_EQ("http://www.google.com/foobar/*", 95 EXPECT_EQ("http://www.google.com/foobar/*",
96 extension->web_extent().patterns()[1].GetAsString()); 96 extension->web_extent().patterns()[1].GetAsString());
97 EXPECT_EQ(Extension::LAUNCH_WINDOW, extension->launch_container()); 97 EXPECT_EQ(Extension::LAUNCH_TAB, extension->launch_container());
98 EXPECT_EQ(false, extension->launch_fullscreen()); 98 EXPECT_EQ(false, extension->launch_fullscreen());
99 EXPECT_EQ("http://www.google.com/mail/", extension->launch_web_url()); 99 EXPECT_EQ("http://www.google.com/mail/", extension->launch_web_url());
100 } 100 }
101 101
102 TEST_F(ManifestTest, AppWebUrls) { 102 TEST_F(ExtensionManifestTest, AppWebUrls) {
103 LoadAndExpectError("web_urls_wrong_type.json", 103 LoadAndExpectError("web_urls_wrong_type.json",
104 errors::kInvalidWebURLs); 104 errors::kInvalidWebURLs);
105 LoadAndExpectError("web_urls_invalid_1.json", 105 LoadAndExpectError("web_urls_invalid_1.json",
106 ExtensionErrorUtils::FormatErrorMessage( 106 ExtensionErrorUtils::FormatErrorMessage(
107 errors::kInvalidWebURL, "0")); 107 errors::kInvalidWebURL, "0"));
108 LoadAndExpectError("web_urls_invalid_2.json", 108 LoadAndExpectError("web_urls_invalid_2.json",
109 ExtensionErrorUtils::FormatErrorMessage( 109 ExtensionErrorUtils::FormatErrorMessage(
110 errors::kInvalidWebURL, "0")); 110 errors::kInvalidWebURL, "0"));
111 LoadAndExpectError("web_urls_invalid_3.json", 111 LoadAndExpectError("web_urls_invalid_3.json",
112 ExtensionErrorUtils::FormatErrorMessage( 112 ExtensionErrorUtils::FormatErrorMessage(
113 errors::kInvalidWebURL, "0")); 113 errors::kInvalidWebURL, "0"));
114 114
115 scoped_ptr<Extension> extension( 115 scoped_ptr<Extension> extension(
116 LoadAndExpectSuccess("web_urls_default.json")); 116 LoadAndExpectSuccess("web_urls_default.json"));
117 ASSERT_EQ(1u, extension->web_extent().patterns().size()); 117 ASSERT_EQ(1u, extension->web_extent().patterns().size());
118 EXPECT_EQ("*://www.google.com/*", 118 EXPECT_EQ("*://www.google.com/*",
119 extension->web_extent().patterns()[0].GetAsString()); 119 extension->web_extent().patterns()[0].GetAsString());
120 } 120 }
121 121
122 TEST_F(ManifestTest, AppBrowseUrls) { 122 TEST_F(ExtensionManifestTest, AppBrowseUrls) {
123 LoadAndExpectError("browse_urls_wrong_type.json", 123 LoadAndExpectError("browse_urls_wrong_type.json",
124 errors::kInvalidBrowseURLs); 124 errors::kInvalidBrowseURLs);
125 LoadAndExpectError("browse_urls_invalid_1.json", 125 LoadAndExpectError("browse_urls_invalid_1.json",
126 ExtensionErrorUtils::FormatErrorMessage( 126 ExtensionErrorUtils::FormatErrorMessage(
127 errors::kInvalidBrowseURL, "0")); 127 errors::kInvalidBrowseURL, "0"));
128 LoadAndExpectError("browse_urls_invalid_2.json", 128 LoadAndExpectError("browse_urls_invalid_2.json",
129 ExtensionErrorUtils::FormatErrorMessage( 129 ExtensionErrorUtils::FormatErrorMessage(
130 errors::kInvalidBrowseURL, "0")); 130 errors::kInvalidBrowseURL, "0"));
131 LoadAndExpectError("browse_urls_invalid_3.json", 131 LoadAndExpectError("browse_urls_invalid_3.json",
132 ExtensionErrorUtils::FormatErrorMessage( 132 ExtensionErrorUtils::FormatErrorMessage(
133 errors::kInvalidBrowseURL, "0")); 133 errors::kInvalidBrowseURL, "0"));
134 134
135 scoped_ptr<Extension> extension( 135 scoped_ptr<Extension> extension(
136 LoadAndExpectSuccess("browse_urls_default.json")); 136 LoadAndExpectSuccess("browse_urls_default.json"));
137 EXPECT_EQ(0u, extension->browse_extent().patterns().size()); 137 EXPECT_EQ(0u, extension->browse_extent().patterns().size());
138 138
139 extension.reset( 139 extension.reset(
140 LoadAndExpectSuccess("browse_urls_valid.json")); 140 LoadAndExpectSuccess("browse_urls_valid.json"));
141 ASSERT_EQ(1u, extension->browse_extent().patterns().size()); 141 ASSERT_EQ(1u, extension->browse_extent().patterns().size());
142 EXPECT_EQ("https://www.google.com/accounts/*", 142 EXPECT_EQ("https://www.google.com/accounts/*",
143 extension->browse_extent().patterns()[0].GetAsString()); 143 extension->browse_extent().patterns()[0].GetAsString());
144 } 144 }
145 145
146 TEST_F(ManifestTest, AppLaunchContainer) { 146 TEST_F(ExtensionManifestTest, AppLaunchContainer) {
147 scoped_ptr<Extension> extension; 147 scoped_ptr<Extension> extension;
148 148
149 extension.reset(LoadAndExpectSuccess("launch_tab.json")); 149 extension.reset(LoadAndExpectSuccess("launch_tab.json"));
150 EXPECT_EQ(Extension::LAUNCH_TAB, extension->launch_container()); 150 EXPECT_EQ(Extension::LAUNCH_TAB, extension->launch_container());
151 151
152 extension.reset(LoadAndExpectSuccess("launch_window.json"));
153 EXPECT_EQ(Extension::LAUNCH_WINDOW, extension->launch_container());
154
155 extension.reset(LoadAndExpectSuccess("launch_panel.json")); 152 extension.reset(LoadAndExpectSuccess("launch_panel.json"));
156 EXPECT_EQ(Extension::LAUNCH_PANEL, extension->launch_container()); 153 EXPECT_EQ(Extension::LAUNCH_PANEL, extension->launch_container());
157 154
158 extension.reset(LoadAndExpectSuccess("launch_default.json")); 155 extension.reset(LoadAndExpectSuccess("launch_default.json"));
159 EXPECT_EQ(Extension::LAUNCH_TAB, extension->launch_container()); 156 EXPECT_EQ(Extension::LAUNCH_TAB, extension->launch_container());
160 157
161 extension.reset(LoadAndExpectSuccess("launch_fullscreen.json")); 158 extension.reset(LoadAndExpectSuccess("launch_fullscreen.json"));
162 EXPECT_EQ(true, extension->launch_fullscreen()); 159 EXPECT_EQ(true, extension->launch_fullscreen());
163 160
164 extension.reset(LoadAndExpectSuccess("launch_width.json")); 161 extension.reset(LoadAndExpectSuccess("launch_width.json"));
165 EXPECT_EQ(640, extension->launch_width()); 162 EXPECT_EQ(640, extension->launch_width());
166 163
167 extension.reset(LoadAndExpectSuccess("launch_height.json")); 164 extension.reset(LoadAndExpectSuccess("launch_height.json"));
168 EXPECT_EQ(480, extension->launch_height()); 165 EXPECT_EQ(480, extension->launch_height());
169 166
167 LoadAndExpectError("launch_window.json",
168 errors::kInvalidLaunchContainer);
170 LoadAndExpectError("launch_container_invalid_type.json", 169 LoadAndExpectError("launch_container_invalid_type.json",
171 errors::kInvalidLaunchContainer); 170 errors::kInvalidLaunchContainer);
172 LoadAndExpectError("launch_container_invalid_value.json", 171 LoadAndExpectError("launch_container_invalid_value.json",
173 errors::kInvalidLaunchContainer); 172 errors::kInvalidLaunchContainer);
174 LoadAndExpectError("launch_container_without_launch_url.json", 173 LoadAndExpectError("launch_container_without_launch_url.json",
175 errors::kLaunchURLRequired); 174 errors::kLaunchURLRequired);
176 LoadAndExpectError("launch_fullscreen_invalid.json", 175 LoadAndExpectError("launch_fullscreen_invalid.json",
177 errors::kInvalidLaunchFullscreen); 176 errors::kInvalidLaunchFullscreen);
178 LoadAndExpectError("launch_width_invalid.json", 177 LoadAndExpectError("launch_width_invalid.json",
179 errors::kInvalidLaunchWidthContainer); 178 errors::kInvalidLaunchWidthContainer);
180 LoadAndExpectError("launch_width_negative.json", 179 LoadAndExpectError("launch_width_negative.json",
181 errors::kInvalidLaunchWidth); 180 errors::kInvalidLaunchWidth);
182 LoadAndExpectError("launch_height_invalid.json", 181 LoadAndExpectError("launch_height_invalid.json",
183 errors::kInvalidLaunchHeightContainer); 182 errors::kInvalidLaunchHeightContainer);
184 LoadAndExpectError("launch_height_negative.json", 183 LoadAndExpectError("launch_height_negative.json",
185 errors::kInvalidLaunchHeight); 184 errors::kInvalidLaunchHeight);
186 } 185 }
187 186
188 TEST_F(ManifestTest, AppLaunchURL) { 187 TEST_F(ExtensionManifestTest, AppLaunchURL) {
189 LoadAndExpectError("launch_path_and_url.json", 188 LoadAndExpectError("launch_path_and_url.json",
190 errors::kLaunchPathAndURLAreExclusive); 189 errors::kLaunchPathAndURLAreExclusive);
191 LoadAndExpectError("launch_path_invalid_type.json", 190 LoadAndExpectError("launch_path_invalid_type.json",
192 errors::kInvalidLaunchLocalPath); 191 errors::kInvalidLaunchLocalPath);
193 LoadAndExpectError("launch_path_invalid_value.json", 192 LoadAndExpectError("launch_path_invalid_value.json",
194 errors::kInvalidLaunchLocalPath); 193 errors::kInvalidLaunchLocalPath);
195 LoadAndExpectError("launch_url_invalid_type.json", 194 LoadAndExpectError("launch_url_invalid_type.json",
196 errors::kInvalidLaunchWebURL); 195 errors::kInvalidLaunchWebURL);
197 196
198 scoped_ptr<Extension> extension; 197 scoped_ptr<Extension> extension;
199 extension.reset(LoadAndExpectSuccess("launch_local_path.json")); 198 extension.reset(LoadAndExpectSuccess("launch_local_path.json"));
200 EXPECT_EQ(extension->url().spec() + "launch.html", 199 EXPECT_EQ(extension->url().spec() + "launch.html",
201 extension->GetFullLaunchURL().spec()); 200 extension->GetFullLaunchURL().spec());
202 201
203 LoadAndExpectError("launch_web_url_relative.json", 202 LoadAndExpectError("launch_web_url_relative.json",
204 errors::kInvalidLaunchWebURL); 203 errors::kInvalidLaunchWebURL);
205 204
206 extension.reset(LoadAndExpectSuccess("launch_web_url_absolute.json")); 205 extension.reset(LoadAndExpectSuccess("launch_web_url_absolute.json"));
207 EXPECT_EQ(GURL("http://www.google.com/launch.html"), 206 EXPECT_EQ(GURL("http://www.google.com/launch.html"),
208 extension->GetFullLaunchURL()); 207 extension->GetFullLaunchURL());
209 } 208 }
210 209
211 TEST_F(ManifestTest, Override) { 210 TEST_F(ExtensionManifestTest, Override) {
212 LoadAndExpectError("override_newtab_and_history.json", 211 LoadAndExpectError("override_newtab_and_history.json",
213 errors::kMultipleOverrides); 212 errors::kMultipleOverrides);
214 LoadAndExpectError("override_invalid_page.json", 213 LoadAndExpectError("override_invalid_page.json",
215 errors::kInvalidChromeURLOverrides); 214 errors::kInvalidChromeURLOverrides);
216 215
217 scoped_ptr<Extension> extension; 216 scoped_ptr<Extension> extension;
218 217
219 extension.reset(LoadAndExpectSuccess("override_new_tab.json")); 218 extension.reset(LoadAndExpectSuccess("override_new_tab.json"));
220 EXPECT_EQ(extension->url().spec() + "newtab.html", 219 EXPECT_EQ(extension->url().spec() + "newtab.html",
221 extension->GetChromeURLOverrides().find("newtab")->second.spec()); 220 extension->GetChromeURLOverrides().find("newtab")->second.spec());
222 221
223 extension.reset(LoadAndExpectSuccess("override_history.json")); 222 extension.reset(LoadAndExpectSuccess("override_history.json"));
224 EXPECT_EQ(extension->url().spec() + "history.html", 223 EXPECT_EQ(extension->url().spec() + "history.html",
225 extension->GetChromeURLOverrides().find("history")->second.spec()); 224 extension->GetChromeURLOverrides().find("history")->second.spec());
226 } 225 }
227 226
228 TEST_F(ManifestTest, ChromeURLPermissionInvalid) { 227 TEST_F(ExtensionManifestTest, ChromeURLPermissionInvalid) {
229 LoadAndExpectError("permission_chrome_url_invalid.json", 228 LoadAndExpectError("permission_chrome_url_invalid.json",
230 errors::kInvalidPermissionScheme); 229 errors::kInvalidPermissionScheme);
231 } 230 }
232 231
233 TEST_F(ManifestTest, ChromeResourcesPermissionValidOnlyForComponents) { 232 TEST_F(ExtensionManifestTest, ChromeResourcesPermissionValidOnlyForComponents) {
234 LoadAndExpectError("permission_chrome_resources_url.json", 233 LoadAndExpectError("permission_chrome_resources_url.json",
235 errors::kInvalidPermissionScheme); 234 errors::kInvalidPermissionScheme);
236 std::string error; 235 std::string error;
237 scoped_ptr<Extension> extension; 236 scoped_ptr<Extension> extension;
238 extension.reset(LoadExtensionWithLocation( 237 extension.reset(LoadExtensionWithLocation(
239 "permission_chrome_resources_url.json", 238 "permission_chrome_resources_url.json",
240 Extension::COMPONENT, 239 Extension::COMPONENT,
241 &error)); 240 &error));
242 EXPECT_EQ("", error); 241 EXPECT_EQ("", error);
243 } 242 }
244 243
245 TEST_F(ManifestTest, ChromeURLContentScriptInvalid) { 244 TEST_F(ExtensionManifestTest, ChromeURLContentScriptInvalid) {
246 LoadAndExpectError("content_script_chrome_url_invalid.json", 245 LoadAndExpectError("content_script_chrome_url_invalid.json",
247 errors::kInvalidMatch); 246 errors::kInvalidMatch);
248 } 247 }
249 248
250 TEST_F(ManifestTest, DevToolsExtensions) { 249 TEST_F(ExtensionManifestTest, DevToolsExtensions) {
251 LoadAndExpectError("devtools_extension_no_permissions.json", 250 LoadAndExpectError("devtools_extension_no_permissions.json",
252 errors::kDevToolsExperimental); 251 errors::kDevToolsExperimental);
253 LoadAndExpectError("devtools_extension_url_invalid_type.json", 252 LoadAndExpectError("devtools_extension_url_invalid_type.json",
254 errors::kInvalidDevToolsPage); 253 errors::kInvalidDevToolsPage);
255 254
256 CommandLine old_command_line = *CommandLine::ForCurrentProcess(); 255 CommandLine old_command_line = *CommandLine::ForCurrentProcess();
257 CommandLine::ForCurrentProcess()->AppendSwitch( 256 CommandLine::ForCurrentProcess()->AppendSwitch(
258 switches::kEnableExperimentalExtensionApis); 257 switches::kEnableExperimentalExtensionApis);
259 258
260 scoped_ptr<Extension> extension; 259 scoped_ptr<Extension> extension;
261 extension.reset(LoadAndExpectSuccess("devtools_extension.json")); 260 extension.reset(LoadAndExpectSuccess("devtools_extension.json"));
262 EXPECT_EQ(extension->url().spec() + "devtools.html", 261 EXPECT_EQ(extension->url().spec() + "devtools.html",
263 extension->devtools_url().spec()); 262 extension->devtools_url().spec());
264 *CommandLine::ForCurrentProcess() = old_command_line; 263 *CommandLine::ForCurrentProcess() = old_command_line;
265 } 264 }
266 265
267 TEST_F(ManifestTest, DisallowHybridApps) { 266 TEST_F(ExtensionManifestTest, DisallowHybridApps) {
268 LoadAndExpectError("disallow_hybrid_1.json", 267 LoadAndExpectError("disallow_hybrid_1.json",
269 errors::kHostedAppsCannotIncludeExtensionFeatures); 268 errors::kHostedAppsCannotIncludeExtensionFeatures);
270 LoadAndExpectError("disallow_hybrid_2.json", 269 LoadAndExpectError("disallow_hybrid_2.json",
271 errors::kHostedAppsCannotIncludeExtensionFeatures); 270 errors::kHostedAppsCannotIncludeExtensionFeatures);
272 } 271 }
OLDNEW
« no previous file with comments | « chrome/common/extensions/extension.cc ('k') | chrome/test/data/extensions/manifest_tests/browse_urls_default.json » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698