diff options
Diffstat (limited to 'chrome/browser')
24 files changed, 84 insertions, 37 deletions
diff --git a/chrome/browser/background_application_list_model_unittest.cc b/chrome/browser/background_application_list_model_unittest.cc index 27e8514..4f4a249 100644 --- a/chrome/browser/background_application_list_model_unittest.cc +++ b/chrome/browser/background_application_list_model_unittest.cc @@ -90,7 +90,7 @@ static scoped_refptr<Extension> CreateExtension(const std::string& name, std::string error; scoped_refptr<Extension> extension = Extension::Create( bogus_file_path().AppendASCII(name), Extension::INVALID, manifest, false, - &error); + true, &error); // Cannot ASSERT_* here because that attempts an illegitimate return. // Cannot EXPECT_NE here because that assumes non-pointers unlike EXPECT_EQ EXPECT_TRUE(extension.get() != NULL) << error; diff --git a/chrome/browser/extensions/convert_user_script.cc b/chrome/browser/extensions/convert_user_script.cc index 0b45da8..f0ec459 100644 --- a/chrome/browser/extensions/convert_user_script.cc +++ b/chrome/browser/extensions/convert_user_script.cc @@ -147,7 +147,12 @@ scoped_refptr<Extension> ConvertUserScriptToExtension( } scoped_refptr<Extension> extension = Extension::Create( - temp_dir.path(), Extension::INTERNAL, *root, false, error); + temp_dir.path(), + Extension::INTERNAL, + *root, + false, // Do not require key + false, // Disable strict checks + error); if (!extension) { NOTREACHED() << "Could not init extension " << *error; return NULL; diff --git a/chrome/browser/extensions/convert_web_app.cc b/chrome/browser/extensions/convert_web_app.cc index fe082d9..66e3e8f 100644 --- a/chrome/browser/extensions/convert_web_app.cc +++ b/chrome/browser/extensions/convert_web_app.cc @@ -168,7 +168,12 @@ scoped_refptr<Extension> ConvertWebAppToExtension( // Finally, create the extension object to represent the unpacked directory. std::string error; scoped_refptr<Extension> extension = Extension::Create( - temp_dir.path(), Extension::INTERNAL, *root, false, &error); + temp_dir.path(), + Extension::INTERNAL, + *root, + false, // Don't require a key. + true, // Enable strict error checks. + &error); if (!extension) { LOG(ERROR) << error; return NULL; diff --git a/chrome/browser/extensions/crx_installer.cc b/chrome/browser/extensions/crx_installer.cc index 1f494b0..39365fd 100644 --- a/chrome/browser/extensions/crx_installer.cc +++ b/chrome/browser/extensions/crx_installer.cc @@ -374,7 +374,11 @@ void CrxInstaller::CompleteInstall() { // lazily and based on the Extension's root path at that moment. std::string error; extension_ = extension_file_util::LoadExtension( - version_dir, install_source_, true, &error); + version_dir, + install_source_, + true, // Require key + false, // Disable strict error checks + &error); CHECK(error.empty()) << error; ReportSuccessFromFileThread(); diff --git a/chrome/browser/extensions/extension_context_menu_api.cc b/chrome/browser/extensions/extension_context_menu_api.cc index 78f4f03..d8e93f2 100644 --- a/chrome/browser/extensions/extension_context_menu_api.cc +++ b/chrome/browser/extensions/extension_context_menu_api.cc @@ -138,7 +138,10 @@ bool ExtensionContextMenuFunction::ParseURLPatterns( return false; URLPattern pattern(ExtensionMenuManager::kAllowedSchemes); - if (URLPattern::PARSE_SUCCESS != pattern.Parse(tmp)) { + // TODO(skerner): Consider enabling strict pattern parsing + // if this extension's location indicates that it is under development. + if (URLPattern::PARSE_SUCCESS != pattern.Parse(tmp, + URLPattern::PARSE_LENIENT)) { error_ = ExtensionErrorUtils::FormatErrorMessage(kInvalidURLPatternError, tmp); return false; diff --git a/chrome/browser/extensions/extension_creator.cc b/chrome/browser/extensions/extension_creator.cc index a211071..e21728f 100644 --- a/chrome/browser/extensions/extension_creator.cc +++ b/chrome/browser/extensions/extension_creator.cc @@ -60,6 +60,7 @@ bool ExtensionCreator::InitializeInput( extension_file_util::LoadExtension(extension_dir, Extension::INTERNAL, false, // key not required + true, // enable strict error checks &error_message_)); if (!extension.get()) return false; // LoadExtension already set error_message_. diff --git a/chrome/browser/extensions/extension_icon_manager_unittest.cc b/chrome/browser/extensions/extension_icon_manager_unittest.cc index 0a4189c..6bb2445 100644 --- a/chrome/browser/extensions/extension_icon_manager_unittest.cc +++ b/chrome/browser/extensions/extension_icon_manager_unittest.cc @@ -111,7 +111,7 @@ TEST_F(ExtensionIconManagerTest, LoadRemoveLoad) { scoped_refptr<Extension> extension(Extension::Create( manifest_path.DirName(), Extension::INVALID, *manifest.get(), - false, NULL)); + false, true, NULL)); ASSERT_TRUE(extension.get()); TestIconManager icon_manager(this); diff --git a/chrome/browser/extensions/extension_info_map_unittest.cc b/chrome/browser/extensions/extension_info_map_unittest.cc index ba5a0b2..7d82dd2 100644 --- a/chrome/browser/extensions/extension_info_map_unittest.cc +++ b/chrome/browser/extensions/extension_info_map_unittest.cc @@ -42,7 +42,8 @@ static scoped_refptr<Extension> CreateExtension(const std::string& name) { std::string error; scoped_refptr<Extension> extension = Extension::Create( - path.AppendASCII(name), Extension::INVALID, manifest, false, &error); + path.AppendASCII(name), Extension::INVALID, manifest, false, true, + &error); EXPECT_TRUE(extension) << error; return extension; @@ -64,7 +65,7 @@ static scoped_refptr<Extension> LoadManifest(const std::string& dir, std::string error; scoped_refptr<Extension> extension = Extension::Create( path, Extension::INVALID, *static_cast<DictionaryValue*>(result.get()), - false, &error); + false, true, &error); EXPECT_TRUE(extension) << error; return extension; diff --git a/chrome/browser/extensions/extension_prefs.cc b/chrome/browser/extensions/extension_prefs.cc index 2022c11..1aa8840 100644 --- a/chrome/browser/extensions/extension_prefs.cc +++ b/chrome/browser/extensions/extension_prefs.cc @@ -488,7 +488,6 @@ void ExtensionPrefs::SetLastPingDayImpl(const Time& time, SavePrefsAndNotify(); } - bool ExtensionPrefs::GetGrantedPermissions( const std::string& extension_id, bool* full_access, @@ -511,11 +510,20 @@ bool ExtensionPrefs::GetGrantedPermissions( // "permissions" array and from the content script "matches" arrays, // so the URLPattern needs to accept valid schemes from both types. for (std::set<std::string>::iterator i = host_permissions.begin(); - i != host_permissions.end(); ++i) - host_extent->AddPattern(URLPattern( + i != host_permissions.end(); ++i) { + URLPattern pattern( Extension::kValidHostPermissionSchemes | - UserScript::kValidUserScriptSchemes, - *i)); + UserScript::kValidUserScriptSchemes); + + // Parse without strict checks, so that new strict checks do not + // fail on a pattern in an installed extension. + if (URLPattern::PARSE_SUCCESS != pattern.Parse( + *i, URLPattern::PARSE_LENIENT)) { + NOTREACHED(); // Corrupt prefs? Hand editing? + } else { + host_extent->AddPattern(pattern); + } + } return true; } diff --git a/chrome/browser/extensions/extension_prefs_unittest.cc b/chrome/browser/extensions/extension_prefs_unittest.cc index fd83f56..71b4bb1 100644 --- a/chrome/browser/extensions/extension_prefs_unittest.cc +++ b/chrome/browser/extensions/extension_prefs_unittest.cc @@ -619,13 +619,13 @@ class ExtensionPrefsPreferencesBase : public ExtensionPrefsTest { ext1_scoped_ = Extension::Create( prefs_.temp_dir().AppendASCII("ext1_"), Extension::EXTERNAL_PREF, - simple_dict, false, &error); + simple_dict, false, true, &error); ext2_scoped_ = Extension::Create( prefs_.temp_dir().AppendASCII("ext2_"), Extension::EXTERNAL_PREF, - simple_dict, false, &error); + simple_dict, false, true, &error); ext3_scoped_ = Extension::Create( prefs_.temp_dir().AppendASCII("ext3_"), Extension::EXTERNAL_PREF, - simple_dict, false, &error); + simple_dict, false, true, &error); ext1_ = ext1_scoped_.get(); ext2_ = ext2_scoped_.get(); diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc index 6116e99..7d6d5e10 100644 --- a/chrome/browser/extensions/extension_service.cc +++ b/chrome/browser/extensions/extension_service.cc @@ -201,6 +201,7 @@ void ExtensionServiceBackend::LoadSingleExtension( extension_path, Extension::LOAD, false, // Don't require id + Extension::ShouldDoStrictErrorChecking(Extension::LOAD), &error)); if (!extension) { @@ -833,7 +834,8 @@ void ExtensionService::LoadComponentExtensions() { it->root_directory, Extension::COMPONENT, *static_cast<DictionaryValue*>(manifest.get()), - true, // require key + true, // Require key + Extension::ShouldDoStrictErrorChecking(Extension::COMPONENT), &error)); if (!extension.get()) { NOTREACHED() << error; @@ -878,7 +880,11 @@ void ExtensionService::LoadAllExtensions() { std::string error; scoped_refptr<const Extension> extension( extension_file_util::LoadExtension( - info->extension_path, info->extension_location, false, &error)); + info->extension_path, + info->extension_location, + false, // Don't require key + Extension::ShouldDoStrictErrorChecking(info->extension_location), + &error)); if (extension.get()) { extensions_info->at(i)->extension_manifest.reset( @@ -985,7 +991,7 @@ void ExtensionService::LoadAllExtensions() { } void ExtensionService::LoadInstalledExtension(const ExtensionInfo& info, - bool write_to_prefs) { + bool write_to_prefs) { std::string error; scoped_refptr<const Extension> extension(NULL); if (!extension_prefs_->IsExtensionAllowedByPolicy(info.extension_id)) { @@ -993,8 +999,12 @@ void ExtensionService::LoadInstalledExtension(const ExtensionInfo& info, } else if (info.extension_manifest.get()) { bool require_key = info.extension_location != Extension::LOAD; extension = Extension::Create( - info.extension_path, info.extension_location, *info.extension_manifest, - require_key, &error); + info.extension_path, + info.extension_location, + *info.extension_manifest, + require_key, + Extension::ShouldDoStrictErrorChecking(info.extension_location), + &error); } else { error = errors::kManifestUnreadable; } diff --git a/chrome/browser/extensions/extension_special_storage_policy_unittest.cc b/chrome/browser/extensions/extension_special_storage_policy_unittest.cc index 9597fb8..3a77b25 100644 --- a/chrome/browser/extensions/extension_special_storage_policy_unittest.cc +++ b/chrome/browser/extensions/extension_special_storage_policy_unittest.cc @@ -28,7 +28,7 @@ class ExtensionSpecialStoragePolicyTest : public testing::Test { manifest.Set(keys::kWebURLs, list); std::string error; scoped_refptr<Extension> protected_app = Extension::Create( - path, Extension::INVALID, manifest, false, &error); + path, Extension::INVALID, manifest, false, true, &error); EXPECT_TRUE(protected_app.get()) << error; return protected_app; } @@ -52,7 +52,7 @@ class ExtensionSpecialStoragePolicyTest : public testing::Test { manifest.Set(keys::kWebURLs, list); std::string error; scoped_refptr<Extension> unlimited_app = Extension::Create( - path, Extension::INVALID, manifest, false, &error); + path, Extension::INVALID, manifest, false, true, &error); EXPECT_TRUE(unlimited_app.get()) << error; return unlimited_app; } diff --git a/chrome/browser/extensions/extension_ui_unittest.cc b/chrome/browser/extensions/extension_ui_unittest.cc index 5980109..b2ae1c5 100644 --- a/chrome/browser/extensions/extension_ui_unittest.cc +++ b/chrome/browser/extensions/extension_ui_unittest.cc @@ -42,7 +42,7 @@ namespace { EXPECT_EQ("", error); scoped_refptr<Extension> extension(Extension::Create( - path, Extension::INVALID, *extension_data, true, &error)); + path, Extension::INVALID, *extension_data, true, true, &error)); EXPECT_TRUE(extension.get()); EXPECT_EQ("", error); diff --git a/chrome/browser/extensions/extension_webrequest_api.cc b/chrome/browser/extensions/extension_webrequest_api.cc index d2567a9..a68f2b3 100644 --- a/chrome/browser/extensions/extension_webrequest_api.cc +++ b/chrome/browser/extensions/extension_webrequest_api.cc @@ -131,7 +131,8 @@ bool ExtensionWebRequestEventRouter::RequestFilter::InitFromValue( std::string url; URLPattern pattern(URLPattern::SCHEME_ALL); if (!urls_value->GetString(i, &url) || - pattern.Parse(url) != URLPattern::PARSE_SUCCESS) + pattern.Parse(url, URLPattern::PARSE_STRICT) != + URLPattern::PARSE_SUCCESS) return false; urls.AddPattern(pattern); } diff --git a/chrome/browser/extensions/image_loading_tracker_unittest.cc b/chrome/browser/extensions/image_loading_tracker_unittest.cc index 4e41d32..e43d8d5 100644 --- a/chrome/browser/extensions/image_loading_tracker_unittest.cc +++ b/chrome/browser/extensions/image_loading_tracker_unittest.cc @@ -75,7 +75,7 @@ class ImageLoadingTrackerTest : public testing::Test, return NULL; return Extension::Create( - test_file, Extension::INVALID, *valid_value, false, &error); + test_file, Extension::INVALID, *valid_value, false, true, &error); } SkBitmap image_; diff --git a/chrome/browser/extensions/sandboxed_extension_unpacker.cc b/chrome/browser/extensions/sandboxed_extension_unpacker.cc index 008c2fc..d7a9b1b 100644 --- a/chrome/browser/extensions/sandboxed_extension_unpacker.cc +++ b/chrome/browser/extensions/sandboxed_extension_unpacker.cc @@ -181,7 +181,12 @@ void SandboxedExtensionUnpacker::OnUnpackExtensionSucceeded( } extension_ = Extension::Create( - extension_root_, Extension::INTERNAL, *final_manifest, true, &error); + extension_root_, + Extension::INTERNAL, + *final_manifest, + true, // Require key + false, // Disable strict error checks + &error); if (!extension_.get()) { ReportFailure( diff --git a/chrome/browser/extensions/test_extension_prefs.cc b/chrome/browser/extensions/test_extension_prefs.cc index 0975f27..a8c8a66 100644 --- a/chrome/browser/extensions/test_extension_prefs.cc +++ b/chrome/browser/extensions/test_extension_prefs.cc @@ -98,7 +98,7 @@ scoped_refptr<Extension> TestExtensionPrefs::AddExtensionWithManifest( FilePath path = extensions_dir_.AppendASCII(name); std::string errors; scoped_refptr<Extension> extension = Extension::Create( - path, location, manifest, false, &errors); + path, location, manifest, false, true, &errors); EXPECT_TRUE(extension); if (!extension) return NULL; diff --git a/chrome/browser/extensions/user_script_master.cc b/chrome/browser/extensions/user_script_master.cc index eae62b4..c62f452 100644 --- a/chrome/browser/extensions/user_script_master.cc +++ b/chrome/browser/extensions/user_script_master.cc @@ -107,7 +107,8 @@ bool UserScriptMaster::ScriptReloader::ParseMetadataHeader( script->set_description(value); } else if (GetDeclarationValue(line, kMatchDeclaration, &value)) { URLPattern pattern(UserScript::kValidUserScriptSchemes); - if (URLPattern::PARSE_SUCCESS != pattern.Parse(value)) + if (URLPattern::PARSE_SUCCESS != + pattern.Parse(value, URLPattern::PARSE_LENIENT)) return false; script->add_url_pattern(pattern); } else if (GetDeclarationValue(line, kRunAtDeclaration, &value)) { diff --git a/chrome/browser/sync/glue/extension_util_unittest.cc b/chrome/browser/sync/glue/extension_util_unittest.cc index 946ca5a..2ca92dd 100644 --- a/chrome/browser/sync/glue/extension_util_unittest.cc +++ b/chrome/browser/sync/glue/extension_util_unittest.cc @@ -71,7 +71,7 @@ scoped_refptr<Extension> MakeExtension( std::string error; scoped_refptr<Extension> extension = Extension::Create( - extension_path, location, source, false, &error); + extension_path, location, source, false, true, &error); #if defined(OS_CHROMEOS) if (num_plugins > 0) { // plugins are illegal in extensions on chrome os. EXPECT_FALSE(extension); @@ -386,7 +386,7 @@ scoped_refptr<Extension> MakeSyncableExtension( source.SetString(extension_manifest_keys::kName, name); std::string error; scoped_refptr<Extension> extension = Extension::Create( - extension_path, Extension::INTERNAL, source, false, &error); + extension_path, Extension::INTERNAL, source, false, true, &error); EXPECT_TRUE(extension); EXPECT_EQ("", error); return extension; diff --git a/chrome/browser/sync/glue/theme_util_unittest.cc b/chrome/browser/sync/glue/theme_util_unittest.cc index 575ae86..dfa3ea3 100644 --- a/chrome/browser/sync/glue/theme_util_unittest.cc +++ b/chrome/browser/sync/glue/theme_util_unittest.cc @@ -33,7 +33,7 @@ scoped_refptr<Extension> MakeThemeExtension(const FilePath& extension_path, source.SetString(extension_manifest_keys::kVersion, "0.0.0.0"); std::string error; scoped_refptr<Extension> extension = Extension::Create( - extension_path, Extension::INTERNAL, source, false, &error); + extension_path, Extension::INTERNAL, source, false, true, &error); EXPECT_TRUE(extension); EXPECT_EQ("", error); return extension; diff --git a/chrome/browser/sync/util/extensions_activity_monitor_unittest.cc b/chrome/browser/sync/util/extensions_activity_monitor_unittest.cc index ec661bf..ed51a36 100644 --- a/chrome/browser/sync/util/extensions_activity_monitor_unittest.cc +++ b/chrome/browser/sync/util/extensions_activity_monitor_unittest.cc @@ -73,7 +73,8 @@ class BookmarkAPIEventGenerator { input.SetString(keys::kVersion, kTestExtensionVersion); input.SetString(keys::kName, kTestExtensionName); scoped_refptr<Extension> extension(Extension::Create( - FilePath(extension_path), Extension::INVALID, input, false, &error)); + FilePath(extension_path), Extension::INVALID, input, false, true, + &error)); bookmarks_function->set_name(T::function_name()); base::WaitableEvent done_event(false, false); BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, @@ -131,7 +132,8 @@ class ExtensionsActivityMonitorTest : public testing::Test { input.SetString(keys::kVersion, kTestExtensionVersion); input.SetString(keys::kName, kTestExtensionName); scoped_refptr<Extension> extension(Extension::Create( - FilePath(extension_path), Extension::INVALID, input, false, &error)); + FilePath(extension_path), Extension::INVALID, input, false, true, + &error)); EXPECT_EQ("", error); return extension->id(); } diff --git a/chrome/browser/themes/browser_theme_pack_unittest.cc b/chrome/browser/themes/browser_theme_pack_unittest.cc index d13945c..72219f0 100644 --- a/chrome/browser/themes/browser_theme_pack_unittest.cc +++ b/chrome/browser/themes/browser_theme_pack_unittest.cc @@ -406,7 +406,8 @@ TEST_F(BrowserThemePackTest, CanBuildAndReadPack) { EXPECT_EQ("", error); ASSERT_TRUE(valid_value.get()); scoped_refptr<Extension> extension(Extension::Create( - star_gazing_path, Extension::INVALID, *valid_value, true, &error)); + star_gazing_path, Extension::INVALID, *valid_value, true, true, + &error)); ASSERT_TRUE(extension.get()); ASSERT_EQ("", error); diff --git a/chrome/browser/ui/cocoa/extensions/extension_install_prompt_controller_unittest.mm b/chrome/browser/ui/cocoa/extensions/extension_install_prompt_controller_unittest.mm index fb393af..f11aeb4 100644 --- a/chrome/browser/ui/cocoa/extensions/extension_install_prompt_controller_unittest.mm +++ b/chrome/browser/ui/cocoa/extensions/extension_install_prompt_controller_unittest.mm @@ -61,7 +61,7 @@ public: } extension_ = Extension::Create( - path.DirName(), Extension::INVALID, *value, false, &error); + path.DirName(), Extension::INVALID, *value, false, true, &error); if (!extension_.get()) { LOG(ERROR) << error; return; diff --git a/chrome/browser/ui/cocoa/extensions/extension_installed_bubble_controller_unittest.mm b/chrome/browser/ui/cocoa/extensions/extension_installed_bubble_controller_unittest.mm index 1cafd26..5115d7d 100644 --- a/chrome/browser/ui/cocoa/extensions/extension_installed_bubble_controller_unittest.mm +++ b/chrome/browser/ui/cocoa/extensions/extension_installed_bubble_controller_unittest.mm @@ -101,7 +101,7 @@ class ExtensionInstalledBubbleControllerTest : public CocoaTest { std::string error; return Extension::Create( - path, Extension::INVALID, extension_input_value, false, &error); + path, Extension::INVALID, extension_input_value, false, true, &error); } // Allows us to create the window and browser for testing. |