diff options
author | willchan@chromium.org <willchan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-02-24 00:22:50 +0000 |
---|---|---|
committer | willchan@chromium.org <willchan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-02-24 00:22:50 +0000 |
commit | 0651b818c7122d319954ff5bc30dff68ba8b9013 (patch) | |
tree | d18a681545594c17175a584b7d56a6ee9abd10b6 /chrome | |
parent | 26616172ccaeae9842d7e52b556bc49e16751455 (diff) | |
download | chromium_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.cc | 20 | ||||
-rw-r--r-- | chrome/browser/io_thread.h | 5 | ||||
-rw-r--r-- | chrome/browser/net/chrome_network_delegate.cc | 30 | ||||
-rw-r--r-- | chrome/browser/net/chrome_network_delegate.h | 17 | ||||
-rw-r--r-- | chrome/browser/net/chrome_url_request_context.h | 9 | ||||
-rw-r--r-- | chrome/browser/profiles/off_the_record_profile_io_data.cc | 13 | ||||
-rw-r--r-- | chrome/browser/profiles/off_the_record_profile_io_data.h | 2 | ||||
-rw-r--r-- | chrome/browser/profiles/profile_impl_io_data.cc | 15 | ||||
-rw-r--r-- | chrome/browser/profiles/profile_impl_io_data.h | 9 | ||||
-rw-r--r-- | chrome/browser/profiles/profile_io_data.cc | 3 |
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); |