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

Unified Diff: chrome/common/extensions/extension.cc

Issue 11724002: Move ContentScripts out of Extension (Closed) Base URL: http://git.chromium.org/chromium/src.git@dc_unref_browser_action
Patch Set: Created 7 years, 12 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 side-by-side diff with in-line comments
Download patch
Index: chrome/common/extensions/extension.cc
diff --git a/chrome/common/extensions/extension.cc b/chrome/common/extensions/extension.cc
index a3c226a1da941e58cb9b4683c928e4d192d4ce5b..827ad56400fe72039aac625a5077edff0757161a 100644
--- a/chrome/common/extensions/extension.cc
+++ b/chrome/common/extensions/extension.cc
@@ -1236,15 +1236,6 @@ bool Extension::ShouldDisplayInExtensionSettings() const {
return true;
}
-bool Extension::HasContentScriptAtURL(const GURL& url) const {
- for (UserScriptList::const_iterator it = content_scripts_.begin();
- it != content_scripts_.end(); ++it) {
- if (it->MatchesURL(url))
- return true;
- }
- return false;
-}
-
scoped_refptr<const PermissionSet> Extension::GetTabSpecificPermissions(
int tab_id) const {
base::AutoLock auto_lock(runtime_data_lock_);
@@ -2767,7 +2758,6 @@ bool Extension::LoadExtensionFeatures(APIPermissionSet* api_permissions,
if (!LoadManifestHandlerFeatures(error) ||
!LoadDevToolsPage(error) ||
!LoadInputComponents(*api_permissions, error) ||
- !LoadContentScripts(error) ||
!LoadPageAction(error) ||
!LoadSystemIndicator(api_permissions, error) ||
!LoadChromeURLOverrides(error) ||
@@ -2939,36 +2929,6 @@ bool Extension::LoadInputComponents(const APIPermissionSet& api_permissions,
return true;
}
-bool Extension::LoadContentScripts(string16* error) {
- if (!manifest_->HasKey(keys::kContentScripts))
- return true;
- ListValue* list_value;
- if (!manifest_->GetList(keys::kContentScripts, &list_value)) {
- *error = ASCIIToUTF16(errors::kInvalidContentScriptsList);
- return false;
- }
-
- for (size_t i = 0; i < list_value->GetSize(); ++i) {
- DictionaryValue* content_script = NULL;
- if (!list_value->GetDictionary(i, &content_script)) {
- *error = ErrorUtils::FormatErrorMessageUTF16(
- errors::kInvalidContentScript, base::IntToString(i));
- return false;
- }
-
- UserScript script;
- if (!LoadUserScriptHelper(content_script, i, error, &script))
- return false; // Failed to parse script context definition.
- script.set_extension_id(id());
- if (converted_from_user_script_) {
- script.set_emulate_greasemonkey(true);
- script.set_match_all_frames(true); // Greasemonkey matches all frames.
- }
- content_scripts_.push_back(script);
- }
- return true;
-}
-
bool Extension::LoadPageAction(string16* error) {
DictionaryValue* page_action_value = NULL;
@@ -3364,251 +3324,6 @@ SkBitmap* Extension::GetCachedImageImpl(const ExtensionResource& source,
return NULL;
}
-// Helper method that loads a UserScript object from a dictionary in the
-// content_script list of the manifest.
-bool Extension::LoadUserScriptHelper(const DictionaryValue* content_script,
- int definition_index,
- string16* error,
- UserScript* result) {
- // run_at
- if (content_script->HasKey(keys::kRunAt)) {
- std::string run_location;
- if (!content_script->GetString(keys::kRunAt, &run_location)) {
- *error = ErrorUtils::FormatErrorMessageUTF16(
- errors::kInvalidRunAt,
- base::IntToString(definition_index));
- return false;
- }
-
- if (run_location == values::kRunAtDocumentStart) {
- result->set_run_location(UserScript::DOCUMENT_START);
- } else if (run_location == values::kRunAtDocumentEnd) {
- result->set_run_location(UserScript::DOCUMENT_END);
- } else if (run_location == values::kRunAtDocumentIdle) {
- result->set_run_location(UserScript::DOCUMENT_IDLE);
- } else {
- *error = ErrorUtils::FormatErrorMessageUTF16(
- errors::kInvalidRunAt,
- base::IntToString(definition_index));
- return false;
- }
- }
-
- // all frames
- if (content_script->HasKey(keys::kAllFrames)) {
- bool all_frames = false;
- if (!content_script->GetBoolean(keys::kAllFrames, &all_frames)) {
- *error = ErrorUtils::FormatErrorMessageUTF16(
- errors::kInvalidAllFrames, base::IntToString(definition_index));
- return false;
- }
- result->set_match_all_frames(all_frames);
- }
-
- // matches (required)
- const ListValue* matches = NULL;
- if (!content_script->GetList(keys::kMatches, &matches)) {
- *error = ErrorUtils::FormatErrorMessageUTF16(
- errors::kInvalidMatches,
- base::IntToString(definition_index));
- return false;
- }
-
- if (matches->GetSize() == 0) {
- *error = ErrorUtils::FormatErrorMessageUTF16(
- errors::kInvalidMatchCount,
- base::IntToString(definition_index));
- return false;
- }
- for (size_t j = 0; j < matches->GetSize(); ++j) {
- std::string match_str;
- if (!matches->GetString(j, &match_str)) {
- *error = ErrorUtils::FormatErrorMessageUTF16(
- errors::kInvalidMatch,
- base::IntToString(definition_index),
- base::IntToString(j),
- errors::kExpectString);
- return false;
- }
-
- URLPattern pattern(UserScript::kValidUserScriptSchemes);
- if (CanExecuteScriptEverywhere())
- pattern.SetValidSchemes(URLPattern::SCHEME_ALL);
-
- URLPattern::ParseResult parse_result = pattern.Parse(match_str);
- if (parse_result != URLPattern::PARSE_SUCCESS) {
- *error = ErrorUtils::FormatErrorMessageUTF16(
- errors::kInvalidMatch,
- base::IntToString(definition_index),
- base::IntToString(j),
- URLPattern::GetParseResultString(parse_result));
- return false;
- }
-
- if (pattern.MatchesScheme(chrome::kFileScheme) &&
- !CanExecuteScriptEverywhere()) {
- wants_file_access_ = true;
- if (!(creation_flags_ & ALLOW_FILE_ACCESS)) {
- pattern.SetValidSchemes(
- pattern.valid_schemes() & ~URLPattern::SCHEME_FILE);
- }
- }
-
- result->add_url_pattern(pattern);
- }
-
- // exclude_matches
- if (content_script->HasKey(keys::kExcludeMatches)) { // optional
- const ListValue* exclude_matches = NULL;
- if (!content_script->GetList(keys::kExcludeMatches, &exclude_matches)) {
- *error = ErrorUtils::FormatErrorMessageUTF16(
- errors::kInvalidExcludeMatches,
- base::IntToString(definition_index));
- return false;
- }
-
- for (size_t j = 0; j < exclude_matches->GetSize(); ++j) {
- std::string match_str;
- if (!exclude_matches->GetString(j, &match_str)) {
- *error = ErrorUtils::FormatErrorMessageUTF16(
- errors::kInvalidExcludeMatch,
- base::IntToString(definition_index),
- base::IntToString(j),
- errors::kExpectString);
- return false;
- }
-
- URLPattern pattern(UserScript::kValidUserScriptSchemes);
- if (CanExecuteScriptEverywhere())
- pattern.SetValidSchemes(URLPattern::SCHEME_ALL);
- URLPattern::ParseResult parse_result = pattern.Parse(match_str);
- if (parse_result != URLPattern::PARSE_SUCCESS) {
- *error = ErrorUtils::FormatErrorMessageUTF16(
- errors::kInvalidExcludeMatch,
- base::IntToString(definition_index), base::IntToString(j),
- URLPattern::GetParseResultString(parse_result));
- return false;
- }
-
- result->add_exclude_url_pattern(pattern);
- }
- }
-
- // include/exclude globs (mostly for Greasemonkey compatibility)
- if (!LoadGlobsHelper(content_script, definition_index, keys::kIncludeGlobs,
- error, &UserScript::add_glob, result)) {
- return false;
- }
-
- if (!LoadGlobsHelper(content_script, definition_index, keys::kExcludeGlobs,
- error, &UserScript::add_exclude_glob, result)) {
- return false;
- }
-
- // js and css keys
- const ListValue* js = NULL;
- if (content_script->HasKey(keys::kJs) &&
- !content_script->GetList(keys::kJs, &js)) {
- *error = ErrorUtils::FormatErrorMessageUTF16(
- errors::kInvalidJsList,
- base::IntToString(definition_index));
- return false;
- }
-
- const ListValue* css = NULL;
- if (content_script->HasKey(keys::kCss) &&
- !content_script->GetList(keys::kCss, &css)) {
- *error = ErrorUtils::
- FormatErrorMessageUTF16(errors::kInvalidCssList,
- base::IntToString(definition_index));
- return false;
- }
-
- // The manifest needs to have at least one js or css user script definition.
- if (((js ? js->GetSize() : 0) + (css ? css->GetSize() : 0)) == 0) {
- *error = ErrorUtils::FormatErrorMessageUTF16(
- errors::kMissingFile,
- base::IntToString(definition_index));
- return false;
- }
-
- if (js) {
- for (size_t script_index = 0; script_index < js->GetSize();
- ++script_index) {
- const Value* value;
- std::string relative;
- if (!js->Get(script_index, &value) || !value->GetAsString(&relative)) {
- *error = ErrorUtils::FormatErrorMessageUTF16(
- errors::kInvalidJs,
- base::IntToString(definition_index),
- base::IntToString(script_index));
- return false;
- }
- GURL url = GetResourceURL(relative);
- ExtensionResource resource = GetResource(relative);
- result->js_scripts().push_back(UserScript::File(
- resource.extension_root(), resource.relative_path(), url));
- }
- }
-
- if (css) {
- for (size_t script_index = 0; script_index < css->GetSize();
- ++script_index) {
- const Value* value;
- std::string relative;
- if (!css->Get(script_index, &value) || !value->GetAsString(&relative)) {
- *error = ErrorUtils::FormatErrorMessageUTF16(
- errors::kInvalidCss,
- base::IntToString(definition_index),
- base::IntToString(script_index));
- return false;
- }
- GURL url = GetResourceURL(relative);
- ExtensionResource resource = GetResource(relative);
- result->css_scripts().push_back(UserScript::File(
- resource.extension_root(), resource.relative_path(), url));
- }
- }
-
- return true;
-}
-
-bool Extension::LoadGlobsHelper(
- const DictionaryValue* content_script,
- int content_script_index,
- const char* globs_property_name,
- string16* error,
- void(UserScript::*add_method)(const std::string& glob),
- UserScript* instance) {
- if (!content_script->HasKey(globs_property_name))
- return true; // they are optional
-
- const ListValue* list = NULL;
- if (!content_script->GetList(globs_property_name, &list)) {
- *error = ErrorUtils::FormatErrorMessageUTF16(
- errors::kInvalidGlobList,
- base::IntToString(content_script_index),
- globs_property_name);
- return false;
- }
-
- for (size_t i = 0; i < list->GetSize(); ++i) {
- std::string glob;
- if (!list->GetString(i, &glob)) {
- *error = ErrorUtils::FormatErrorMessageUTF16(
- errors::kInvalidGlob,
- base::IntToString(content_script_index),
- globs_property_name,
- base::IntToString(i));
- return false;
- }
-
- (instance->*add_method)(glob);
- }
-
- return true;
-}
-
bool Extension::LoadOAuth2Info(string16* error) {
if (!manifest_->HasKey(keys::kOAuth2))
return true;

Powered by Google App Engine
This is Rietveld 408576698