summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authorwillchan@chromium.org <willchan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-02-24 00:22:50 +0000
committerwillchan@chromium.org <willchan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-02-24 00:22:50 +0000
commit0651b818c7122d319954ff5bc30dff68ba8b9013 (patch)
treed18a681545594c17175a584b7d56a6ee9abd10b6 /chrome
parent26616172ccaeae9842d7e52b556bc49e16751455 (diff)
downloadchromium_src-0651b818c7122d319954ff5bc30dff68ba8b9013.zip
chromium_src-0651b818c7122d319954ff5bc30dff68ba8b9013.tar.gz
chromium_src-0651b818c7122d319954ff5bc30dff68ba8b9013.tar.bz2
Refactor of NetworkDelegate.
* Renames HttpNetworkDelegate to NetworkDelegate, moves to net/base/network_delegate.h. NOTE: this is a layering violation. wtc/eroman/willchan have agreed to this exception because the other solutions are less palatable. * Move the virtuals in NetworkDelegate to the private section. Use non-virtual public interface as the network stack's interface for notifying the delegate. Add sanity checking to the implmentation in NetworkDelegate. The private virtual interface is for consumers to receive notifications. * Remove ExtensionIOEventRouter from ChromeURLRequestContext, it is only used by the ChromeNetworkDelegate. Pass it directly to the ChromeNetworkDelegate's constructor. * Introduce a SystemNetworkDelegate. It does nothing right now. BUG=67232 TEST=none Review URL: http://codereview.chromium.org/6580002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@75822 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/io_thread.cc20
-rw-r--r--chrome/browser/io_thread.h5
-rw-r--r--chrome/browser/net/chrome_network_delegate.cc30
-rw-r--r--chrome/browser/net/chrome_network_delegate.h17
-rw-r--r--chrome/browser/net/chrome_url_request_context.h9
-rw-r--r--chrome/browser/profiles/off_the_record_profile_io_data.cc13
-rw-r--r--chrome/browser/profiles/off_the_record_profile_io_data.h2
-rw-r--r--chrome/browser/profiles/profile_impl_io_data.cc15
-rw-r--r--chrome/browser/profiles/profile_impl_io_data.h9
-rw-r--r--chrome/browser/profiles/profile_io_data.cc3
10 files changed, 70 insertions, 53 deletions
diff --git a/chrome/browser/io_thread.cc b/chrome/browser/io_thread.cc
index e966707..139bf9e 100644
--- a/chrome/browser/io_thread.cc
+++ b/chrome/browser/io_thread.cc
@@ -37,6 +37,7 @@
#include "net/base/host_resolver_impl.h"
#include "net/base/mapped_host_resolver.h"
#include "net/base/net_util.h"
+#include "net/base/network_delegate.h"
#include "net/http/http_auth_filter.h"
#include "net/http/http_auth_handler_factory.h"
#include "net/http/http_network_layer.h"
@@ -178,6 +179,22 @@ class LoggingNetworkChangeObserver
DISALLOW_COPY_AND_ASSIGN(LoggingNetworkChangeObserver);
};
+class SystemNetworkDelegate : public net::NetworkDelegate {
+ public:
+ SystemNetworkDelegate() {}
+ ~SystemNetworkDelegate() {}
+
+ // NetworkDelegate methods:
+ // TODO(willchan): Implement these functions!
+ virtual void OnBeforeURLRequest(net::URLRequest* request) {}
+ virtual void OnSendHttpRequest(net::HttpRequestHeaders* headers) {}
+ virtual void OnResponseStarted(net::URLRequest* request) {}
+ virtual void OnReadCompleted(net::URLRequest* request, int bytes_read) {}
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(SystemNetworkDelegate);
+};
+
scoped_refptr<net::URLRequestContext>
ConstructProxyScriptFetcherContext(IOThread::Globals* globals,
net::NetLog* net_log) {
@@ -327,6 +344,7 @@ void IOThread::Init() {
network_change_observer_.reset(
new LoggingNetworkChangeObserver(net_log_));
+ globals_->system_network_delegate.reset(new SystemNetworkDelegate);
globals_->host_resolver.reset(
CreateGlobalHostResolver(net_log_));
globals_->cert_verifier.reset(new net::CertVerifier);
@@ -347,7 +365,7 @@ void IOThread::Init() {
session_params.http_auth_handler_factory =
globals_->http_auth_handler_factory.get();
// TODO(willchan): Enable for proxy script fetcher context.
- session_params.network_delegate = NULL;
+ session_params.network_delegate = globals_->system_network_delegate.get();
session_params.net_log = net_log_;
session_params.ssl_config_service = globals_->ssl_config_service;
scoped_refptr<net::HttpNetworkSession> network_session(
diff --git a/chrome/browser/io_thread.h b/chrome/browser/io_thread.h
index 10cac6fa..d0c58de 100644
--- a/chrome/browser/io_thread.h
+++ b/chrome/browser/io_thread.h
@@ -12,7 +12,6 @@
#include "base/ref_counted.h"
#include "base/scoped_ptr.h"
#include "chrome/browser/browser_process_sub_thread.h"
-#include "chrome/browser/net/chrome_network_delegate.h"
#include "chrome/common/net/predictor_common.h"
#include "net/base/network_change_notifier.h"
@@ -32,6 +31,7 @@ class DnsRRResolver;
class HostResolver;
class HttpAuthHandlerFactory;
class HttpTransactionFactory;
+class NetworkDelegate;
class ProxyScriptFetcher;
class ProxyService;
class SSLConfigService;
@@ -45,6 +45,8 @@ class IOThread : public BrowserProcessSubThread {
Globals();
~Globals();
+ // The "system" NetworkDelegate, used for Profile-agnostic network events.
+ scoped_ptr<net::NetworkDelegate> system_network_delegate;
scoped_ptr<net::HostResolver> host_resolver;
scoped_ptr<net::CertVerifier> cert_verifier;
scoped_ptr<net::DnsRRResolver> dnsrr_resolver;
@@ -54,7 +56,6 @@ class IOThread : public BrowserProcessSubThread {
scoped_ptr<net::HttpTransactionFactory>
proxy_script_fetcher_http_transaction_factory;
scoped_ptr<net::URLSecurityManager> url_security_manager;
- ChromeNetworkDelegate network_delegate;
scoped_refptr<net::URLRequestContext> proxy_script_fetcher_context;
};
diff --git a/chrome/browser/net/chrome_network_delegate.cc b/chrome/browser/net/chrome_network_delegate.cc
index ce79045..5452b96 100644
--- a/chrome/browser/net/chrome_network_delegate.cc
+++ b/chrome/browser/net/chrome_network_delegate.cc
@@ -14,52 +14,46 @@
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();
-}
-
// If the |request| failed due to problems with a proxy, forward the error to
// the proxy extension API.
-void ForwardProxyErrors(net::URLRequest* request) {
+void ForwardProxyErrors(net::URLRequest* request,
+ ExtensionIOEventRouter* router) {
if (request->status().status() == net::URLRequestStatus::FAILED) {
switch (request->status().os_error()) {
case net::ERR_PROXY_AUTH_UNSUPPORTED:
case net::ERR_PROXY_CONNECTION_FAILED:
case net::ERR_TUNNEL_CONNECTION_FAILED:
ExtensionProxyEventRouter::GetInstance()->OnProxyError(
- GetIOEventRouter(request->context()),
- request->status().os_error());
+ router, request->status().os_error());
}
}
}
} // namespace
-ChromeNetworkDelegate::ChromeNetworkDelegate() {}
+ChromeNetworkDelegate::ChromeNetworkDelegate(
+ ExtensionIOEventRouter* extension_io_event_router)
+ : extension_io_event_router_(extension_io_event_router) {
+ DCHECK(extension_io_event_router);
+}
+
ChromeNetworkDelegate::~ChromeNetworkDelegate() {}
void ChromeNetworkDelegate::OnBeforeURLRequest(net::URLRequest* request) {
ExtensionWebRequestEventRouter::GetInstance()->OnBeforeRequest(
- GetIOEventRouter(request->context()), request->url(), request->method());
+ extension_io_event_router_, request->url(), request->method());
}
void ChromeNetworkDelegate::OnSendHttpRequest(
net::HttpRequestHeaders* headers) {
DCHECK(headers);
-
- // TODO(willchan): Add Chrome-side hooks to listen / mutate requests here.
}
void ChromeNetworkDelegate::OnResponseStarted(net::URLRequest* request) {
- ForwardProxyErrors(request);
+ ForwardProxyErrors(request, extension_io_event_router_);
}
void ChromeNetworkDelegate::OnReadCompleted(net::URLRequest* request,
int bytes_read) {
- ForwardProxyErrors(request);
+ ForwardProxyErrors(request, extension_io_event_router_);
}
diff --git a/chrome/browser/net/chrome_network_delegate.h b/chrome/browser/net/chrome_network_delegate.h
index 06c7c93..fbac036 100644
--- a/chrome/browser/net/chrome_network_delegate.h
+++ b/chrome/browser/net/chrome_network_delegate.h
@@ -7,25 +7,26 @@
#pragma once
#include "base/basictypes.h"
-#include "net/http/http_network_delegate.h"
+#include "net/base/network_delegate.h"
+
+class ExtensionIOEventRouter;
// ChromeNetworkDelegate is the central point from within the chrome code to
// add hooks into the network stack.
-class ChromeNetworkDelegate : public net::HttpNetworkDelegate {
+class ChromeNetworkDelegate : public net::NetworkDelegate {
public:
- ChromeNetworkDelegate();
+ explicit ChromeNetworkDelegate(
+ ExtensionIOEventRouter* extension_io_event_router);
~ChromeNetworkDelegate();
- // net::HttpNetworkDelegate methods:
+ private:
+ // NetworkDelegate methods:
virtual void OnBeforeURLRequest(net::URLRequest* request);
virtual void OnSendHttpRequest(net::HttpRequestHeaders* headers);
virtual void OnResponseStarted(net::URLRequest* request);
virtual void OnReadCompleted(net::URLRequest* request, int bytes_read);
- // TODO(willchan): Add functions for consumers to register ways to
- // access/modify the request.
-
- private:
+ ExtensionIOEventRouter* const extension_io_event_router_;
DISALLOW_COPY_AND_ASSIGN(ChromeNetworkDelegate);
};
diff --git a/chrome/browser/net/chrome_url_request_context.h b/chrome/browser/net/chrome_url_request_context.h
index 8dbf13d..081b5e5 100644
--- a/chrome/browser/net/chrome_url_request_context.h
+++ b/chrome/browser/net/chrome_url_request_context.h
@@ -15,7 +15,6 @@
#include "chrome/browser/content_settings/host_content_settings_map.h"
#include "chrome/browser/custom_handlers/protocol_handler_registry.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/prefs/pref_change_registrar.h"
@@ -91,10 +90,6 @@ class ChromeURLRequestContext : public net::URLRequestContext {
return extension_info_map_;
}
- const ExtensionIOEventRouter* extension_io_event_router() const {
- return extension_io_event_router_;
- }
-
prerender::PrerenderManager* prerender_manager() {
return prerender_manager_.get();
}
@@ -136,9 +131,6 @@ class ChromeURLRequestContext : public net::URLRequestContext {
void set_extension_info_map(ExtensionInfoMap* map) {
extension_info_map_ = map;
}
- void set_extension_io_event_router(ExtensionIOEventRouter* router) {
- extension_io_event_router_ = router;
- }
void set_prerender_manager(prerender::PrerenderManager* prerender_manager) {
prerender_manager_ = prerender_manager;
}
@@ -169,7 +161,6 @@ class ChromeURLRequestContext : public net::URLRequestContext {
scoped_refptr<fileapi::FileSystemContext> 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<prerender::PrerenderManager> prerender_manager_;
scoped_ptr<ChromeURLDataManagerBackend> chrome_url_data_manager_backend_;
scoped_refptr<ProtocolHandlerRegistry> protocol_handler_registry_;
diff --git a/chrome/browser/profiles/off_the_record_profile_io_data.cc b/chrome/browser/profiles/off_the_record_profile_io_data.cc
index ac8cf03..72cce73 100644
--- a/chrome/browser/profiles/off_the_record_profile_io_data.cc
+++ b/chrome/browser/profiles/off_the_record_profile_io_data.cc
@@ -9,10 +9,12 @@
#include "build/build_config.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/browser_thread.h"
+#include "chrome/browser/extensions/extension_io_event_router.h"
#include "chrome/browser/io_thread.h"
#include "chrome/browser/net/chrome_cookie_policy.h"
#include "chrome/browser/net/chrome_dns_cert_provenance_checker_factory.h"
#include "chrome/browser/net/chrome_net_log.h"
+#include "chrome/browser/net/chrome_network_delegate.h"
#include "chrome/browser/net/chrome_url_request_context.h"
#include "chrome/common/url_constants.h"
#include "net/ftp/ftp_network_layer.h"
@@ -101,18 +103,17 @@ void OffTheRecordProfileIOData::LazyInitializeInternal() const {
main_request_context_->set_net_log(lazy_params_->io_thread->net_log());
extensions_request_context_->set_net_log(lazy_params_->io_thread->net_log());
+ extension_io_event_router_ = profile_params.extension_io_event_router;
+ network_delegate_.reset(
+ new ChromeNetworkDelegate(extension_io_event_router_));
+ main_request_context_->set_network_delegate(network_delegate_.get());
+
main_request_context_->set_host_resolver(
io_thread_globals->host_resolver.get());
main_request_context_->set_cert_verifier(
io_thread_globals->cert_verifier.get());
main_request_context_->set_dnsrr_resolver(
io_thread_globals->dnsrr_resolver.get());
- // TODO(willchan): Enable this when we can support ExtensionIOEventRouter for
- // OTR profiles.
-#if 0
- main_request_context_->set_network_delegate(
- &io_thread_globals->network_delegate);
-#endif
main_request_context_->set_http_auth_handler_factory(
io_thread_globals->http_auth_handler_factory.get());
diff --git a/chrome/browser/profiles/off_the_record_profile_io_data.h b/chrome/browser/profiles/off_the_record_profile_io_data.h
index 6ce50f3..98d73f7 100644
--- a/chrome/browser/profiles/off_the_record_profile_io_data.h
+++ b/chrome/browser/profiles/off_the_record_profile_io_data.h
@@ -101,6 +101,8 @@ class OffTheRecordProfileIOData : public ProfileIOData {
mutable scoped_refptr<RequestContext> media_request_context_;
mutable scoped_refptr<RequestContext> extensions_request_context_;
+ mutable scoped_refptr<ExtensionIOEventRouter> extension_io_event_router_;
+ mutable scoped_ptr<net::NetworkDelegate> network_delegate_;
mutable scoped_ptr<net::DnsCertProvenanceChecker> dns_cert_checker_;
mutable scoped_ptr<net::HttpTransactionFactory> main_http_factory_;
diff --git a/chrome/browser/profiles/profile_impl_io_data.cc b/chrome/browser/profiles/profile_impl_io_data.cc
index c746a63..3fe1945 100644
--- a/chrome/browser/profiles/profile_impl_io_data.cc
+++ b/chrome/browser/profiles/profile_impl_io_data.cc
@@ -8,10 +8,12 @@
#include "base/logging.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/browser_thread.h"
+#include "chrome/browser/extensions/extension_io_event_router.h"
#include "chrome/browser/io_thread.h"
#include "chrome/browser/net/chrome_cookie_policy.h"
#include "chrome/browser/net/chrome_dns_cert_provenance_checker_factory.h"
#include "chrome/browser/net/chrome_net_log.h"
+#include "chrome/browser/net/chrome_network_delegate.h"
#include "chrome/browser/net/sqlite_persistent_cookie_store.h"
#include "chrome/common/chrome_constants.h"
#include "chrome/common/chrome_switches.h"
@@ -141,6 +143,12 @@ void ProfileImplIOData::LazyInitializeInternal() const {
media_request_context_->set_net_log(lazy_params_->io_thread->net_log());
extensions_request_context_->set_net_log(lazy_params_->io_thread->net_log());
+ extension_io_event_router_ = profile_params.extension_io_event_router;
+ network_delegate_.reset(
+ new ChromeNetworkDelegate(extension_io_event_router_));
+ main_request_context_->set_network_delegate(network_delegate_.get());
+ media_request_context_->set_network_delegate(network_delegate_.get());
+
main_request_context_->set_host_resolver(
io_thread_globals->host_resolver.get());
media_request_context_->set_host_resolver(
@@ -153,13 +161,6 @@ void ProfileImplIOData::LazyInitializeInternal() const {
io_thread_globals->dnsrr_resolver.get());
media_request_context_->set_dnsrr_resolver(
io_thread_globals->dnsrr_resolver.get());
- main_request_context_->set_network_delegate(
- &io_thread_globals->network_delegate);
- // TODO(willchan): Enable for media request context.
-#if 0
- media_request_context_->set_network_delegate(
- &io_thread_globals->network_delegate);
-#endif
main_request_context_->set_http_auth_handler_factory(
io_thread_globals->http_auth_handler_factory.get());
media_request_context_->set_http_auth_handler_factory(
diff --git a/chrome/browser/profiles/profile_impl_io_data.h b/chrome/browser/profiles/profile_impl_io_data.h
index ffc5e82..d4fcfc0 100644
--- a/chrome/browser/profiles/profile_impl_io_data.h
+++ b/chrome/browser/profiles/profile_impl_io_data.h
@@ -10,6 +10,13 @@
#include "base/ref_counted.h"
#include "chrome/browser/profiles/profile_io_data.h"
+class ExtensionIOEventRouter;
+namespace net {
+class NetworkDelegate;
+class DnsCertProvenanceChecker;
+class HttpTransactionFactory;
+} // namespace net
+
class ProfileImplIOData : public ProfileIOData {
public:
class Handle {
@@ -104,6 +111,8 @@ class ProfileImplIOData : public ProfileIOData {
mutable scoped_refptr<RequestContext> media_request_context_;
mutable scoped_refptr<RequestContext> extensions_request_context_;
+ mutable scoped_refptr<ExtensionIOEventRouter> extension_io_event_router_;
+ mutable scoped_ptr<net::NetworkDelegate> network_delegate_;
mutable scoped_ptr<net::DnsCertProvenanceChecker> dns_cert_checker_;
mutable scoped_ptr<net::HttpTransactionFactory> main_http_factory_;
mutable scoped_ptr<net::HttpTransactionFactory> media_http_factory_;
diff --git a/chrome/browser/profiles/profile_io_data.cc b/chrome/browser/profiles/profile_io_data.cc
index 57313e5..9553c85 100644
--- a/chrome/browser/profiles/profile_io_data.cc
+++ b/chrome/browser/profiles/profile_io_data.cc
@@ -10,6 +10,7 @@
#include "base/string_number_conversions.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/browser_thread.h"
+#include "chrome/browser/extensions/extension_io_event_router.h"
#include "chrome/browser/io_thread.h"
#include "chrome/browser/net/chrome_cookie_notification_details.h"
#include "chrome/browser/net/pref_proxy_config_service.h"
@@ -253,8 +254,6 @@ void ProfileIOData::ApplyProfileParamsToContext(
context->set_blob_storage_context(profile_params.blob_storage_context);
context->set_file_system_context(profile_params.file_system_context);
context->set_extension_info_map(profile_params.extension_info_map);
- context->set_extension_io_event_router(
- profile_params.extension_io_event_router);
context->set_prerender_manager(profile_params.prerender_manager);
context->set_protocol_handler_registry(
profile_params.protocol_handler_registry);