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

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

Issue 3056029: Move the number conversions from string_util to a new file.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
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 | Annotate | Revision Log
« no previous file with comments | « chrome/common/child_process_logging_win.cc ('k') | chrome/common/extensions/update_manifest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "chrome/common/extensions/extension.h" 5 #include "chrome/common/extensions/extension.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "app/l10n_util.h" 9 #include "app/l10n_util.h"
10 #include "base/base64.h" 10 #include "base/base64.h"
11 #include "base/basictypes.h" 11 #include "base/basictypes.h"
12 #include "base/command_line.h" 12 #include "base/command_line.h"
13 #include "base/file_path.h" 13 #include "base/file_path.h"
14 #include "base/file_util.h" 14 #include "base/file_util.h"
15 #include "base/file_version_info.h" 15 #include "base/file_version_info.h"
16 #include "base/i18n/rtl.h" 16 #include "base/i18n/rtl.h"
17 #include "base/logging.h" 17 #include "base/logging.h"
18 #include "base/stl_util-inl.h" 18 #include "base/stl_util-inl.h"
19 #include "base/third_party/nss/blapi.h" 19 #include "base/third_party/nss/blapi.h"
20 #include "base/third_party/nss/sha256.h" 20 #include "base/third_party/nss/sha256.h"
21 #include "base/string_number_conversions.h"
21 #include "base/utf_string_conversions.h" 22 #include "base/utf_string_conversions.h"
22 #include "chrome/common/chrome_constants.h" 23 #include "chrome/common/chrome_constants.h"
23 #include "chrome/common/chrome_switches.h" 24 #include "chrome/common/chrome_switches.h"
24 #include "chrome/common/chrome_version_info.h" 25 #include "chrome/common/chrome_version_info.h"
25 #include "chrome/common/extensions/extension_action.h" 26 #include "chrome/common/extensions/extension_action.h"
26 #include "chrome/common/extensions/extension_constants.h" 27 #include "chrome/common/extensions/extension_constants.h"
27 #include "chrome/common/extensions/extension_error_utils.h" 28 #include "chrome/common/extensions/extension_error_utils.h"
28 #include "chrome/common/extensions/extension_l10n_util.h" 29 #include "chrome/common/extensions/extension_l10n_util.h"
29 #include "chrome/common/extensions/extension_resource.h" 30 #include "chrome/common/extensions/extension_resource.h"
30 #include "chrome/common/extensions/user_script.h" 31 #include "chrome/common/extensions/user_script.h"
(...skipping 23 matching lines...) Expand all
54 const char kPublic[] = "PUBLIC"; 55 const char kPublic[] = "PUBLIC";
55 const char kPrivate[] = "PRIVATE"; 56 const char kPrivate[] = "PRIVATE";
56 57
57 const int kRSAKeySize = 1024; 58 const int kRSAKeySize = 1024;
58 59
59 // Converts a normal hexadecimal string into the alphabet used by extensions. 60 // Converts a normal hexadecimal string into the alphabet used by extensions.
60 // We use the characters 'a'-'p' instead of '0'-'f' to avoid ever having a 61 // We use the characters 'a'-'p' instead of '0'-'f' to avoid ever having a
61 // completely numeric host, since some software interprets that as an IP 62 // completely numeric host, since some software interprets that as an IP
62 // address. 63 // address.
63 static void ConvertHexadecimalToIDAlphabet(std::string* id) { 64 static void ConvertHexadecimalToIDAlphabet(std::string* id) {
64 for (size_t i = 0; i < id->size(); ++i) 65 for (size_t i = 0; i < id->size(); ++i) {
65 (*id)[i] = HexStringToInt(id->substr(i, 1)) + 'a'; 66 int val;
67 if (base::HexStringToInt(id->substr(i, 1), &val))
68 (*id)[i] = val + 'a';
69 else
70 (*id)[i] = 'a';
71 }
66 } 72 }
67 73
68 const int kValidWebExtentSchemes = 74 const int kValidWebExtentSchemes =
69 URLPattern::SCHEME_HTTP | URLPattern::SCHEME_HTTPS; 75 URLPattern::SCHEME_HTTP | URLPattern::SCHEME_HTTPS;
70 76
71 } // namespace 77 } // namespace
72 78
73 const FilePath::CharType Extension::kManifestFilename[] = 79 const FilePath::CharType Extension::kManifestFilename[] =
74 FILE_PATH_LITERAL("manifest.json"); 80 FILE_PATH_LITERAL("manifest.json");
75 const FilePath::CharType Extension::kLocaleFolder[] = 81 const FilePath::CharType Extension::kLocaleFolder[] =
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
214 // Helper method that loads a UserScript object from a dictionary in the 220 // Helper method that loads a UserScript object from a dictionary in the
215 // content_script list of the manifest. 221 // content_script list of the manifest.
216 bool Extension::LoadUserScriptHelper(const DictionaryValue* content_script, 222 bool Extension::LoadUserScriptHelper(const DictionaryValue* content_script,
217 int definition_index, std::string* error, 223 int definition_index, std::string* error,
218 UserScript* result) { 224 UserScript* result) {
219 // run_at 225 // run_at
220 if (content_script->HasKey(keys::kRunAt)) { 226 if (content_script->HasKey(keys::kRunAt)) {
221 std::string run_location; 227 std::string run_location;
222 if (!content_script->GetString(keys::kRunAt, &run_location)) { 228 if (!content_script->GetString(keys::kRunAt, &run_location)) {
223 *error = ExtensionErrorUtils::FormatErrorMessage(errors::kInvalidRunAt, 229 *error = ExtensionErrorUtils::FormatErrorMessage(errors::kInvalidRunAt,
224 IntToString(definition_index)); 230 base::IntToString(definition_index));
225 return false; 231 return false;
226 } 232 }
227 233
228 if (run_location == values::kRunAtDocumentStart) { 234 if (run_location == values::kRunAtDocumentStart) {
229 result->set_run_location(UserScript::DOCUMENT_START); 235 result->set_run_location(UserScript::DOCUMENT_START);
230 } else if (run_location == values::kRunAtDocumentEnd) { 236 } else if (run_location == values::kRunAtDocumentEnd) {
231 result->set_run_location(UserScript::DOCUMENT_END); 237 result->set_run_location(UserScript::DOCUMENT_END);
232 } else if (run_location == values::kRunAtDocumentIdle) { 238 } else if (run_location == values::kRunAtDocumentIdle) {
233 result->set_run_location(UserScript::DOCUMENT_IDLE); 239 result->set_run_location(UserScript::DOCUMENT_IDLE);
234 } else { 240 } else {
235 *error = ExtensionErrorUtils::FormatErrorMessage(errors::kInvalidRunAt, 241 *error = ExtensionErrorUtils::FormatErrorMessage(errors::kInvalidRunAt,
236 IntToString(definition_index)); 242 base::IntToString(definition_index));
237 return false; 243 return false;
238 } 244 }
239 } 245 }
240 246
241 // all frames 247 // all frames
242 if (content_script->HasKey(keys::kAllFrames)) { 248 if (content_script->HasKey(keys::kAllFrames)) {
243 bool all_frames = false; 249 bool all_frames = false;
244 if (!content_script->GetBoolean(keys::kAllFrames, &all_frames)) { 250 if (!content_script->GetBoolean(keys::kAllFrames, &all_frames)) {
245 *error = ExtensionErrorUtils::FormatErrorMessage( 251 *error = ExtensionErrorUtils::FormatErrorMessage(
246 errors::kInvalidAllFrames, IntToString(definition_index)); 252 errors::kInvalidAllFrames, base::IntToString(definition_index));
247 return false; 253 return false;
248 } 254 }
249 result->set_match_all_frames(all_frames); 255 result->set_match_all_frames(all_frames);
250 } 256 }
251 257
252 // matches 258 // matches
253 ListValue* matches = NULL; 259 ListValue* matches = NULL;
254 if (!content_script->GetList(keys::kMatches, &matches)) { 260 if (!content_script->GetList(keys::kMatches, &matches)) {
255 *error = ExtensionErrorUtils::FormatErrorMessage(errors::kInvalidMatches, 261 *error = ExtensionErrorUtils::FormatErrorMessage(errors::kInvalidMatches,
256 IntToString(definition_index)); 262 base::IntToString(definition_index));
257 return false; 263 return false;
258 } 264 }
259 265
260 if (matches->GetSize() == 0) { 266 if (matches->GetSize() == 0) {
261 *error = ExtensionErrorUtils::FormatErrorMessage(errors::kInvalidMatchCount, 267 *error = ExtensionErrorUtils::FormatErrorMessage(errors::kInvalidMatchCount,
262 IntToString(definition_index)); 268 base::IntToString(definition_index));
263 return false; 269 return false;
264 } 270 }
265 for (size_t j = 0; j < matches->GetSize(); ++j) { 271 for (size_t j = 0; j < matches->GetSize(); ++j) {
266 std::string match_str; 272 std::string match_str;
267 if (!matches->GetString(j, &match_str)) { 273 if (!matches->GetString(j, &match_str)) {
268 *error = ExtensionErrorUtils::FormatErrorMessage(errors::kInvalidMatch, 274 *error = ExtensionErrorUtils::FormatErrorMessage(errors::kInvalidMatch,
269 IntToString(definition_index), IntToString(j)); 275 base::IntToString(definition_index), base::IntToString(j));
270 return false; 276 return false;
271 } 277 }
272 278
273 URLPattern pattern(UserScript::kValidUserScriptSchemes); 279 URLPattern pattern(UserScript::kValidUserScriptSchemes);
274 if (!pattern.Parse(match_str)) { 280 if (!pattern.Parse(match_str)) {
275 *error = ExtensionErrorUtils::FormatErrorMessage(errors::kInvalidMatch, 281 *error = ExtensionErrorUtils::FormatErrorMessage(errors::kInvalidMatch,
276 IntToString(definition_index), IntToString(j)); 282 base::IntToString(definition_index), base::IntToString(j));
277 return false; 283 return false;
278 } 284 }
279 285
280 result->add_url_pattern(pattern); 286 result->add_url_pattern(pattern);
281 } 287 }
282 288
283 // include/exclude globs (mostly for Greasemonkey compatibility) 289 // include/exclude globs (mostly for Greasemonkey compatibility)
284 if (!LoadGlobsHelper(content_script, definition_index, keys::kIncludeGlobs, 290 if (!LoadGlobsHelper(content_script, definition_index, keys::kIncludeGlobs,
285 error, &UserScript::add_glob, result)) { 291 error, &UserScript::add_glob, result)) {
286 return false; 292 return false;
287 } 293 }
288 294
289 if (!LoadGlobsHelper(content_script, definition_index, keys::kExcludeGlobs, 295 if (!LoadGlobsHelper(content_script, definition_index, keys::kExcludeGlobs,
290 error, &UserScript::add_exclude_glob, result)) { 296 error, &UserScript::add_exclude_glob, result)) {
291 return false; 297 return false;
292 } 298 }
293 299
294 // js and css keys 300 // js and css keys
295 ListValue* js = NULL; 301 ListValue* js = NULL;
296 if (content_script->HasKey(keys::kJs) && 302 if (content_script->HasKey(keys::kJs) &&
297 !content_script->GetList(keys::kJs, &js)) { 303 !content_script->GetList(keys::kJs, &js)) {
298 *error = ExtensionErrorUtils::FormatErrorMessage(errors::kInvalidJsList, 304 *error = ExtensionErrorUtils::FormatErrorMessage(errors::kInvalidJsList,
299 IntToString(definition_index)); 305 base::IntToString(definition_index));
300 return false; 306 return false;
301 } 307 }
302 308
303 ListValue* css = NULL; 309 ListValue* css = NULL;
304 if (content_script->HasKey(keys::kCss) && 310 if (content_script->HasKey(keys::kCss) &&
305 !content_script->GetList(keys::kCss, &css)) { 311 !content_script->GetList(keys::kCss, &css)) {
306 *error = ExtensionErrorUtils::FormatErrorMessage(errors::kInvalidCssList, 312 *error = ExtensionErrorUtils::FormatErrorMessage(errors::kInvalidCssList,
307 IntToString(definition_index)); 313 base::IntToString(definition_index));
308 return false; 314 return false;
309 } 315 }
310 316
311 // The manifest needs to have at least one js or css user script definition. 317 // The manifest needs to have at least one js or css user script definition.
312 if (((js ? js->GetSize() : 0) + (css ? css->GetSize() : 0)) == 0) { 318 if (((js ? js->GetSize() : 0) + (css ? css->GetSize() : 0)) == 0) {
313 *error = ExtensionErrorUtils::FormatErrorMessage(errors::kMissingFile, 319 *error = ExtensionErrorUtils::FormatErrorMessage(errors::kMissingFile,
314 IntToString(definition_index)); 320 base::IntToString(definition_index));
315 return false; 321 return false;
316 } 322 }
317 323
318 if (js) { 324 if (js) {
319 for (size_t script_index = 0; script_index < js->GetSize(); 325 for (size_t script_index = 0; script_index < js->GetSize();
320 ++script_index) { 326 ++script_index) {
321 Value* value; 327 Value* value;
322 std::string relative; 328 std::string relative;
323 if (!js->Get(script_index, &value) || !value->GetAsString(&relative)) { 329 if (!js->Get(script_index, &value) || !value->GetAsString(&relative)) {
324 *error = ExtensionErrorUtils::FormatErrorMessage(errors::kInvalidJs, 330 *error = ExtensionErrorUtils::FormatErrorMessage(errors::kInvalidJs,
325 IntToString(definition_index), IntToString(script_index)); 331 base::IntToString(definition_index),
332 base::IntToString(script_index));
326 return false; 333 return false;
327 } 334 }
328 GURL url = GetResourceURL(relative); 335 GURL url = GetResourceURL(relative);
329 ExtensionResource resource = GetResource(relative); 336 ExtensionResource resource = GetResource(relative);
330 result->js_scripts().push_back(UserScript::File( 337 result->js_scripts().push_back(UserScript::File(
331 resource.extension_root(), resource.relative_path(), url)); 338 resource.extension_root(), resource.relative_path(), url));
332 } 339 }
333 } 340 }
334 341
335 if (css) { 342 if (css) {
336 for (size_t script_index = 0; script_index < css->GetSize(); 343 for (size_t script_index = 0; script_index < css->GetSize();
337 ++script_index) { 344 ++script_index) {
338 Value* value; 345 Value* value;
339 std::string relative; 346 std::string relative;
340 if (!css->Get(script_index, &value) || !value->GetAsString(&relative)) { 347 if (!css->Get(script_index, &value) || !value->GetAsString(&relative)) {
341 *error = ExtensionErrorUtils::FormatErrorMessage(errors::kInvalidCss, 348 *error = ExtensionErrorUtils::FormatErrorMessage(errors::kInvalidCss,
342 IntToString(definition_index), IntToString(script_index)); 349 base::IntToString(definition_index),
350 base::IntToString(script_index));
343 return false; 351 return false;
344 } 352 }
345 GURL url = GetResourceURL(relative); 353 GURL url = GetResourceURL(relative);
346 ExtensionResource resource = GetResource(relative); 354 ExtensionResource resource = GetResource(relative);
347 result->css_scripts().push_back(UserScript::File( 355 result->css_scripts().push_back(UserScript::File(
348 resource.extension_root(), resource.relative_path(), url)); 356 resource.extension_root(), resource.relative_path(), url));
349 } 357 }
350 } 358 }
351 359
352 return true; 360 return true;
353 } 361 }
354 362
355 bool Extension::LoadGlobsHelper( 363 bool Extension::LoadGlobsHelper(
356 const DictionaryValue* content_script, 364 const DictionaryValue* content_script,
357 int content_script_index, 365 int content_script_index,
358 const wchar_t* globs_property_name, 366 const wchar_t* globs_property_name,
359 std::string* error, 367 std::string* error,
360 void(UserScript::*add_method)(const std::string& glob), 368 void(UserScript::*add_method)(const std::string& glob),
361 UserScript *instance) { 369 UserScript *instance) {
362 if (!content_script->HasKey(globs_property_name)) 370 if (!content_script->HasKey(globs_property_name))
363 return true; // they are optional 371 return true; // they are optional
364 372
365 ListValue* list = NULL; 373 ListValue* list = NULL;
366 if (!content_script->GetList(globs_property_name, &list)) { 374 if (!content_script->GetList(globs_property_name, &list)) {
367 *error = ExtensionErrorUtils::FormatErrorMessage(errors::kInvalidGlobList, 375 *error = ExtensionErrorUtils::FormatErrorMessage(errors::kInvalidGlobList,
368 IntToString(content_script_index), WideToASCII(globs_property_name)); 376 base::IntToString(content_script_index),
377 WideToUTF8(globs_property_name));
369 return false; 378 return false;
370 } 379 }
371 380
372 for (size_t i = 0; i < list->GetSize(); ++i) { 381 for (size_t i = 0; i < list->GetSize(); ++i) {
373 std::string glob; 382 std::string glob;
374 if (!list->GetString(i, &glob)) { 383 if (!list->GetString(i, &glob)) {
375 *error = ExtensionErrorUtils::FormatErrorMessage(errors::kInvalidGlob, 384 *error = ExtensionErrorUtils::FormatErrorMessage(errors::kInvalidGlob,
376 IntToString(content_script_index), WideToASCII(globs_property_name), 385 base::IntToString(content_script_index),
377 IntToString(i)); 386 WideToUTF8(globs_property_name),
387 base::IntToString(i));
378 return false; 388 return false;
379 } 389 }
380 390
381 (instance->*add_method)(glob); 391 (instance->*add_method)(glob);
382 } 392 }
383 393
384 return true; 394 return true;
385 } 395 }
386 396
387 ExtensionAction* Extension::LoadExtensionActionHelper( 397 ExtensionAction* Extension::LoadExtensionActionHelper(
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
551 if (temp->GetType() != Value::TYPE_LIST) { 561 if (temp->GetType() != Value::TYPE_LIST) {
552 *error = list_error; 562 *error = list_error;
553 return false; 563 return false;
554 } 564 }
555 565
556 ListValue* pattern_list = static_cast<ListValue*>(temp); 566 ListValue* pattern_list = static_cast<ListValue*>(temp);
557 for (size_t i = 0; i < pattern_list->GetSize(); ++i) { 567 for (size_t i = 0; i < pattern_list->GetSize(); ++i) {
558 std::string pattern_string; 568 std::string pattern_string;
559 if (!pattern_list->GetString(i, &pattern_string)) { 569 if (!pattern_list->GetString(i, &pattern_string)) {
560 *error = ExtensionErrorUtils::FormatErrorMessage(value_error, 570 *error = ExtensionErrorUtils::FormatErrorMessage(value_error,
561 UintToString(i)); 571 base::UintToString(i));
562 return false; 572 return false;
563 } 573 }
564 574
565 URLPattern pattern(kValidWebExtentSchemes); 575 URLPattern pattern(kValidWebExtentSchemes);
566 if (!pattern.Parse(pattern_string)) { 576 if (!pattern.Parse(pattern_string)) {
567 *error = ExtensionErrorUtils::FormatErrorMessage(value_error, 577 *error = ExtensionErrorUtils::FormatErrorMessage(value_error,
568 UintToString(i)); 578 base::UintToString(i));
569 return false; 579 return false;
570 } 580 }
571 581
572 // We do not allow authors to put wildcards in their paths. Instead, we 582 // We do not allow authors to put wildcards in their paths. Instead, we
573 // imply one at the end. 583 // imply one at the end.
574 if (pattern.path().find('*') != std::string::npos) { 584 if (pattern.path().find('*') != std::string::npos) {
575 *error = ExtensionErrorUtils::FormatErrorMessage(value_error, 585 *error = ExtensionErrorUtils::FormatErrorMessage(value_error,
576 UintToString(i)); 586 base::UintToString(i));
577 return false; 587 return false;
578 } 588 }
579 pattern.set_path(pattern.path() + '*'); 589 pattern.set_path(pattern.path() + '*');
580 590
581 extent->AddPattern(pattern); 591 extent->AddPattern(pattern);
582 } 592 }
583 593
584 return true; 594 return true;
585 } 595 }
586 596
(...skipping 331 matching lines...) Expand 10 before | Expand all | Expand 10 after
918 scoped_ptr<SkBitmap> decoded(new SkBitmap()); 928 scoped_ptr<SkBitmap> decoded(new SkBitmap());
919 *decoded = decoder.Decode(data, file_contents.length()); 929 *decoded = decoder.Decode(data, file_contents.length());
920 if (decoded->empty()) { 930 if (decoded->empty()) {
921 LOG(ERROR) << "Could not decode icon file: " 931 LOG(ERROR) << "Could not decode icon file: "
922 << WideToUTF8(icon_path.ToWStringHack()); 932 << WideToUTF8(icon_path.ToWStringHack());
923 return; 933 return;
924 } 934 }
925 935
926 if (decoded->width() != icon_size || decoded->height() != icon_size) { 936 if (decoded->width() != icon_size || decoded->height() != icon_size) {
927 LOG(ERROR) << "Icon file has unexpected size: " 937 LOG(ERROR) << "Icon file has unexpected size: "
928 << IntToString(decoded->width()) << "x" 938 << base::IntToString(decoded->width()) << "x"
929 << IntToString(decoded->height()); 939 << base::IntToString(decoded->height());
930 return; 940 return;
931 } 941 }
932 942
933 result->swap(decoded); 943 result->swap(decoded);
934 } 944 }
935 945
936 GURL Extension::GetBaseURLFromExtensionId(const std::string& extension_id) { 946 GURL Extension::GetBaseURLFromExtensionId(const std::string& extension_id) {
937 return GURL(std::string(chrome::kExtensionScheme) + 947 return GURL(std::string(chrome::kExtensionScheme) +
938 chrome::kStandardSchemeSeparator + extension_id + "/"); 948 chrome::kStandardSchemeSeparator + extension_id + "/");
939 } 949 }
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
1067 1077
1068 // Initialize icons (if present). 1078 // Initialize icons (if present).
1069 if (source.HasKey(keys::kIcons)) { 1079 if (source.HasKey(keys::kIcons)) {
1070 DictionaryValue* icons_value = NULL; 1080 DictionaryValue* icons_value = NULL;
1071 if (!source.GetDictionary(keys::kIcons, &icons_value)) { 1081 if (!source.GetDictionary(keys::kIcons, &icons_value)) {
1072 *error = errors::kInvalidIcons; 1082 *error = errors::kInvalidIcons;
1073 return false; 1083 return false;
1074 } 1084 }
1075 1085
1076 for (size_t i = 0; i < arraysize(kIconSizes); ++i) { 1086 for (size_t i = 0; i < arraysize(kIconSizes); ++i) {
1077 std::wstring key = ASCIIToWide(IntToString(kIconSizes[i])); 1087 std::wstring key = ASCIIToWide(base::IntToString(kIconSizes[i]));
1078 if (icons_value->HasKey(key)) { 1088 if (icons_value->HasKey(key)) {
1079 std::string icon_path; 1089 std::string icon_path;
1080 if (!icons_value->GetString(key, &icon_path)) { 1090 if (!icons_value->GetString(key, &icon_path)) {
1081 *error = ExtensionErrorUtils::FormatErrorMessage( 1091 *error = ExtensionErrorUtils::FormatErrorMessage(
1082 errors::kInvalidIconPath, WideToASCII(key)); 1092 errors::kInvalidIconPath, WideToASCII(key));
1083 return false; 1093 return false;
1084 } 1094 }
1085 icons_[kIconSizes[i]] = icon_path; 1095 icons_[kIconSizes[i]] = icon_path;
1086 } 1096 }
1087 } 1097 }
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
1192 bool is_public = false; 1202 bool is_public = false;
1193 1203
1194 if (!list_value->GetDictionary(i, &plugin_value)) { 1204 if (!list_value->GetDictionary(i, &plugin_value)) {
1195 *error = errors::kInvalidPlugins; 1205 *error = errors::kInvalidPlugins;
1196 return false; 1206 return false;
1197 } 1207 }
1198 1208
1199 // Get plugins[i].path. 1209 // Get plugins[i].path.
1200 if (!plugin_value->GetString(keys::kPluginsPath, &path)) { 1210 if (!plugin_value->GetString(keys::kPluginsPath, &path)) {
1201 *error = ExtensionErrorUtils::FormatErrorMessage( 1211 *error = ExtensionErrorUtils::FormatErrorMessage(
1202 errors::kInvalidPluginsPath, IntToString(i)); 1212 errors::kInvalidPluginsPath, base::IntToString(i));
1203 return false; 1213 return false;
1204 } 1214 }
1205 1215
1206 // Get plugins[i].content (optional). 1216 // Get plugins[i].content (optional).
1207 if (plugin_value->HasKey(keys::kPluginsPublic)) { 1217 if (plugin_value->HasKey(keys::kPluginsPublic)) {
1208 if (!plugin_value->GetBoolean(keys::kPluginsPublic, &is_public)) { 1218 if (!plugin_value->GetBoolean(keys::kPluginsPublic, &is_public)) {
1209 *error = ExtensionErrorUtils::FormatErrorMessage( 1219 *error = ExtensionErrorUtils::FormatErrorMessage(
1210 errors::kInvalidPluginsPublic, IntToString(i)); 1220 errors::kInvalidPluginsPublic, base::IntToString(i));
1211 return false; 1221 return false;
1212 } 1222 }
1213 } 1223 }
1214 1224
1215 plugins_.push_back(PluginInfo()); 1225 plugins_.push_back(PluginInfo());
1216 plugins_.back().path = path_.AppendASCII(path); 1226 plugins_.back().path = path_.AppendASCII(path);
1217 plugins_.back().is_public = is_public; 1227 plugins_.back().is_public = is_public;
1218 } 1228 }
1219 } 1229 }
1220 1230
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1253 ToolstripInfo toolstrip; 1263 ToolstripInfo toolstrip;
1254 DictionaryValue* toolstrip_value; 1264 DictionaryValue* toolstrip_value;
1255 std::string toolstrip_path; 1265 std::string toolstrip_path;
1256 if (list_value->GetString(i, &toolstrip_path)) { 1266 if (list_value->GetString(i, &toolstrip_path)) {
1257 // Support a simple URL value for backwards compatibility. 1267 // Support a simple URL value for backwards compatibility.
1258 toolstrip.toolstrip = GetResourceURL(toolstrip_path); 1268 toolstrip.toolstrip = GetResourceURL(toolstrip_path);
1259 } else if (list_value->GetDictionary(i, &toolstrip_value)) { 1269 } else if (list_value->GetDictionary(i, &toolstrip_value)) {
1260 if (!toolstrip_value->GetString(keys::kToolstripPath, 1270 if (!toolstrip_value->GetString(keys::kToolstripPath,
1261 &toolstrip_path)) { 1271 &toolstrip_path)) {
1262 *error = ExtensionErrorUtils::FormatErrorMessage( 1272 *error = ExtensionErrorUtils::FormatErrorMessage(
1263 errors::kInvalidToolstrip, IntToString(i)); 1273 errors::kInvalidToolstrip, base::IntToString(i));
1264 return false; 1274 return false;
1265 } 1275 }
1266 toolstrip.toolstrip = GetResourceURL(toolstrip_path); 1276 toolstrip.toolstrip = GetResourceURL(toolstrip_path);
1267 if (toolstrip_value->HasKey(keys::kToolstripMolePath)) { 1277 if (toolstrip_value->HasKey(keys::kToolstripMolePath)) {
1268 std::string mole_path; 1278 std::string mole_path;
1269 if (!toolstrip_value->GetString(keys::kToolstripMolePath, 1279 if (!toolstrip_value->GetString(keys::kToolstripMolePath,
1270 &mole_path)) { 1280 &mole_path)) {
1271 *error = ExtensionErrorUtils::FormatErrorMessage( 1281 *error = ExtensionErrorUtils::FormatErrorMessage(
1272 errors::kInvalidToolstrip, IntToString(i)); 1282 errors::kInvalidToolstrip, base::IntToString(i));
1273 return false; 1283 return false;
1274 } 1284 }
1275 int height; 1285 int height;
1276 if (!toolstrip_value->GetInteger(keys::kToolstripMoleHeight, 1286 if (!toolstrip_value->GetInteger(keys::kToolstripMoleHeight,
1277 &height) || (height < 0)) { 1287 &height) || (height < 0)) {
1278 *error = ExtensionErrorUtils::FormatErrorMessage( 1288 *error = ExtensionErrorUtils::FormatErrorMessage(
1279 errors::kInvalidToolstrip, IntToString(i)); 1289 errors::kInvalidToolstrip, base::IntToString(i));
1280 return false; 1290 return false;
1281 } 1291 }
1282 toolstrip.mole = GetResourceURL(mole_path); 1292 toolstrip.mole = GetResourceURL(mole_path);
1283 toolstrip.mole_height = height; 1293 toolstrip.mole_height = height;
1284 } 1294 }
1285 } else { 1295 } else {
1286 *error = ExtensionErrorUtils::FormatErrorMessage( 1296 *error = ExtensionErrorUtils::FormatErrorMessage(
1287 errors::kInvalidToolstrip, IntToString(i)); 1297 errors::kInvalidToolstrip, base::IntToString(i));
1288 return false; 1298 return false;
1289 } 1299 }
1290 toolstrips_.push_back(toolstrip); 1300 toolstrips_.push_back(toolstrip);
1291 } 1301 }
1292 } 1302 }
1293 1303
1294 // Initialize content scripts (optional). 1304 // Initialize content scripts (optional).
1295 if (source.HasKey(keys::kContentScripts)) { 1305 if (source.HasKey(keys::kContentScripts)) {
1296 ListValue* list_value; 1306 ListValue* list_value;
1297 if (!source.GetList(keys::kContentScripts, &list_value)) { 1307 if (!source.GetList(keys::kContentScripts, &list_value)) {
1298 *error = errors::kInvalidContentScriptsList; 1308 *error = errors::kInvalidContentScriptsList;
1299 return false; 1309 return false;
1300 } 1310 }
1301 1311
1302 for (size_t i = 0; i < list_value->GetSize(); ++i) { 1312 for (size_t i = 0; i < list_value->GetSize(); ++i) {
1303 DictionaryValue* content_script; 1313 DictionaryValue* content_script;
1304 if (!list_value->GetDictionary(i, &content_script)) { 1314 if (!list_value->GetDictionary(i, &content_script)) {
1305 *error = ExtensionErrorUtils::FormatErrorMessage( 1315 *error = ExtensionErrorUtils::FormatErrorMessage(
1306 errors::kInvalidContentScript, IntToString(i)); 1316 errors::kInvalidContentScript, base::IntToString(i));
1307 return false; 1317 return false;
1308 } 1318 }
1309 1319
1310 UserScript script; 1320 UserScript script;
1311 if (!LoadUserScriptHelper(content_script, i, error, &script)) 1321 if (!LoadUserScriptHelper(content_script, i, error, &script))
1312 return false; // Failed to parse script context definition 1322 return false; // Failed to parse script context definition
1313 script.set_extension_id(id()); 1323 script.set_extension_id(id());
1314 if (converted_from_user_script_) { 1324 if (converted_from_user_script_) {
1315 script.set_emulate_greasemonkey(true); 1325 script.set_emulate_greasemonkey(true);
1316 script.set_match_all_frames(true); // greasemonkey matches all frames 1326 script.set_match_all_frames(true); // greasemonkey matches all frames
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
1384 if (!source.GetList(keys::kPermissions, &permissions)) { 1394 if (!source.GetList(keys::kPermissions, &permissions)) {
1385 *error = ExtensionErrorUtils::FormatErrorMessage( 1395 *error = ExtensionErrorUtils::FormatErrorMessage(
1386 errors::kInvalidPermissions, ""); 1396 errors::kInvalidPermissions, "");
1387 return false; 1397 return false;
1388 } 1398 }
1389 1399
1390 for (size_t i = 0; i < permissions->GetSize(); ++i) { 1400 for (size_t i = 0; i < permissions->GetSize(); ++i) {
1391 std::string permission_str; 1401 std::string permission_str;
1392 if (!permissions->GetString(i, &permission_str)) { 1402 if (!permissions->GetString(i, &permission_str)) {
1393 *error = ExtensionErrorUtils::FormatErrorMessage( 1403 *error = ExtensionErrorUtils::FormatErrorMessage(
1394 errors::kInvalidPermission, IntToString(i)); 1404 errors::kInvalidPermission, base::IntToString(i));
1395 return false; 1405 return false;
1396 } 1406 }
1397 1407
1398 // Check if it's a module permission. If so, enable that permission. 1408 // Check if it's a module permission. If so, enable that permission.
1399 if (IsAPIPermission(permission_str)) { 1409 if (IsAPIPermission(permission_str)) {
1400 api_permissions_.push_back(permission_str); 1410 api_permissions_.push_back(permission_str);
1401 continue; 1411 continue;
1402 } 1412 }
1403 1413
1404 // Otherwise, it's a host pattern permission. 1414 // Otherwise, it's a host pattern permission.
1405 URLPattern pattern(URLPattern::SCHEME_HTTP | 1415 URLPattern pattern(URLPattern::SCHEME_HTTP |
1406 URLPattern::SCHEME_HTTPS | 1416 URLPattern::SCHEME_HTTPS |
1407 URLPattern::SCHEME_CHROMEUI); 1417 URLPattern::SCHEME_CHROMEUI);
1408 if (!pattern.Parse(permission_str)) { 1418 if (!pattern.Parse(permission_str)) {
1409 *error = ExtensionErrorUtils::FormatErrorMessage( 1419 *error = ExtensionErrorUtils::FormatErrorMessage(
1410 errors::kInvalidPermission, IntToString(i)); 1420 errors::kInvalidPermission, base::IntToString(i));
1411 return false; 1421 return false;
1412 } 1422 }
1413 1423
1414 if (!CanAccessURL(pattern)) { 1424 if (!CanAccessURL(pattern)) {
1415 *error = ExtensionErrorUtils::FormatErrorMessage( 1425 *error = ExtensionErrorUtils::FormatErrorMessage(
1416 errors::kInvalidPermissionScheme, IntToString(i)); 1426 errors::kInvalidPermissionScheme, base::IntToString(i));
1417 return false; 1427 return false;
1418 } 1428 }
1419 1429
1420 // The path component is not used for host permissions, so we force it to 1430 // The path component is not used for host permissions, so we force it to
1421 // match all paths. 1431 // match all paths.
1422 pattern.set_path("/*"); 1432 pattern.set_path("/*");
1423 1433
1424 host_permissions_.push_back(pattern); 1434 host_permissions_.push_back(pattern);
1425 } 1435 }
1426 } 1436 }
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
1572 void Extension::SetBackgroundPageReady() { 1582 void Extension::SetBackgroundPageReady() {
1573 DCHECK(!background_url().is_empty()); 1583 DCHECK(!background_url().is_empty());
1574 background_page_ready_ = true; 1584 background_page_ready_ = true;
1575 NotificationService::current()->Notify( 1585 NotificationService::current()->Notify(
1576 NotificationType::EXTENSION_BACKGROUND_PAGE_READY, 1586 NotificationType::EXTENSION_BACKGROUND_PAGE_READY,
1577 Source<Extension>(this), 1587 Source<Extension>(this),
1578 NotificationService::NoDetails()); 1588 NotificationService::NoDetails());
1579 } 1589 }
1580 1590
1581 static std::string SizeToString(const gfx::Size& max_size) { 1591 static std::string SizeToString(const gfx::Size& max_size) {
1582 return IntToString(max_size.width()) + "x" + IntToString(max_size.height()); 1592 return base::IntToString(max_size.width()) + "x" +
1593 base::IntToString(max_size.height());
1583 } 1594 }
1584 1595
1585 void Extension::SetCachedImage(const ExtensionResource& source, 1596 void Extension::SetCachedImage(const ExtensionResource& source,
1586 const SkBitmap& image, 1597 const SkBitmap& image,
1587 const gfx::Size& original_size) { 1598 const gfx::Size& original_size) {
1588 DCHECK(source.extension_root() == path()); // The resource must come from 1599 DCHECK(source.extension_root() == path()); // The resource must come from
1589 // this extension. 1600 // this extension.
1590 const FilePath& path = source.relative_path(); 1601 const FilePath& path = source.relative_path();
1591 gfx::Size actual_size(image.width(), image.height()); 1602 gfx::Size actual_size(image.width(), image.height());
1592 if (actual_size == original_size) { 1603 if (actual_size == original_size) {
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
1729 } else { 1740 } else {
1730 return false; 1741 return false;
1731 } 1742 }
1732 } else { 1743 } else {
1733 return true; 1744 return true;
1734 } 1745 }
1735 } 1746 }
1736 } 1747 }
1737 return false; 1748 return false;
1738 } 1749 }
OLDNEW
« no previous file with comments | « chrome/common/child_process_logging_win.cc ('k') | chrome/common/extensions/update_manifest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698