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

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

Issue 6772022: Make <all_urls> and file:///* in permissions trigger "Allow file access" (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Patch 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/common/extensions/extension.h ('k') | chrome/common/extensions/extension_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/common/extensions/extension.cc
diff --git a/chrome/common/extensions/extension.cc b/chrome/common/extensions/extension.cc
index 6f1df5263da43527badbb901aba3709d104ec86a..5a1959751f4afb0ab3bfbb2396143f90ec1ab952 100644
--- a/chrome/common/extensions/extension.cc
+++ b/chrome/common/extensions/extension.cc
@@ -264,8 +264,7 @@ const int Extension::kValidWebExtentSchemes =
URLPattern::SCHEME_HTTP | URLPattern::SCHEME_HTTPS;
const int Extension::kValidHostPermissionSchemes =
- (UserScript::kValidUserScriptSchemes |
- URLPattern::SCHEME_CHROMEUI) & ~URLPattern::SCHEME_FILE;
+ UserScript::kValidUserScriptSchemes | URLPattern::SCHEME_CHROMEUI;
//
// Extension
@@ -556,9 +555,14 @@ bool Extension::GenerateId(const std::string& input, std::string* output) {
// content_script list of the manifest.
bool Extension::LoadUserScriptHelper(const DictionaryValue* content_script,
int definition_index,
- URLPattern::ParseOption parse_strictness,
+ int flags,
std::string* error,
UserScript* result) {
+ // When strict error checks are enabled, make URL pattern parsing strict.
+ URLPattern::ParseOption parse_strictness =
+ (flags & STRICT_ERROR_CHECKS ? URLPattern::PARSE_STRICT
+ : URLPattern::PARSE_LENIENT);
+
// run_at
if (content_script->HasKey(keys::kRunAt)) {
std::string run_location;
@@ -631,6 +635,14 @@ bool Extension::LoadUserScriptHelper(const DictionaryValue* content_script,
return false;
}
+ if (pattern.MatchesScheme(chrome::kFileScheme) &&
+ !CanExecuteScriptEverywhere()) {
+ wants_file_access_ = true;
+ if (!(flags & ALLOW_FILE_ACCESS))
+ pattern.set_valid_schemes(
+ pattern.valid_schemes() & ~URLPattern::SCHEME_FILE);
+ }
+
result->add_url_pattern(pattern);
}
@@ -1212,7 +1224,8 @@ Extension::Extension(const FilePath& path, Location location)
is_storage_isolated_(false),
launch_container_(extension_misc::LAUNCH_TAB),
launch_width_(0),
- launch_height_(0) {
+ launch_height_(0),
+ wants_file_access_(false) {
DCHECK(path.IsAbsolute());
path_ = MaybeNormalizePath(path);
}
@@ -1774,8 +1787,7 @@ bool Extension::InitFromValue(const DictionaryValue& source, int flags,
}
UserScript script;
- if (!LoadUserScriptHelper(content_script, i, parse_strictness, error,
- &script))
+ if (!LoadUserScriptHelper(content_script, i, flags, error, &script))
return false; // Failed to parse script context definition.
script.set_extension_id(id());
if (converted_from_user_script_) {
@@ -1961,6 +1973,14 @@ bool Extension::InitFromValue(const DictionaryValue& source, int flags,
// to match all paths.
pattern.SetPath("/*");
+ if (pattern.MatchesScheme(chrome::kFileScheme) &&
+ !CanExecuteScriptEverywhere()) {
+ wants_file_access_ = true;
+ if (!(flags & ALLOW_FILE_ACCESS))
+ pattern.set_valid_schemes(
+ pattern.valid_schemes() & ~URLPattern::SCHEME_FILE);
+ }
+
host_permissions_.push_back(pattern);
}
@@ -2412,7 +2432,7 @@ bool Extension::HasMultipleUISurfaces() const {
}
bool Extension::CanExecuteScriptOnPage(const GURL& page_url,
- UserScript* script,
+ const UserScript* script,
std::string* error) const {
// The gallery is special-cased as a restricted URL for scripting to prevent
// access to special JS bindings we expose to the gallery (and avoid things
« no previous file with comments | « chrome/common/extensions/extension.h ('k') | chrome/common/extensions/extension_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698