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

Unified Diff: chrome/browser/extensions/extension_protocols.cc

Issue 9909019: Add schema chrome-extension-resource:// for extension resources (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Fix review issues Created 8 years, 8 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/browser/extensions/extension_protocols.cc
diff --git a/chrome/browser/extensions/extension_protocols.cc b/chrome/browser/extensions/extension_protocols.cc
index 4b551533b00188845870845d9d44b1bd55a41d48..8b098ec3adbe7e1d731632d2b534a95fc4c796c2 100644
--- a/chrome/browser/extensions/extension_protocols.cc
+++ b/chrome/browser/extensions/extension_protocols.cc
@@ -8,6 +8,7 @@
#include "base/compiler_specific.h"
#include "base/file_path.h"
+#include "base/file_util.h"
#include "base/logging.h"
#include "base/message_loop.h"
#include "base/path_service.h"
@@ -240,7 +241,7 @@ class ExtensionProtocolHandler
DISALLOW_COPY_AND_ASSIGN(ExtensionProtocolHandler);
};
-// Creates URLRequestJobs for extension:// URLs.
+// Creates URLRequestJobs for chrome-extension:// URLs.
net::URLRequestJob*
ExtensionProtocolHandler::MaybeCreateJob(net::URLRequest* request) const {
// TODO(mpcomplete): better error code.
@@ -317,11 +318,46 @@ ExtensionProtocolHandler::MaybeCreateJob(net::URLRequest* request) const {
base::ThreadRestrictions::ScopedAllowIO allow_io;
resource_file_path = resource.GetFilePath();
}
-
return new URLRequestExtensionJob(request, resource_file_path,
content_security_policy, send_cors_header);
}
+class ExtensionResourceProtocolHandler
+ : public net::URLRequestJobFactory::ProtocolHandler {
+ public:
+ ExtensionResourceProtocolHandler() {}
+ virtual ~ExtensionResourceProtocolHandler() {}
+
+ virtual net::URLRequestJob* MaybeCreateJob(
+ net::URLRequest* request) const OVERRIDE;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(ExtensionResourceProtocolHandler);
+};
+
+// Creates URLRequestJobs for chrome-extension-resource:// URLs.
+net::URLRequestJob*
+ExtensionResourceProtocolHandler::MaybeCreateJob(
+ net::URLRequest* request) const {
+ DCHECK(!request->url().has_host());
+
+ FilePath resource_root_path;
+ PathService::Get(chrome::DIR_RESOURCES_EXTENSION, &resource_root_path);
+
+ FilePath relative_path =
+ extension_file_util::ExtensionURLToRelativeFilePath(request->url());
Tom Sepez 2012/04/13 17:20:51 Is this where we count on unsafe directory travers
Peng 2012/04/17 13:52:05 This function just decode the escape and get the r
+
+ FilePath full_path = resource_root_path.Append(relative_path);
+
+ if (!file_util::AbsolutePath(&full_path) ||
+ !resource_root_path.IsParent(full_path) ||
+ !file_util::PathExists(full_path)) {
+ full_path = FilePath();
abarth-chromium 2012/04/13 17:11:24 This is an important security check, and I'm glad
Peng 2012/04/17 13:52:05 Done.
+ }
+
+ return new net::URLRequestFileJob(request, full_path);
+}
+
} // namespace
net::URLRequestJobFactory::ProtocolHandler* CreateExtensionProtocolHandler(
@@ -329,3 +365,8 @@ net::URLRequestJobFactory::ProtocolHandler* CreateExtensionProtocolHandler(
ExtensionInfoMap* extension_info_map) {
return new ExtensionProtocolHandler(is_incognito, extension_info_map);
}
+
+net::URLRequestJobFactory::ProtocolHandler*
+CreateExtensionResourceProtocolHandler() {
+ return new ExtensionResourceProtocolHandler();
+}

Powered by Google App Engine
This is Rietveld 408576698