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

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

Issue 267051: Minimize dependency of user scripts.... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 11 years, 2 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_resource.cc
===================================================================
--- chrome/common/extensions/extension_resource.cc (revision 29458)
+++ chrome/common/extensions/extension_resource.cc (working copy)
@@ -21,66 +21,39 @@
}
const FilePath& ExtensionResource::GetFilePath() const {
- if (extension_root_.empty() || relative_path_.empty())
+ if (extension_root_.empty() || relative_path_.empty()) {
+ DCHECK(full_resource_path_.empty());
return full_resource_path_;
+ }
// We've already checked, just return last value.
if (!full_resource_path_.empty())
return full_resource_path_;
+ full_resource_path_ = GetFilePath(extension_root_, relative_path_);
+ return full_resource_path_;
+}
+
+// Static version...
+FilePath ExtensionResource::GetFilePath(const FilePath& extension_root,
+ const FilePath& relative_path) {
// Stat l10n file, and return new path if it exists.
FilePath l10n_relative_path =
- extension_l10n_util::GetL10nRelativePath(relative_path_);
- full_resource_path_ = CombinePathsSafely(extension_root_, l10n_relative_path);
- if (file_util::PathExists(full_resource_path_)) {
- return full_resource_path_;
+ extension_l10n_util::GetL10nRelativePath(relative_path);
+ FilePath full_path;
+ if (extension_root.AppendAndResolveRelative(l10n_relative_path, &full_path) &&
+ extension_root.IsParent(full_path) &&
+ file_util::PathExists(full_path)) {
+ return full_path;
}
// Fall back to root resource.
- full_resource_path_ = CombinePathsSafely(extension_root_, relative_path_);
- return full_resource_path_;
-}
+ if (extension_root.AppendAndResolveRelative(relative_path, &full_path) &&
+ extension_root.IsParent(full_path)) {
+ return full_path;
+ }
-FilePath ExtensionResource::CombinePathsSafely(
- const FilePath& extension_path,
- const FilePath& relative_resource_path) const {
- // Build up a file:// URL and convert that back to a FilePath. This avoids
- // URL encoding and path separator issues.
-
- // Convert the extension's root to a file:// URL.
- GURL extension_url = net::FilePathToFileURL(extension_path);
- if (!extension_url.is_valid())
- return FilePath();
-
- // Append the requested path.
- std::string relative_path =
- WideToUTF8(relative_resource_path.ToWStringHack());
- GURL::Replacements replacements;
- std::string new_path(extension_url.path());
- new_path += "/";
- new_path += relative_path;
- replacements.SetPathStr(new_path);
- GURL file_url = extension_url.ReplaceComponents(replacements);
- if (!file_url.is_valid())
- return FilePath();
-
- // Convert the result back to a FilePath.
- FilePath ret_val;
- if (!net::FileURLToFilePath(file_url, &ret_val))
- return FilePath();
-
- // Converting the extension_url back to a path removes all .. and . references
- // that may have been in extension_path that would cause isParent to break.
- FilePath sanitized_extension_path;
- if (!net::FileURLToFilePath(extension_url, &sanitized_extension_path))
- return FilePath();
-
- // Double-check that the path we ended up with is actually inside the
- // extension root.
- if (!sanitized_extension_path.IsParent(ret_val))
- return FilePath();
-
- return ret_val;
+ return FilePath();
}
// Unittesting helpers.
@@ -97,6 +70,9 @@
}
bool ExtensionResource::ComparePathWithDefault(const FilePath& path) const {
+ // Make sure we have a cached value to test against...
+ if (full_resource_path_.empty())
+ GetFilePath();
if (NormalizeSeperators(path.value()) ==
NormalizeSeperators(full_resource_path_.value())) {
return true;

Powered by Google App Engine
This is Rietveld 408576698