Index: chrome/browser/net/chrome_network_delegate.cc |
diff --git a/chrome/browser/net/chrome_network_delegate.cc b/chrome/browser/net/chrome_network_delegate.cc |
index 8b46d9cd5982f30b7e300835067bd059c162b4d1..d9b59c516d5d4811d754c2fab1597b3cdf40865a 100644 |
--- a/chrome/browser/net/chrome_network_delegate.cc |
+++ b/chrome/browser/net/chrome_network_delegate.cc |
@@ -22,10 +22,8 @@ |
#include "chrome/browser/content_settings/cookie_settings.h" |
#include "chrome/browser/content_settings/tab_specific_content_settings.h" |
#include "chrome/browser/custom_handlers/protocol_handler_registry.h" |
-#include "chrome/browser/extensions/api/proxy/proxy_api.h" |
-#include "chrome/browser/extensions/api/web_request/web_request_api.h" |
-#include "chrome/browser/extensions/event_router_forwarder.h" |
#include "chrome/browser/google/google_util.h" |
+#include "chrome/browser/net/chrome_extensions_network_delegate.h" |
#include "chrome/browser/net/client_hints.h" |
#include "chrome/browser/net/connect_interceptor.h" |
#include "chrome/browser/performance_monitor/performance_monitor.h" |
@@ -42,9 +40,6 @@ |
#include "content/public/browser/render_frame_host.h" |
#include "content/public/browser/render_view_host.h" |
#include "content/public/browser/resource_request_info.h" |
-#include "extensions/browser/extension_system.h" |
-#include "extensions/browser/info_map.h" |
-#include "extensions/browser/process_manager.h" |
#include "extensions/common/constants.h" |
#include "net/base/host_port_pair.h" |
#include "net/base/net_errors.h" |
@@ -57,6 +52,12 @@ |
#include "net/url_request/url_request.h" |
#include "net/url_request/url_request_context.h" |
+#if defined(OS_ANDROID) |
+#include "chrome/browser/io_thread.h" |
+#include "components/precache/content/precache_manager.h" |
+#include "components/precache/content/precache_manager_factory.h" |
+#endif |
+ |
#if defined(OS_CHROMEOS) |
#include "base/command_line.h" |
#include "base/sys_info.h" |
@@ -67,12 +68,6 @@ |
#include "components/policy/core/browser/url_blacklist_manager.h" |
#endif |
-#if defined(OS_ANDROID) |
-#include "chrome/browser/io_thread.h" |
-#include "components/precache/content/precache_manager.h" |
-#include "components/precache/content/precache_manager_factory.h" |
-#endif |
- |
using content::BrowserThread; |
using content::RenderViewHost; |
using content::ResourceRequestInfo; |
@@ -93,22 +88,6 @@ namespace { |
const char kDNTHeader[] = "DNT"; |
-// If the |request| failed due to problems with a proxy, forward the error to |
-// the proxy extension API. |
-void ForwardProxyErrors(net::URLRequest* request, |
- extensions::EventRouterForwarder* event_router, |
- void* profile) { |
- if (request->status().status() == net::URLRequestStatus::FAILED) { |
- switch (request->status().error()) { |
- case net::ERR_PROXY_AUTH_UNSUPPORTED: |
- case net::ERR_PROXY_CONNECTION_FAILED: |
- case net::ERR_TUNNEL_CONNECTION_FAILED: |
- extensions::ProxyEventRouter::GetInstance()->OnProxyError( |
- event_router, profile, request->status().error()); |
- } |
- } |
-} |
- |
// Returns whether a URL parameter, |first_parameter| (e.g. foo=bar), has the |
// same key as the the |second_parameter| (e.g. foo=baz). Both parameters |
// must be in key=value form. |
@@ -178,54 +157,6 @@ void ForceGoogleSafeSearchCallbackWrapper( |
callback.Run(rv); |
} |
-enum RequestStatus { REQUEST_STARTED, REQUEST_DONE }; |
- |
-// Notifies the extensions::ProcessManager that a request has started or stopped |
-// for a particular RenderFrame. |
-void NotifyEPMRequestStatus(RequestStatus status, |
- void* profile_id, |
- int process_id, |
- int render_frame_id) { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- Profile* profile = reinterpret_cast<Profile*>(profile_id); |
- if (!g_browser_process->profile_manager()->IsValidProfile(profile)) |
- return; |
- |
- extensions::ProcessManager* process_manager = |
- extensions::ExtensionSystem::Get(profile)->process_manager(); |
- // This may be NULL in unit tests. |
- if (!process_manager) |
- return; |
- |
- // Will be NULL if the request was not issued on behalf of a renderer (e.g. a |
- // system-level request). |
- content::RenderFrameHost* render_frame_host = |
- content::RenderFrameHost::FromID(process_id, render_frame_id); |
- if (render_frame_host) { |
- if (status == REQUEST_STARTED) { |
- process_manager->OnNetworkRequestStarted(render_frame_host); |
- } else if (status == REQUEST_DONE) { |
- process_manager->OnNetworkRequestDone(render_frame_host); |
- } else { |
- NOTREACHED(); |
- } |
- } |
-} |
- |
-void ForwardRequestStatus( |
- RequestStatus status, net::URLRequest* request, void* profile_id) { |
- const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request); |
- if (!info) |
- return; |
- |
- int process_id, render_frame_id; |
- if (info->GetAssociatedRenderFrame(&process_id, &render_frame_id)) { |
- BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, |
- base::Bind(&NotifyEPMRequestStatus, |
- status, profile_id, process_id, render_frame_id)); |
- } |
-} |
- |
void UpdateContentLengthPrefs( |
int received_content_length, |
int original_content_length, |
@@ -353,27 +284,34 @@ void RecordIOThreadToRequestStartOnUIThread( |
ChromeNetworkDelegate::ChromeNetworkDelegate( |
extensions::EventRouterForwarder* event_router, |
BooleanPrefMember* enable_referrers) |
- : event_router_(event_router), |
- profile_(NULL), |
+ : profile_(NULL), |
enable_referrers_(enable_referrers), |
enable_do_not_track_(NULL), |
force_google_safe_search_(NULL), |
+#if defined(ENABLE_CONFIGURATION_POLICY) |
url_blacklist_manager_(NULL), |
+#endif |
domain_reliability_monitor_(NULL), |
received_content_length_(0), |
original_content_length_(0), |
first_request_(true), |
prerender_tracker_(NULL), |
data_reduction_proxy_params_(NULL) { |
- DCHECK(event_router); |
DCHECK(enable_referrers); |
+ extensions_delegate_.reset( |
+ ChromeExtensionsNetworkDelegate::Create(event_router)); |
} |
ChromeNetworkDelegate::~ChromeNetworkDelegate() {} |
void ChromeNetworkDelegate::set_extension_info_map( |
extensions::InfoMap* extension_info_map) { |
- extension_info_map_ = extension_info_map; |
+ extensions_delegate_->set_extension_info_map(extension_info_map); |
+} |
+ |
+void ChromeNetworkDelegate::set_profile(void* profile) { |
+ profile_ = profile; |
+ extensions_delegate_->set_profile(profile); |
} |
void ChromeNetworkDelegate::set_cookie_settings( |
@@ -492,7 +430,7 @@ int ChromeNetworkDelegate::OnBeforeURLRequest( |
} |
#endif |
- ForwardRequestStatus(REQUEST_STARTED, request, profile_); |
+ extensions_delegate_->ForwardStartRequestStatus(request); |
if (!enable_referrers_->GetValue()) |
request->SetReferrer(std::string()); |
@@ -516,9 +454,8 @@ int ChromeNetworkDelegate::OnBeforeURLRequest( |
base::Unretained(new_url)); |
} |
- int rv = ExtensionWebRequestEventRouter::GetInstance()->OnBeforeRequest( |
- profile_, extension_info_map_.get(), request, wrapped_callback, |
- new_url); |
+ int rv = extensions_delegate_->OnBeforeURLRequest( |
+ request, wrapped_callback, new_url); |
if (force_safe_search && rv == net::OK && new_url->is_empty()) |
ForceGoogleSafeSearch(request, new_url); |
@@ -534,15 +471,13 @@ int ChromeNetworkDelegate::OnBeforeSendHeaders( |
const net::CompletionCallback& callback, |
net::HttpRequestHeaders* headers) { |
TRACE_EVENT_ASYNC_STEP_PAST0("net", "URLRequest", request, "SendRequest"); |
- return ExtensionWebRequestEventRouter::GetInstance()->OnBeforeSendHeaders( |
- profile_, extension_info_map_.get(), request, callback, headers); |
+ return extensions_delegate_->OnBeforeSendHeaders(request, callback, headers); |
} |
void ChromeNetworkDelegate::OnSendHeaders( |
net::URLRequest* request, |
const net::HttpRequestHeaders& headers) { |
- ExtensionWebRequestEventRouter::GetInstance()->OnSendHeaders( |
- profile_, extension_info_map_.get(), request, headers); |
+ extensions_delegate_->OnSendHeaders(request, headers); |
} |
int ChromeNetworkDelegate::OnHeadersReceived( |
@@ -551,7 +486,6 @@ int ChromeNetworkDelegate::OnHeadersReceived( |
const net::HttpResponseHeaders* original_response_headers, |
scoped_refptr<net::HttpResponseHeaders>* override_response_headers, |
GURL* allowed_unsafe_redirect_url) { |
- |
if (data_reduction_proxy::MaybeBypassProxyAndPrepareToRetry( |
data_reduction_proxy_params_, |
request, |
@@ -560,9 +494,7 @@ int ChromeNetworkDelegate::OnHeadersReceived( |
return net::OK; |
} |
- return ExtensionWebRequestEventRouter::GetInstance()->OnHeadersReceived( |
- profile_, |
- extension_info_map_.get(), |
+ return extensions_delegate_->OnHeadersReceived( |
request, |
callback, |
original_response_headers, |
@@ -574,16 +506,13 @@ void ChromeNetworkDelegate::OnBeforeRedirect(net::URLRequest* request, |
const GURL& new_location) { |
if (domain_reliability_monitor_) |
domain_reliability_monitor_->OnBeforeRedirect(request); |
- ExtensionWebRequestEventRouter::GetInstance()->OnBeforeRedirect( |
- profile_, extension_info_map_.get(), request, new_location); |
+ extensions_delegate_->OnBeforeRedirect(request, new_location); |
} |
void ChromeNetworkDelegate::OnResponseStarted(net::URLRequest* request) { |
TRACE_EVENT_ASYNC_STEP_PAST0("net", "URLRequest", request, "ResponseStarted"); |
- ExtensionWebRequestEventRouter::GetInstance()->OnResponseStarted( |
- profile_, extension_info_map_.get(), request); |
- ForwardProxyErrors(request, event_router_.get(), profile_); |
+ extensions_delegate_->OnResponseStarted(request); |
} |
void ChromeNetworkDelegate::OnRawBytesRead(const net::URLRequest& request, |
@@ -654,36 +583,26 @@ void ChromeNetworkDelegate::OnCompleted(net::URLRequest* request, |
<< " url: " << request->url(); |
} |
- bool is_redirect = request->response_headers() && |
- net::HttpResponseHeaders::IsRedirectResponseCode( |
- request->response_headers()->response_code()); |
- if (!is_redirect) { |
- ExtensionWebRequestEventRouter::GetInstance()->OnCompleted( |
- profile_, extension_info_map_.get(), request); |
- } |
+ extensions_delegate_->OnCompleted(request, started); |
} else if (request->status().status() == net::URLRequestStatus::FAILED || |
request->status().status() == net::URLRequestStatus::CANCELED) { |
- ExtensionWebRequestEventRouter::GetInstance()->OnErrorOccurred( |
- profile_, extension_info_map_.get(), request, started); |
+ extensions_delegate_->OnCompleted(request, started); |
} else { |
NOTREACHED(); |
} |
if (domain_reliability_monitor_) |
domain_reliability_monitor_->OnCompleted(request, started); |
- ForwardProxyErrors(request, event_router_.get(), profile_); |
- |
- ForwardRequestStatus(REQUEST_DONE, request, profile_); |
+ extensions_delegate_->ForwardProxyErrors(request); |
+ extensions_delegate_->ForwardDoneRequestStatus(request); |
} |
void ChromeNetworkDelegate::OnURLRequestDestroyed(net::URLRequest* request) { |
- ExtensionWebRequestEventRouter::GetInstance()->OnURLRequestDestroyed( |
- profile_, request); |
+ extensions_delegate_->OnURLRequestDestroyed(request); |
} |
void ChromeNetworkDelegate::OnPACScriptError(int line_number, |
const base::string16& error) { |
- extensions::ProxyEventRouter::GetInstance()->OnPACScriptError( |
- event_router_.get(), profile_, line_number, error); |
+ extensions_delegate_->OnPACScriptError(line_number, error); |
} |
net::NetworkDelegate::AuthRequiredResponse |
@@ -692,9 +611,8 @@ ChromeNetworkDelegate::OnAuthRequired( |
const net::AuthChallengeInfo& auth_info, |
const AuthCallback& callback, |
net::AuthCredentials* credentials) { |
- return ExtensionWebRequestEventRouter::GetInstance()->OnAuthRequired( |
- profile_, extension_info_map_.get(), request, auth_info, |
- callback, credentials); |
+ return extensions_delegate_->OnAuthRequired( |
+ request, auth_info, callback, credentials); |
} |
bool ChromeNetworkDelegate::OnCanGetCookies( |
@@ -836,10 +754,8 @@ bool ChromeNetworkDelegate::OnCanAccessFile(const net::URLRequest& request, |
bool ChromeNetworkDelegate::OnCanThrottleRequest( |
const net::URLRequest& request) const { |
- if (g_never_throttle_requests_) { |
+ if (g_never_throttle_requests_) |
return false; |
- } |
- |
return request.first_party_for_cookies().scheme() == |
extensions::kExtensionScheme; |
} |