summaryrefslogtreecommitdiffstats
path: root/chrome/browser/net
diff options
context:
space:
mode:
authormpcomplete@chromium.org <mpcomplete@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-02-01 21:38:16 +0000
committermpcomplete@chromium.org <mpcomplete@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-02-01 21:38:16 +0000
commitd05ef99c71c3d4db779be737102807cbab88ca45 (patch)
treeb64aa3b5117ecce666372bbc77b6558984194bfa /chrome/browser/net
parent1e1a3ce6a6e266ce93b78fa3c0534aec3db3e2c3 (diff)
downloadchromium_src-d05ef99c71c3d4db779be737102807cbab88ca45.zip
chromium_src-d05ef99c71c3d4db779be737102807cbab88ca45.tar.gz
chromium_src-d05ef99c71c3d4db779be737102807cbab88ca45.tar.bz2
Unreverting: First steps towards webRequest extension API.
Only an asynchronous version of onBeforeRequest is implement, with limited data being passed. Original CL: http://src.chromium.org/viewvc/chrome?view=rev&revision=73196 BUG=60101 TEST=no Review URL: http://codereview.chromium.org/6246032 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@73344 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/net')
-rw-r--r--chrome/browser/net/chrome_network_delegate.cc21
-rw-r--r--chrome/browser/net/chrome_network_delegate.h5
-rw-r--r--chrome/browser/net/chrome_url_request_context.cc6
-rw-r--r--chrome/browser/net/chrome_url_request_context.h13
4 files changed, 39 insertions, 6 deletions
diff --git a/chrome/browser/net/chrome_network_delegate.cc b/chrome/browser/net/chrome_network_delegate.cc
index a657b26..0c92721 100644
--- a/chrome/browser/net/chrome_network_delegate.cc
+++ b/chrome/browser/net/chrome_network_delegate.cc
@@ -5,11 +5,32 @@
#include "chrome/browser/net/chrome_network_delegate.h"
#include "base/logging.h"
+#include "chrome/browser/extensions/extension_webrequest_api.h"
+#include "chrome/browser/net/chrome_url_request_context.h"
#include "net/http/http_request_headers.h"
+#include "net/url_request/url_request.h"
+
+namespace {
+
+// Get the event router from the request context. Currently only
+// ChromeURLRequestContexts use a network delegate, so the cast is guaranteed to
+// work.
+const ExtensionIOEventRouter* GetIOEventRouter(
+ net::URLRequestContext* context) {
+ return static_cast<ChromeURLRequestContext*>(context)->
+ extension_io_event_router();
+}
+
+} // namespace
ChromeNetworkDelegate::ChromeNetworkDelegate() {}
ChromeNetworkDelegate::~ChromeNetworkDelegate() {}
+void ChromeNetworkDelegate::OnBeforeURLRequest(net::URLRequest* request) {
+ ExtensionWebRequestEventRouter::GetInstance()->OnBeforeRequest(
+ GetIOEventRouter(request->context()), request->url(), request->method());
+}
+
void ChromeNetworkDelegate::OnSendHttpRequest(
net::HttpRequestHeaders* headers) {
DCHECK(headers);
diff --git a/chrome/browser/net/chrome_network_delegate.h b/chrome/browser/net/chrome_network_delegate.h
index 55336d6..8bff160 100644
--- a/chrome/browser/net/chrome_network_delegate.h
+++ b/chrome/browser/net/chrome_network_delegate.h
@@ -10,15 +10,14 @@
#include "net/http/http_network_delegate.h"
// ChromeNetworkDelegate is the central point from within the chrome code to
-// add hooks into the network stack. In the future, we can use this for
-// extensions to register hooks for the network stack.
+// add hooks into the network stack.
class ChromeNetworkDelegate : public net::HttpNetworkDelegate {
public:
ChromeNetworkDelegate();
~ChromeNetworkDelegate();
// net::HttpNetworkDelegate methods:
-
+ virtual void OnBeforeURLRequest(net::URLRequest* request);
virtual void OnSendHttpRequest(net::HttpRequestHeaders* headers);
// TODO(willchan): Add functions for consumers to register ways to
diff --git a/chrome/browser/net/chrome_url_request_context.cc b/chrome/browser/net/chrome_url_request_context.cc
index dc6853a..81e0474 100644
--- a/chrome/browser/net/chrome_url_request_context.cc
+++ b/chrome/browser/net/chrome_url_request_context.cc
@@ -263,6 +263,7 @@ ChromeURLRequestContext* FactoryForOriginal::Create() {
context->set_host_resolver(io_thread_globals->host_resolver.get());
context->set_cert_verifier(io_thread_globals->cert_verifier.get());
context->set_dnsrr_resolver(io_thread_globals->dnsrr_resolver.get());
+ context->set_network_delegate(&io_thread_globals->network_delegate);
context->set_http_auth_handler_factory(
io_thread_globals->http_auth_handler_factory.get());
@@ -368,6 +369,7 @@ ChromeURLRequestContext* FactoryForExtensions::Create() {
chrome::kExtensionScheme};
cookie_monster->SetCookieableSchemes(schemes, 2);
context->set_cookie_store(cookie_monster);
+ context->set_network_delegate(&io_thread_globals->network_delegate);
// TODO(cbentzel): How should extensions handle HTTP Authentication?
context->set_http_auth_handler_factory(
io_thread_globals->http_auth_handler_factory.get());
@@ -402,6 +404,7 @@ ChromeURLRequestContext* FactoryForOffTheRecord::Create() {
context->set_cert_verifier(io_thread_globals->cert_verifier.get());
context->set_http_auth_handler_factory(
io_thread_globals->http_auth_handler_factory.get());
+ context->set_network_delegate(&io_thread_globals->network_delegate);
const CommandLine& command_line = *CommandLine::ForCurrentProcess();
context->set_proxy_service(
@@ -477,6 +480,7 @@ ChromeURLRequestContext* FactoryForMedia::Create() {
// TODO(willchan): Make a global ProxyService available in IOThread::Globals.
context->set_proxy_service(main_context->proxy_service());
+ context->set_network_delegate(main_context->network_delegate());
// Also share the cookie store of the common profile.
context->set_cookie_store(main_context->cookie_store());
@@ -855,6 +859,7 @@ ChromeURLRequestContextFactory::ChromeURLRequestContextFactory(Profile* profile)
blob_storage_context_ = profile->GetBlobStorageContext();
file_system_context_ = profile->GetFileSystemContext();
extension_info_map_ = profile->GetExtensionInfoMap();
+ extension_io_event_router_ = profile->GetExtensionIOEventRouter();
prerender_manager_ = profile->GetPrerenderManager();
}
@@ -881,5 +886,6 @@ void ChromeURLRequestContextFactory::ApplyProfileParametersToContext(
context->set_blob_storage_context(blob_storage_context_);
context->set_file_system_context(file_system_context_);
context->set_extension_info_map(extension_info_map_);
+ context->set_extension_io_event_router(extension_io_event_router_);
context->set_prerender_manager(prerender_manager_);
}
diff --git a/chrome/browser/net/chrome_url_request_context.h b/chrome/browser/net/chrome_url_request_context.h
index f65f63c..50f2d66 100644
--- a/chrome/browser/net/chrome_url_request_context.h
+++ b/chrome/browser/net/chrome_url_request_context.h
@@ -14,6 +14,8 @@
#include "chrome/browser/chrome_blob_storage_context.h"
#include "chrome/browser/content_settings/host_content_settings_map.h"
#include "chrome/browser/extensions/extension_info_map.h"
+#include "chrome/browser/extensions/extension_io_event_router.h"
+#include "chrome/browser/extensions/extension_webrequest_api.h"
#include "chrome/browser/host_zoom_map.h"
#include "chrome/browser/io_thread.h"
#include "chrome/browser/net/chrome_cookie_policy.h"
@@ -91,6 +93,10 @@ class ChromeURLRequestContext : public net::URLRequestContext {
return extension_info_map_;
}
+ const ExtensionIOEventRouter* extension_io_event_router() const {
+ return extension_io_event_router_;
+ }
+
PrerenderManager* prerender_manager() {
return prerender_manager_.get();
}
@@ -155,9 +161,8 @@ class ChromeURLRequestContext : public net::URLRequestContext {
void set_extension_info_map(ExtensionInfoMap* map) {
extension_info_map_ = map;
}
- void set_network_delegate(
- net::HttpNetworkDelegate* network_delegate) {
- network_delegate_ = network_delegate;
+ void set_extension_io_event_router(ExtensionIOEventRouter* router) {
+ extension_io_event_router_ = router;
}
void set_prerender_manager(PrerenderManager* prerender_manager) {
prerender_manager_ = prerender_manager;
@@ -183,6 +188,7 @@ class ChromeURLRequestContext : public net::URLRequestContext {
scoped_refptr<fileapi::SandboxedFileSystemContext> file_system_context_;
// TODO(aa): This should use chrome/common/extensions/extension_set.h.
scoped_refptr<ExtensionInfoMap> extension_info_map_;
+ scoped_refptr<ExtensionIOEventRouter> extension_io_event_router_;
scoped_refptr<PrerenderManager> prerender_manager_;
bool is_off_the_record_;
@@ -353,6 +359,7 @@ class ChromeURLRequestContextFactory {
scoped_refptr<ChromeBlobStorageContext> blob_storage_context_;
scoped_refptr<fileapi::SandboxedFileSystemContext> file_system_context_;
scoped_refptr<ExtensionInfoMap> extension_info_map_;
+ scoped_refptr<ExtensionIOEventRouter> extension_io_event_router_;
scoped_refptr<PrerenderManager> prerender_manager_;
FilePath profile_dir_path_;