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

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

Issue 9150008: Introduce background.scripts feature for extension manifests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 11 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 9221c5c56b8d45a7d836cbdc79508b93290521a7..f653297a73034ca1f49d7c197a19b6786060fe36 100644
--- a/chrome/browser/extensions/extension_protocols.cc
+++ b/chrome/browser/extensions/extension_protocols.cc
@@ -12,6 +12,7 @@
#include "base/message_loop.h"
#include "base/path_service.h"
#include "base/string_util.h"
+#include "base/stringprintf.h"
#include "base/threading/thread_restrictions.h"
#include "build/build_config.h"
#include "chrome/browser/extensions/extension_info_map.h"
@@ -101,6 +102,42 @@ class URLRequestResourceBundleJob : public net::URLRequestSimpleJob {
net::HttpResponseInfo response_info_;
};
+class GeneratedBackgroundPageJob : public net::URLRequestSimpleJob {
Matt Perry 2012/01/09 21:12:17 Please add a class comment
+ public:
+ GeneratedBackgroundPageJob(net::URLRequest* request,
+ const scoped_refptr<const Extension> extension,
+ const std::string& content_security_policy)
+ : net::URLRequestSimpleJob(request),
+ extension_(extension) {
+ response_info_.headers = BuildHttpHeaders(content_security_policy);
+ }
+
+ // Overridden from URLRequestSimpleJob:
+ virtual bool GetData(std::string* mime_type,
+ std::string* charset,
+ std::string* data) const OVERRIDE {
+ *mime_type = "text/html";
+ *charset = "utf-8";
+
+ *data = "<!DOCTYPE html>\n<body>\n";
+ for (size_t i = 0; i < extension_->background_scripts().size(); ++i) {
+ *data += "<script src=\"";
+ *data += extension_->background_scripts()[i];
+ *data += "\"></script>\n";
+ }
+
+ return true;
+ }
+
+ virtual void GetResponseInfo(net::HttpResponseInfo* info) {
+ *info = response_info_;
+ }
+
+ private:
+ scoped_refptr<const Extension> extension_;
+ net::HttpResponseInfo response_info_;
+};
+
class URLRequestExtensionJob : public net::URLRequestFileJob {
public:
URLRequestExtensionJob(net::URLRequest* request,
@@ -221,6 +258,13 @@ ExtensionProtocolHandler::MaybeCreateJob(net::URLRequest* request) const {
if (extension)
content_security_policy = extension->content_security_policy();
+ std::string path = request->url().path();
+ if (path.size() > 1 &&
+ path.substr(1) == extension_filenames::kGeneratedBackgroundPageFilename) {
+ return new GeneratedBackgroundPageJob(
+ request, extension, content_security_policy);
+ }
+
FilePath resources_path;
if (PathService::Get(chrome::DIR_RESOURCES, &resources_path) &&
directory_path.DirName() == resources_path) {

Powered by Google App Engine
This is Rietveld 408576698