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

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

Issue 6766002: Replace bools in extension creation with flags. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: For landing Created 9 years, 9 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "chrome/common/extensions/extension.h" 5 #include "chrome/common/extensions/extension.h"
6 6
7 #if defined(TOOLKIT_GTK) 7 #if defined(TOOLKIT_GTK)
8 #include <gtk/gtk.h> 8 #include <gtk/gtk.h>
9 #endif 9 #endif
10 10
11 #include "base/format_macros.h" 11 #include "base/format_macros.h"
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
98 .AppendASCII("1.0.0.0") 98 .AppendASCII("1.0.0.0")
99 .Append(Extension::kManifestFilename); 99 .Append(Extension::kManifestFilename);
100 100
101 JSONFileValueSerializer serializer(extensions_path); 101 JSONFileValueSerializer serializer(extensions_path);
102 scoped_ptr<DictionaryValue> valid_value( 102 scoped_ptr<DictionaryValue> valid_value(
103 static_cast<DictionaryValue*>(serializer.Deserialize(&error_code, 103 static_cast<DictionaryValue*>(serializer.Deserialize(&error_code,
104 &error))); 104 &error)));
105 EXPECT_EQ("", error); 105 EXPECT_EQ("", error);
106 EXPECT_EQ(0, error_code); 106 EXPECT_EQ(0, error_code);
107 ASSERT_TRUE(valid_value.get()); 107 ASSERT_TRUE(valid_value.get());
108 ASSERT_TRUE(extension.InitFromValue(*valid_value, true, false, &error)); 108 ASSERT_TRUE(extension.InitFromValue(*valid_value, Extension::REQUIRE_KEY,
109 &error));
109 ASSERT_EQ("", error); 110 ASSERT_EQ("", error);
110 EXPECT_EQ("en_US", extension.default_locale()); 111 EXPECT_EQ("en_US", extension.default_locale());
111 112
112 scoped_ptr<DictionaryValue> input_value; 113 scoped_ptr<DictionaryValue> input_value;
113 114
114 // Test missing and invalid versions 115 // Test missing and invalid versions
115 input_value.reset(valid_value->DeepCopy()); 116 input_value.reset(valid_value->DeepCopy());
116 input_value->Remove(keys::kVersion, NULL); 117 input_value->Remove(keys::kVersion, NULL);
117 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); 118 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
119 &error));
118 EXPECT_EQ(errors::kInvalidVersion, error); 120 EXPECT_EQ(errors::kInvalidVersion, error);
119 121
120 input_value->SetInteger(keys::kVersion, 42); 122 input_value->SetInteger(keys::kVersion, 42);
121 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); 123 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
124 &error));
122 EXPECT_EQ(errors::kInvalidVersion, error); 125 EXPECT_EQ(errors::kInvalidVersion, error);
123 126
124 // Test missing and invalid names. 127 // Test missing and invalid names.
125 input_value.reset(valid_value->DeepCopy()); 128 input_value.reset(valid_value->DeepCopy());
126 input_value->Remove(keys::kName, NULL); 129 input_value->Remove(keys::kName, NULL);
127 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); 130 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
131 &error));
128 EXPECT_EQ(errors::kInvalidName, error); 132 EXPECT_EQ(errors::kInvalidName, error);
129 133
130 input_value->SetInteger(keys::kName, 42); 134 input_value->SetInteger(keys::kName, 42);
131 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); 135 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
136 &error));
132 EXPECT_EQ(errors::kInvalidName, error); 137 EXPECT_EQ(errors::kInvalidName, error);
133 138
134 // Test invalid description 139 // Test invalid description
135 input_value.reset(valid_value->DeepCopy()); 140 input_value.reset(valid_value->DeepCopy());
136 input_value->SetInteger(keys::kDescription, 42); 141 input_value->SetInteger(keys::kDescription, 42);
137 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); 142 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
143 &error));
138 EXPECT_EQ(errors::kInvalidDescription, error); 144 EXPECT_EQ(errors::kInvalidDescription, error);
139 145
140 // Test invalid icons 146 // Test invalid icons
141 input_value.reset(valid_value->DeepCopy()); 147 input_value.reset(valid_value->DeepCopy());
142 input_value->SetInteger(keys::kIcons, 42); 148 input_value->SetInteger(keys::kIcons, 42);
143 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); 149 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
150 &error));
144 EXPECT_EQ(errors::kInvalidIcons, error); 151 EXPECT_EQ(errors::kInvalidIcons, error);
145 152
146 // Test invalid icon paths 153 // Test invalid icon paths
147 input_value.reset(valid_value->DeepCopy()); 154 input_value.reset(valid_value->DeepCopy());
148 DictionaryValue* icons = NULL; 155 DictionaryValue* icons = NULL;
149 input_value->GetDictionary(keys::kIcons, &icons); 156 input_value->GetDictionary(keys::kIcons, &icons);
150 ASSERT_FALSE(NULL == icons); 157 ASSERT_FALSE(NULL == icons);
151 icons->SetInteger(base::IntToString(128), 42); 158 icons->SetInteger(base::IntToString(128), 42);
152 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); 159 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
160 &error));
153 EXPECT_TRUE(MatchPattern(error, errors::kInvalidIconPath)); 161 EXPECT_TRUE(MatchPattern(error, errors::kInvalidIconPath));
154 162
155 // Test invalid user scripts list 163 // Test invalid user scripts list
156 input_value.reset(valid_value->DeepCopy()); 164 input_value.reset(valid_value->DeepCopy());
157 input_value->SetInteger(keys::kContentScripts, 42); 165 input_value->SetInteger(keys::kContentScripts, 42);
158 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); 166 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
167 &error));
159 EXPECT_EQ(errors::kInvalidContentScriptsList, error); 168 EXPECT_EQ(errors::kInvalidContentScriptsList, error);
160 169
161 // Test invalid user script item 170 // Test invalid user script item
162 input_value.reset(valid_value->DeepCopy()); 171 input_value.reset(valid_value->DeepCopy());
163 ListValue* content_scripts = NULL; 172 ListValue* content_scripts = NULL;
164 input_value->GetList(keys::kContentScripts, &content_scripts); 173 input_value->GetList(keys::kContentScripts, &content_scripts);
165 ASSERT_FALSE(NULL == content_scripts); 174 ASSERT_FALSE(NULL == content_scripts);
166 content_scripts->Set(0, Value::CreateIntegerValue(42)); 175 content_scripts->Set(0, Value::CreateIntegerValue(42));
167 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); 176 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
177 &error));
168 EXPECT_TRUE(MatchPattern(error, errors::kInvalidContentScript)); 178 EXPECT_TRUE(MatchPattern(error, errors::kInvalidContentScript));
169 179
170 // Test missing and invalid matches array 180 // Test missing and invalid matches array
171 input_value.reset(valid_value->DeepCopy()); 181 input_value.reset(valid_value->DeepCopy());
172 input_value->GetList(keys::kContentScripts, &content_scripts); 182 input_value->GetList(keys::kContentScripts, &content_scripts);
173 DictionaryValue* user_script = NULL; 183 DictionaryValue* user_script = NULL;
174 content_scripts->GetDictionary(0, &user_script); 184 content_scripts->GetDictionary(0, &user_script);
175 user_script->Remove(keys::kMatches, NULL); 185 user_script->Remove(keys::kMatches, NULL);
176 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); 186 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
187 &error));
177 EXPECT_TRUE(MatchPattern(error, errors::kInvalidMatches)); 188 EXPECT_TRUE(MatchPattern(error, errors::kInvalidMatches));
178 189
179 user_script->Set(keys::kMatches, Value::CreateIntegerValue(42)); 190 user_script->Set(keys::kMatches, Value::CreateIntegerValue(42));
180 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); 191 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
192 &error));
181 EXPECT_TRUE(MatchPattern(error, errors::kInvalidMatches)); 193 EXPECT_TRUE(MatchPattern(error, errors::kInvalidMatches));
182 194
183 ListValue* matches = new ListValue; 195 ListValue* matches = new ListValue;
184 user_script->Set(keys::kMatches, matches); 196 user_script->Set(keys::kMatches, matches);
185 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); 197 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
198 &error));
186 EXPECT_TRUE(MatchPattern(error, errors::kInvalidMatchCount)); 199 EXPECT_TRUE(MatchPattern(error, errors::kInvalidMatchCount));
187 200
188 // Test invalid match element 201 // Test invalid match element
189 matches->Set(0, Value::CreateIntegerValue(42)); 202 matches->Set(0, Value::CreateIntegerValue(42));
190 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); 203 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
204 &error));
191 EXPECT_TRUE(MatchPattern(error, errors::kInvalidMatch)); 205 EXPECT_TRUE(MatchPattern(error, errors::kInvalidMatch));
192 206
193 matches->Set(0, Value::CreateStringValue("chrome://*/*")); 207 matches->Set(0, Value::CreateStringValue("chrome://*/*"));
194 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); 208 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
209 &error));
195 EXPECT_TRUE(MatchPattern(error, errors::kInvalidMatch)); 210 EXPECT_TRUE(MatchPattern(error, errors::kInvalidMatch));
196 211
197 // Test missing and invalid files array 212 // Test missing and invalid files array
198 input_value.reset(valid_value->DeepCopy()); 213 input_value.reset(valid_value->DeepCopy());
199 input_value->GetList(keys::kContentScripts, &content_scripts); 214 input_value->GetList(keys::kContentScripts, &content_scripts);
200 content_scripts->GetDictionary(0, &user_script); 215 content_scripts->GetDictionary(0, &user_script);
201 user_script->Remove(keys::kJs, NULL); 216 user_script->Remove(keys::kJs, NULL);
202 user_script->Remove(keys::kCss, NULL); 217 user_script->Remove(keys::kCss, NULL);
203 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); 218 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
219 &error));
204 EXPECT_TRUE(MatchPattern(error, errors::kMissingFile)); 220 EXPECT_TRUE(MatchPattern(error, errors::kMissingFile));
205 221
206 user_script->Set(keys::kJs, Value::CreateIntegerValue(42)); 222 user_script->Set(keys::kJs, Value::CreateIntegerValue(42));
207 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); 223 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
224 &error));
208 EXPECT_TRUE(MatchPattern(error, errors::kInvalidJsList)); 225 EXPECT_TRUE(MatchPattern(error, errors::kInvalidJsList));
209 226
210 user_script->Set(keys::kCss, new ListValue); 227 user_script->Set(keys::kCss, new ListValue);
211 user_script->Set(keys::kJs, new ListValue); 228 user_script->Set(keys::kJs, new ListValue);
212 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); 229 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
230 &error));
213 EXPECT_TRUE(MatchPattern(error, errors::kMissingFile)); 231 EXPECT_TRUE(MatchPattern(error, errors::kMissingFile));
214 user_script->Remove(keys::kCss, NULL); 232 user_script->Remove(keys::kCss, NULL);
215 233
216 ListValue* files = new ListValue; 234 ListValue* files = new ListValue;
217 user_script->Set(keys::kJs, files); 235 user_script->Set(keys::kJs, files);
218 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); 236 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
237 &error));
219 EXPECT_TRUE(MatchPattern(error, errors::kMissingFile)); 238 EXPECT_TRUE(MatchPattern(error, errors::kMissingFile));
220 239
221 // Test invalid file element 240 // Test invalid file element
222 files->Set(0, Value::CreateIntegerValue(42)); 241 files->Set(0, Value::CreateIntegerValue(42));
223 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); 242 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
243 &error));
224 EXPECT_TRUE(MatchPattern(error, errors::kInvalidJs)); 244 EXPECT_TRUE(MatchPattern(error, errors::kInvalidJs));
225 245
226 user_script->Remove(keys::kJs, NULL); 246 user_script->Remove(keys::kJs, NULL);
227 // Test the css element 247 // Test the css element
228 user_script->Set(keys::kCss, Value::CreateIntegerValue(42)); 248 user_script->Set(keys::kCss, Value::CreateIntegerValue(42));
229 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); 249 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
250 &error));
230 EXPECT_TRUE(MatchPattern(error, errors::kInvalidCssList)); 251 EXPECT_TRUE(MatchPattern(error, errors::kInvalidCssList));
231 252
232 // Test invalid file element 253 // Test invalid file element
233 ListValue* css_files = new ListValue; 254 ListValue* css_files = new ListValue;
234 user_script->Set(keys::kCss, css_files); 255 user_script->Set(keys::kCss, css_files);
235 css_files->Set(0, Value::CreateIntegerValue(42)); 256 css_files->Set(0, Value::CreateIntegerValue(42));
236 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); 257 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
258 &error));
237 EXPECT_TRUE(MatchPattern(error, errors::kInvalidCss)); 259 EXPECT_TRUE(MatchPattern(error, errors::kInvalidCss));
238 260
239 // Test missing and invalid permissions array 261 // Test missing and invalid permissions array
240 input_value.reset(valid_value->DeepCopy()); 262 input_value.reset(valid_value->DeepCopy());
241 EXPECT_TRUE(extension.InitFromValue(*input_value, true, false, &error)); 263 EXPECT_TRUE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
264 &error));
242 265
243 ListValue* permissions = NULL; 266 ListValue* permissions = NULL;
244 input_value->GetList(keys::kPermissions, &permissions); 267 input_value->GetList(keys::kPermissions, &permissions);
245 ASSERT_FALSE(NULL == permissions); 268 ASSERT_FALSE(NULL == permissions);
246 269
247 permissions = new ListValue; 270 permissions = new ListValue;
248 input_value->Set(keys::kPermissions, permissions); 271 input_value->Set(keys::kPermissions, permissions);
249 EXPECT_TRUE(extension.InitFromValue(*input_value, true, false, &error)); 272 EXPECT_TRUE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
273 &error));
250 274
251 input_value->Set(keys::kPermissions, Value::CreateIntegerValue(9)); 275 input_value->Set(keys::kPermissions, Value::CreateIntegerValue(9));
252 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); 276 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
277 &error));
253 EXPECT_TRUE(MatchPattern(error, errors::kInvalidPermissions)); 278 EXPECT_TRUE(MatchPattern(error, errors::kInvalidPermissions));
254 279
255 input_value.reset(valid_value->DeepCopy()); 280 input_value.reset(valid_value->DeepCopy());
256 input_value->GetList(keys::kPermissions, &permissions); 281 input_value->GetList(keys::kPermissions, &permissions);
257 permissions->Set(0, Value::CreateIntegerValue(24)); 282 permissions->Set(0, Value::CreateIntegerValue(24));
258 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); 283 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
284 &error));
259 EXPECT_TRUE(MatchPattern(error, errors::kInvalidPermission)); 285 EXPECT_TRUE(MatchPattern(error, errors::kInvalidPermission));
260 286
261 // We allow unknown API permissions, so this will be valid until we better 287 // We allow unknown API permissions, so this will be valid until we better
262 // distinguish between API and host permissions. 288 // distinguish between API and host permissions.
263 permissions->Set(0, Value::CreateStringValue("www.google.com")); 289 permissions->Set(0, Value::CreateStringValue("www.google.com"));
264 EXPECT_TRUE(extension.InitFromValue(*input_value, true, false, &error)); 290 EXPECT_TRUE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
291 &error));
265 292
266 // Multiple page actions are not allowed. 293 // Multiple page actions are not allowed.
267 input_value.reset(valid_value->DeepCopy()); 294 input_value.reset(valid_value->DeepCopy());
268 DictionaryValue* action = new DictionaryValue; 295 DictionaryValue* action = new DictionaryValue;
269 action->SetString(keys::kPageActionId, "MyExtensionActionId"); 296 action->SetString(keys::kPageActionId, "MyExtensionActionId");
270 action->SetString(keys::kName, "MyExtensionActionName"); 297 action->SetString(keys::kName, "MyExtensionActionName");
271 ListValue* action_list = new ListValue; 298 ListValue* action_list = new ListValue;
272 action_list->Append(action->DeepCopy()); 299 action_list->Append(action->DeepCopy());
273 action_list->Append(action); 300 action_list->Append(action);
274 input_value->Set(keys::kPageActions, action_list); 301 input_value->Set(keys::kPageActions, action_list);
275 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); 302 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
303 &error));
276 EXPECT_STREQ(errors::kInvalidPageActionsListSize, error.c_str()); 304 EXPECT_STREQ(errors::kInvalidPageActionsListSize, error.c_str());
277 305
278 // Test invalid options page url. 306 // Test invalid options page url.
279 input_value.reset(valid_value->DeepCopy()); 307 input_value.reset(valid_value->DeepCopy());
280 input_value->Set(keys::kOptionsPage, Value::CreateNullValue()); 308 input_value->Set(keys::kOptionsPage, Value::CreateNullValue());
281 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); 309 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
310 &error));
282 EXPECT_TRUE(MatchPattern(error, errors::kInvalidOptionsPage)); 311 EXPECT_TRUE(MatchPattern(error, errors::kInvalidOptionsPage));
283 312
284 // Test invalid/empty default locale. 313 // Test invalid/empty default locale.
285 input_value.reset(valid_value->DeepCopy()); 314 input_value.reset(valid_value->DeepCopy());
286 input_value->Set(keys::kDefaultLocale, Value::CreateIntegerValue(5)); 315 input_value->Set(keys::kDefaultLocale, Value::CreateIntegerValue(5));
287 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); 316 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
317 &error));
288 EXPECT_TRUE(MatchPattern(error, errors::kInvalidDefaultLocale)); 318 EXPECT_TRUE(MatchPattern(error, errors::kInvalidDefaultLocale));
289 319
290 input_value->Set(keys::kDefaultLocale, Value::CreateStringValue("")); 320 input_value->Set(keys::kDefaultLocale, Value::CreateStringValue(""));
291 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); 321 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
322 &error));
292 EXPECT_TRUE(MatchPattern(error, errors::kInvalidDefaultLocale)); 323 EXPECT_TRUE(MatchPattern(error, errors::kInvalidDefaultLocale));
293 324
294 // Test invalid minimum_chrome_version. 325 // Test invalid minimum_chrome_version.
295 input_value.reset(valid_value->DeepCopy()); 326 input_value.reset(valid_value->DeepCopy());
296 input_value->Set(keys::kMinimumChromeVersion, Value::CreateIntegerValue(42)); 327 input_value->Set(keys::kMinimumChromeVersion, Value::CreateIntegerValue(42));
297 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); 328 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
329 &error));
298 EXPECT_TRUE(MatchPattern(error, errors::kInvalidMinimumChromeVersion)); 330 EXPECT_TRUE(MatchPattern(error, errors::kInvalidMinimumChromeVersion));
299 331
300 #if !defined(OS_MACOSX) 332 #if !defined(OS_MACOSX)
301 // TODO(aa): The version isn't stamped into the unit test binary on mac. 333 // TODO(aa): The version isn't stamped into the unit test binary on mac.
302 input_value->Set(keys::kMinimumChromeVersion, 334 input_value->Set(keys::kMinimumChromeVersion,
303 Value::CreateStringValue("88.8")); 335 Value::CreateStringValue("88.8"));
304 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); 336 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY,
337 &error));
305 EXPECT_TRUE(MatchPattern(error, errors::kChromeVersionTooLow)); 338 EXPECT_TRUE(MatchPattern(error, errors::kChromeVersionTooLow));
306 #endif 339 #endif
307 } 340 }
308 341
309 TEST(ExtensionTest, InitFromValueValid) { 342 TEST(ExtensionTest, InitFromValueValid) {
310 #if defined(OS_WIN) 343 #if defined(OS_WIN)
311 FilePath path(FILE_PATH_LITERAL("C:\\foo")); 344 FilePath path(FILE_PATH_LITERAL("C:\\foo"));
312 #elif defined(OS_POSIX) 345 #elif defined(OS_POSIX)
313 FilePath path(FILE_PATH_LITERAL("/foo")); 346 FilePath path(FILE_PATH_LITERAL("/foo"));
314 #endif 347 #endif
315 scoped_refptr<Extension> extension_ptr(new Extension(path, 348 scoped_refptr<Extension> extension_ptr(new Extension(path,
316 Extension::INVALID)); 349 Extension::INVALID));
317 Extension& extension = *extension_ptr; 350 Extension& extension = *extension_ptr;
318 std::string error; 351 std::string error;
319 DictionaryValue input_value; 352 DictionaryValue input_value;
320 353
321 // Test minimal extension 354 // Test minimal extension
322 input_value.SetString(keys::kVersion, "1.0.0.0"); 355 input_value.SetString(keys::kVersion, "1.0.0.0");
323 input_value.SetString(keys::kName, "my extension"); 356 input_value.SetString(keys::kName, "my extension");
324 357
325 EXPECT_TRUE(extension.InitFromValue(input_value, false, false, &error)); 358 EXPECT_TRUE(extension.InitFromValue(input_value, Extension::NO_FLAGS,
359 &error));
326 EXPECT_EQ("", error); 360 EXPECT_EQ("", error);
327 EXPECT_TRUE(Extension::IdIsValid(extension.id())); 361 EXPECT_TRUE(Extension::IdIsValid(extension.id()));
328 EXPECT_EQ("1.0.0.0", extension.VersionString()); 362 EXPECT_EQ("1.0.0.0", extension.VersionString());
329 EXPECT_EQ("my extension", extension.name()); 363 EXPECT_EQ("my extension", extension.name());
330 EXPECT_EQ(extension.id(), extension.url().host()); 364 EXPECT_EQ(extension.id(), extension.url().host());
331 EXPECT_EQ(path.value(), extension.path().value()); 365 EXPECT_EQ(path.value(), extension.path().value());
332 366
333 // Test permissions scheme. 367 // Test permissions scheme.
334 ListValue* permissions = new ListValue; 368 ListValue* permissions = new ListValue;
335 permissions->Set(0, Value::CreateStringValue("file:///C:/foo.txt")); 369 permissions->Set(0, Value::CreateStringValue("file:///C:/foo.txt"));
336 input_value.Set(keys::kPermissions, permissions); 370 input_value.Set(keys::kPermissions, permissions);
337 371
338 // We allow unknown API permissions, so this will be valid until we better 372 // We allow unknown API permissions, so this will be valid until we better
339 // distinguish between API and host permissions. 373 // distinguish between API and host permissions.
340 EXPECT_TRUE(extension.InitFromValue(input_value, false, false, &error)); 374 EXPECT_TRUE(extension.InitFromValue(input_value, Extension::NO_FLAGS,
375 &error));
341 input_value.Remove(keys::kPermissions, NULL); 376 input_value.Remove(keys::kPermissions, NULL);
342 377
343 // Test with an options page. 378 // Test with an options page.
344 input_value.SetString(keys::kOptionsPage, "options.html"); 379 input_value.SetString(keys::kOptionsPage, "options.html");
345 EXPECT_TRUE(extension.InitFromValue(input_value, false, false, &error)); 380 EXPECT_TRUE(extension.InitFromValue(input_value, Extension::NO_FLAGS,
381 &error));
346 EXPECT_EQ("", error); 382 EXPECT_EQ("", error);
347 EXPECT_EQ("chrome-extension", extension.options_url().scheme()); 383 EXPECT_EQ("chrome-extension", extension.options_url().scheme());
348 EXPECT_EQ("/options.html", extension.options_url().path()); 384 EXPECT_EQ("/options.html", extension.options_url().path());
349 385
350 // Test that an empty list of page actions does not stop a browser action 386 // Test that an empty list of page actions does not stop a browser action
351 // from being loaded. 387 // from being loaded.
352 ListValue* empty_list = new ListValue; 388 ListValue* empty_list = new ListValue;
353 input_value.Set(keys::kPageActions, empty_list); 389 input_value.Set(keys::kPageActions, empty_list);
354 EXPECT_TRUE(extension.InitFromValue(input_value, false, false, &error)); 390 EXPECT_TRUE(extension.InitFromValue(input_value, Extension::NO_FLAGS,
391 &error));
355 EXPECT_EQ("", error); 392 EXPECT_EQ("", error);
356 393
357 #if !defined(OS_MACOSX) 394 #if !defined(OS_MACOSX)
358 // TODO(aa): The version isn't stamped into the unit test binary on mac. 395 // TODO(aa): The version isn't stamped into the unit test binary on mac.
359 // Test with a minimum_chrome_version. 396 // Test with a minimum_chrome_version.
360 input_value.SetString(keys::kMinimumChromeVersion, "1.0"); 397 input_value.SetString(keys::kMinimumChromeVersion, "1.0");
361 EXPECT_TRUE(extension.InitFromValue(input_value, false, false, &error)); 398 EXPECT_TRUE(extension.InitFromValue(input_value, Extension::NO_FLAGS,
399 &error));
362 EXPECT_EQ("", error); 400 EXPECT_EQ("", error);
363 // The minimum chrome version is not stored in the Extension object. 401 // The minimum chrome version is not stored in the Extension object.
364 #endif 402 #endif
365 } 403 }
366 404
367 TEST(ExtensionTest, InitFromValueValidNameInRTL) { 405 TEST(ExtensionTest, InitFromValueValidNameInRTL) {
368 #if defined(TOOLKIT_GTK) 406 #if defined(TOOLKIT_GTK)
369 GtkTextDirection gtk_dir = gtk_widget_get_default_direction(); 407 GtkTextDirection gtk_dir = gtk_widget_get_default_direction();
370 gtk_widget_set_default_direction(GTK_TEXT_DIR_RTL); 408 gtk_widget_set_default_direction(GTK_TEXT_DIR_RTL);
371 #else 409 #else
372 std::string locale = l10n_util::GetApplicationLocale(""); 410 std::string locale = l10n_util::GetApplicationLocale("");
373 base::i18n::SetICUDefaultLocale("he"); 411 base::i18n::SetICUDefaultLocale("he");
374 #endif 412 #endif
375 413
376 #if defined(OS_WIN) 414 #if defined(OS_WIN)
377 FilePath path(FILE_PATH_LITERAL("C:\\foo")); 415 FilePath path(FILE_PATH_LITERAL("C:\\foo"));
378 #elif defined(OS_POSIX) 416 #elif defined(OS_POSIX)
379 FilePath path(FILE_PATH_LITERAL("/foo")); 417 FilePath path(FILE_PATH_LITERAL("/foo"));
380 #endif 418 #endif
381 scoped_refptr<Extension> extension_ptr(new Extension(path, 419 scoped_refptr<Extension> extension_ptr(new Extension(path,
382 Extension::INVALID)); 420 Extension::INVALID));
383 Extension& extension = *extension_ptr; 421 Extension& extension = *extension_ptr;
384 std::string error; 422 std::string error;
385 DictionaryValue input_value; 423 DictionaryValue input_value;
386 424
387 input_value.SetString(keys::kVersion, "1.0.0.0"); 425 input_value.SetString(keys::kVersion, "1.0.0.0");
388 // No strong RTL characters in name. 426 // No strong RTL characters in name.
389 std::wstring name(L"Dictionary (by Google)"); 427 std::wstring name(L"Dictionary (by Google)");
390 input_value.SetString(keys::kName, WideToUTF16Hack(name)); 428 input_value.SetString(keys::kName, WideToUTF16Hack(name));
391 EXPECT_TRUE(extension.InitFromValue(input_value, false, false, &error)); 429 EXPECT_TRUE(extension.InitFromValue(input_value, Extension::NO_FLAGS,
430 &error));
392 EXPECT_EQ("", error); 431 EXPECT_EQ("", error);
393 std::wstring localized_name(name); 432 std::wstring localized_name(name);
394 base::i18n::AdjustStringForLocaleDirection(&localized_name); 433 base::i18n::AdjustStringForLocaleDirection(&localized_name);
395 EXPECT_EQ(localized_name, UTF8ToWide(extension.name())); 434 EXPECT_EQ(localized_name, UTF8ToWide(extension.name()));
396 435
397 // Strong RTL characters in name. 436 // Strong RTL characters in name.
398 name = L"Dictionary (\x05D1\x05D2"L" Google)"; 437 name = L"Dictionary (\x05D1\x05D2"L" Google)";
399 input_value.SetString(keys::kName, WideToUTF16Hack(name)); 438 input_value.SetString(keys::kName, WideToUTF16Hack(name));
400 EXPECT_TRUE(extension.InitFromValue(input_value, false, false, &error)); 439 EXPECT_TRUE(extension.InitFromValue(input_value, Extension::NO_FLAGS,
440 &error));
401 EXPECT_EQ("", error); 441 EXPECT_EQ("", error);
402 localized_name = name; 442 localized_name = name;
403 base::i18n::AdjustStringForLocaleDirection(&localized_name); 443 base::i18n::AdjustStringForLocaleDirection(&localized_name);
404 EXPECT_EQ(localized_name, UTF8ToWide(extension.name())); 444 EXPECT_EQ(localized_name, UTF8ToWide(extension.name()));
405 445
406 // Reset locale. 446 // Reset locale.
407 #if defined(TOOLKIT_GTK) 447 #if defined(TOOLKIT_GTK)
408 gtk_widget_set_default_direction(gtk_dir); 448 gtk_widget_set_default_direction(gtk_dir);
409 #else 449 #else
410 base::i18n::SetICUDefaultLocale(locale); 450 base::i18n::SetICUDefaultLocale(locale);
411 #endif 451 #endif
412 } 452 }
413 453
414 TEST(ExtensionTest, GetResourceURLAndPath) { 454 TEST(ExtensionTest, GetResourceURLAndPath) {
415 #if defined(OS_WIN) 455 #if defined(OS_WIN)
416 FilePath path(FILE_PATH_LITERAL("C:\\foo")); 456 FilePath path(FILE_PATH_LITERAL("C:\\foo"));
417 #elif defined(OS_POSIX) 457 #elif defined(OS_POSIX)
418 FilePath path(FILE_PATH_LITERAL("/foo")); 458 FilePath path(FILE_PATH_LITERAL("/foo"));
419 #endif 459 #endif
420 DictionaryValue input_value; 460 DictionaryValue input_value;
421 input_value.SetString(keys::kVersion, "1.0.0.0"); 461 input_value.SetString(keys::kVersion, "1.0.0.0");
422 input_value.SetString(keys::kName, "my extension"); 462 input_value.SetString(keys::kName, "my extension");
423 scoped_refptr<Extension> extension(Extension::Create( 463 scoped_refptr<Extension> extension(Extension::Create(path,
424 path, Extension::INVALID, input_value, false, true, NULL)); 464 Extension::INVALID, input_value, Extension::STRICT_ERROR_CHECKS, NULL));
425 EXPECT_TRUE(extension.get()); 465 EXPECT_TRUE(extension.get());
426 466
427 EXPECT_EQ(extension->url().spec() + "bar/baz.js", 467 EXPECT_EQ(extension->url().spec() + "bar/baz.js",
428 Extension::GetResourceURL(extension->url(), "bar/baz.js").spec()); 468 Extension::GetResourceURL(extension->url(), "bar/baz.js").spec());
429 EXPECT_EQ(extension->url().spec() + "baz.js", 469 EXPECT_EQ(extension->url().spec() + "baz.js",
430 Extension::GetResourceURL(extension->url(), 470 Extension::GetResourceURL(extension->url(),
431 "bar/../baz.js").spec()); 471 "bar/../baz.js").spec());
432 EXPECT_EQ(extension->url().spec() + "baz.js", 472 EXPECT_EQ(extension->url().spec() + "baz.js",
433 Extension::GetResourceURL(extension->url(), "../baz.js").spec()); 473 Extension::GetResourceURL(extension->url(), "../baz.js").spec());
434 } 474 }
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after
673 #else 713 #else
674 FilePath path(base::StringPrintf("/extension%" PRIuS, i)); 714 FilePath path(base::StringPrintf("/extension%" PRIuS, i));
675 #endif 715 #endif
676 std::string error; 716 std::string error;
677 717
678 input_value.SetString(keys::kVersion, "1.0"); 718 input_value.SetString(keys::kVersion, "1.0");
679 input_value.SetString(keys::kName, "Test"); 719 input_value.SetString(keys::kName, "Test");
680 input_value.SetString(keys::kUpdateURL, url.spec()); 720 input_value.SetString(keys::kUpdateURL, url.spec());
681 721
682 scoped_refptr<Extension> extension(Extension::Create( 722 scoped_refptr<Extension> extension(Extension::Create(
683 path, Extension::INVALID, input_value, false, true, &error)); 723 path, Extension::INVALID, input_value, Extension::STRICT_ERROR_CHECKS,
724 &error));
684 EXPECT_TRUE(extension.get()) << error; 725 EXPECT_TRUE(extension.get()) << error;
685 } 726 }
686 727
687 // Test some invalid update urls 728 // Test some invalid update urls
688 std::vector<std::string> invalid; 729 std::vector<std::string> invalid;
689 invalid.push_back(""); 730 invalid.push_back("");
690 invalid.push_back("test.com"); 731 invalid.push_back("test.com");
691 valid.push_back("http://test.com/update#whatever"); 732 valid.push_back("http://test.com/update#whatever");
692 for (size_t i = 0; i < invalid.size(); i++) { 733 for (size_t i = 0; i < invalid.size(); i++) {
693 DictionaryValue input_value; 734 DictionaryValue input_value;
694 #if defined(OS_WIN) 735 #if defined(OS_WIN)
695 // (Why %Iu below? This is the single file in the whole code base that 736 // (Why %Iu below? This is the single file in the whole code base that
696 // might make use of a WidePRIuS; let's not encourage any more.) 737 // might make use of a WidePRIuS; let's not encourage any more.)
697 FilePath path(base::StringPrintf(L"c:\\extension%Iu", i)); 738 FilePath path(base::StringPrintf(L"c:\\extension%Iu", i));
698 #else 739 #else
699 FilePath path(base::StringPrintf("/extension%" PRIuS, i)); 740 FilePath path(base::StringPrintf("/extension%" PRIuS, i));
700 #endif 741 #endif
701 std::string error; 742 std::string error;
702 input_value.SetString(keys::kVersion, "1.0"); 743 input_value.SetString(keys::kVersion, "1.0");
703 input_value.SetString(keys::kName, "Test"); 744 input_value.SetString(keys::kName, "Test");
704 input_value.SetString(keys::kUpdateURL, invalid[i]); 745 input_value.SetString(keys::kUpdateURL, invalid[i]);
705 746
706 scoped_refptr<Extension> extension(Extension::Create( 747 scoped_refptr<Extension> extension(Extension::Create(
707 path, Extension::INVALID, input_value, false, true, &error)); 748 path, Extension::INVALID, input_value, Extension::STRICT_ERROR_CHECKS,
749 &error));
708 EXPECT_FALSE(extension.get()); 750 EXPECT_FALSE(extension.get());
709 EXPECT_TRUE(MatchPattern(error, errors::kInvalidUpdateURL)); 751 EXPECT_TRUE(MatchPattern(error, errors::kInvalidUpdateURL));
710 } 752 }
711 } 753 }
712 754
713 // This test ensures that the mimetype sniffing code stays in sync with the 755 // This test ensures that the mimetype sniffing code stays in sync with the
714 // actual crx files that we test other parts of the system with. 756 // actual crx files that we test other parts of the system with.
715 TEST(ExtensionTest, MimeTypeSniffing) { 757 TEST(ExtensionTest, MimeTypeSniffing) {
716 FilePath path; 758 FilePath path;
717 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &path)); 759 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &path));
(...skipping 27 matching lines...) Expand all
745 JSONFileValueSerializer serializer(path); 787 JSONFileValueSerializer serializer(path);
746 std::string error; 788 std::string error;
747 scoped_ptr<Value> result(serializer.Deserialize(NULL, &error)); 789 scoped_ptr<Value> result(serializer.Deserialize(NULL, &error));
748 if (!result.get()) { 790 if (!result.get()) {
749 EXPECT_EQ("", error); 791 EXPECT_EQ("", error);
750 return NULL; 792 return NULL;
751 } 793 }
752 794
753 scoped_refptr<Extension> extension = Extension::Create( 795 scoped_refptr<Extension> extension = Extension::Create(
754 path.DirName(), Extension::INVALID, 796 path.DirName(), Extension::INVALID,
755 *static_cast<DictionaryValue*>(result.get()), false, true, &error); 797 *static_cast<DictionaryValue*>(result.get()),
798 Extension::STRICT_ERROR_CHECKS, &error);
756 EXPECT_TRUE(extension) << error; 799 EXPECT_TRUE(extension) << error;
757 return extension; 800 return extension;
758 } 801 }
759 802
760 TEST(ExtensionTest, EffectiveHostPermissions) { 803 TEST(ExtensionTest, EffectiveHostPermissions) {
761 scoped_refptr<Extension> extension; 804 scoped_refptr<Extension> extension;
762 ExtensionExtent hosts; 805 ExtensionExtent hosts;
763 806
764 extension = LoadManifest("effective_host_permissions", "empty.json"); 807 extension = LoadManifest("effective_host_permissions", "empty.json");
765 EXPECT_EQ(0u, extension->GetEffectiveHostPermissions().patterns().size()); 808 EXPECT_EQ(0u, extension->GetEffectiveHostPermissions().patterns().size());
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after
972 FilePath path; 1015 FilePath path;
973 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &path)); 1016 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &path));
974 path = path.AppendASCII("extensions"); 1017 path = path.AppendASCII("extensions");
975 1018
976 // Initialize the Extension. 1019 // Initialize the Extension.
977 std::string errors; 1020 std::string errors;
978 DictionaryValue values; 1021 DictionaryValue values;
979 values.SetString(keys::kName, "test"); 1022 values.SetString(keys::kName, "test");
980 values.SetString(keys::kVersion, "0.1"); 1023 values.SetString(keys::kVersion, "0.1");
981 scoped_refptr<Extension> extension(Extension::Create( 1024 scoped_refptr<Extension> extension(Extension::Create(
982 path, Extension::INVALID, values, false, true, &errors)); 1025 path, Extension::INVALID, values, Extension::STRICT_ERROR_CHECKS,
1026 &errors));
983 ASSERT_TRUE(extension.get()); 1027 ASSERT_TRUE(extension.get());
984 1028
985 // Create an ExtensionResource pointing at an icon. 1029 // Create an ExtensionResource pointing at an icon.
986 FilePath icon_relative_path(FILE_PATH_LITERAL("icon3.png")); 1030 FilePath icon_relative_path(FILE_PATH_LITERAL("icon3.png"));
987 ExtensionResource resource(extension->id(), 1031 ExtensionResource resource(extension->id(),
988 extension->path(), 1032 extension->path(),
989 icon_relative_path); 1033 icon_relative_path);
990 1034
991 // Read in the icon file. 1035 // Read in the icon file.
992 FilePath icon_absolute_path = extension->path().Append(icon_relative_path); 1036 FilePath icon_absolute_path = extension->path().Append(icon_relative_path);
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
1056 ListValue* permissions = new ListValue(); 1100 ListValue* permissions = new ListValue();
1057 const char* old_unlimited = "unlimited_storage"; 1101 const char* old_unlimited = "unlimited_storage";
1058 EXPECT_STREQ(old_unlimited, Extension::kOldUnlimitedStoragePermission); 1102 EXPECT_STREQ(old_unlimited, Extension::kOldUnlimitedStoragePermission);
1059 permissions->Append(Value::CreateStringValue(old_unlimited)); 1103 permissions->Append(Value::CreateStringValue(old_unlimited));
1060 dictionary.Set(extension_manifest_keys::kPermissions, permissions); 1104 dictionary.Set(extension_manifest_keys::kPermissions, permissions);
1061 1105
1062 // Initialize the extension and make sure the permission for unlimited storage 1106 // Initialize the extension and make sure the permission for unlimited storage
1063 // is present. 1107 // is present.
1064 std::string errors; 1108 std::string errors;
1065 scoped_refptr<Extension> extension(Extension::Create( 1109 scoped_refptr<Extension> extension(Extension::Create(
1066 extension_path, Extension::INVALID, dictionary, false, true, &errors)); 1110 extension_path, Extension::INVALID, dictionary,
1111 Extension::STRICT_ERROR_CHECKS, &errors));
1067 EXPECT_TRUE(extension.get()); 1112 EXPECT_TRUE(extension.get());
1068 EXPECT_TRUE(extension->HasApiPermission( 1113 EXPECT_TRUE(extension->HasApiPermission(
1069 Extension::kUnlimitedStoragePermission)); 1114 Extension::kUnlimitedStoragePermission));
1070 } 1115 }
1071 1116
1072 // This tests the API permissions with an empty manifest (one that just 1117 // This tests the API permissions with an empty manifest (one that just
1073 // specifies a name and a version and nothing else). 1118 // specifies a name and a version and nothing else).
1074 TEST(ExtensionTest, ApiPermissions) { 1119 TEST(ExtensionTest, ApiPermissions) {
1075 const struct { 1120 const struct {
1076 const char* permission_name; 1121 const char* permission_name;
(...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after
1378 EXPECT_TRUE(Extension::GenerateId("test", &result)); 1423 EXPECT_TRUE(Extension::GenerateId("test", &result));
1379 EXPECT_EQ(result, "jpignaibiiemhngfjkcpokkamffknabf"); 1424 EXPECT_EQ(result, "jpignaibiiemhngfjkcpokkamffknabf");
1380 1425
1381 EXPECT_TRUE(Extension::GenerateId("_", &result)); 1426 EXPECT_TRUE(Extension::GenerateId("_", &result));
1382 EXPECT_EQ(result, "ncocknphbhhlhkikpnnlmbcnbgdempcd"); 1427 EXPECT_EQ(result, "ncocknphbhhlhkikpnnlmbcnbgdempcd");
1383 1428
1384 EXPECT_TRUE(Extension::GenerateId( 1429 EXPECT_TRUE(Extension::GenerateId(
1385 "this_string_is_longer_than_a_single_sha256_hash_digest", &result)); 1430 "this_string_is_longer_than_a_single_sha256_hash_digest", &result));
1386 EXPECT_EQ(result, "jimneklojkjdibfkgiiophfhjhbdgcfi"); 1431 EXPECT_EQ(result, "jimneklojkjdibfkgiiophfhjhbdgcfi");
1387 } 1432 }
OLDNEW
« no previous file with comments | « chrome/common/extensions/extension_set_unittest.cc ('k') | chrome/common/extensions/extension_unpacker.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698