Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/net/chrome_network_delegate.h" | 5 #include "chrome/browser/net/chrome_network_delegate.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "chrome/browser/browser_process.h" | |
| 8 #include "chrome/browser/custom_handlers/protocol_handler_registry.h" | 9 #include "chrome/browser/custom_handlers/protocol_handler_registry.h" |
| 9 #include "chrome/browser/extensions/api/webrequest/webrequest_api.h" | 10 #include "chrome/browser/extensions/api/webrequest/webrequest_api.h" |
| 10 #include "chrome/browser/extensions/extension_event_router_forwarder.h" | 11 #include "chrome/browser/extensions/extension_event_router_forwarder.h" |
| 11 #include "chrome/browser/extensions/extension_info_map.h" | 12 #include "chrome/browser/extensions/extension_info_map.h" |
| 13 #include "chrome/browser/extensions/extension_process_manager.h" | |
| 12 #include "chrome/browser/extensions/extension_proxy_api.h" | 14 #include "chrome/browser/extensions/extension_proxy_api.h" |
| 13 #include "chrome/browser/prefs/pref_member.h" | 15 #include "chrome/browser/prefs/pref_member.h" |
| 16 #include "chrome/browser/profiles/profile_manager.h" | |
| 14 #include "chrome/browser/task_manager/task_manager.h" | 17 #include "chrome/browser/task_manager/task_manager.h" |
| 15 #include "chrome/common/pref_names.h" | 18 #include "chrome/common/pref_names.h" |
| 19 #include "content/browser/renderer_host/render_view_host.h" | |
| 20 #include "content/browser/renderer_host/resource_dispatcher_host.h" | |
| 16 #include "content/public/browser/browser_thread.h" | 21 #include "content/public/browser/browser_thread.h" |
| 17 #include "net/base/host_port_pair.h" | 22 #include "net/base/host_port_pair.h" |
| 18 #include "net/base/net_errors.h" | 23 #include "net/base/net_errors.h" |
| 19 #include "net/base/net_log.h" | 24 #include "net/base/net_log.h" |
| 20 #include "net/http/http_request_headers.h" | 25 #include "net/http/http_request_headers.h" |
| 21 #include "net/http/http_response_headers.h" | 26 #include "net/http/http_response_headers.h" |
| 22 #include "net/url_request/url_request.h" | 27 #include "net/url_request/url_request.h" |
| 23 | 28 |
| 24 #if defined(ENABLE_CONFIGURATION_POLICY) | 29 #if defined(ENABLE_CONFIGURATION_POLICY) |
| 25 #include "chrome/browser/policy/url_blacklist_manager.h" | 30 #include "chrome/browser/policy/url_blacklist_manager.h" |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 38 switch (request->status().error()) { | 43 switch (request->status().error()) { |
| 39 case net::ERR_PROXY_AUTH_UNSUPPORTED: | 44 case net::ERR_PROXY_AUTH_UNSUPPORTED: |
| 40 case net::ERR_PROXY_CONNECTION_FAILED: | 45 case net::ERR_PROXY_CONNECTION_FAILED: |
| 41 case net::ERR_TUNNEL_CONNECTION_FAILED: | 46 case net::ERR_TUNNEL_CONNECTION_FAILED: |
| 42 ExtensionProxyEventRouter::GetInstance()->OnProxyError( | 47 ExtensionProxyEventRouter::GetInstance()->OnProxyError( |
| 43 event_router, profile, request->status().error()); | 48 event_router, profile, request->status().error()); |
| 44 } | 49 } |
| 45 } | 50 } |
| 46 } | 51 } |
| 47 | 52 |
| 53 enum RequestStatus { REQUEST_STARTED, REQUEST_DONE }; | |
| 54 | |
| 55 // Notifies the ExtensionProcessManager that a request has started or stopped | |
| 56 // for a particular RenderView. | |
| 57 void NotifyEPMRequestStatus(RequestStatus status, | |
| 58 void* profile_id, | |
| 59 int process_id, | |
| 60 int render_view_id) { | |
| 61 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | |
| 62 Profile* profile = reinterpret_cast<Profile*>(profile_id); | |
| 63 if (!g_browser_process->profile_manager()->IsValidProfile(profile)) | |
| 64 return; | |
| 65 | |
| 66 RenderViewHost* render_view_host = | |
| 67 RenderViewHost::FromID(process_id, render_view_id); | |
| 68 if (render_view_host) { | |
|
willchan no longer on Chromium
2012/03/06 00:54:34
Took me a second to realize that not all URLReques
Matt Perry
2012/03/06 01:12:02
Done.
| |
| 69 if (status == REQUEST_STARTED) { | |
| 70 profile->GetExtensionProcessManager()->OnNetworkRequestStarted( | |
| 71 render_view_host); | |
| 72 } else if (status == REQUEST_DONE) { | |
| 73 profile->GetExtensionProcessManager()->OnNetworkRequestDone( | |
| 74 render_view_host); | |
| 75 } else { | |
| 76 NOTREACHED(); | |
| 77 } | |
| 78 } | |
| 79 } | |
| 80 | |
| 81 void ForwardRequestStatus( | |
| 82 RequestStatus status, net::URLRequest* request, void* profile_id) { | |
| 83 int process_id, render_view_id; | |
| 84 if (ResourceDispatcherHost::RenderViewForRequest( | |
| 85 request, &process_id, &render_view_id)) { | |
| 86 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, | |
| 87 base::Bind(&NotifyEPMRequestStatus, | |
| 88 status, profile_id, process_id, render_view_id)); | |
| 89 } | |
| 90 } | |
| 91 | |
| 48 } // namespace | 92 } // namespace |
| 49 | 93 |
| 50 ChromeNetworkDelegate::ChromeNetworkDelegate( | 94 ChromeNetworkDelegate::ChromeNetworkDelegate( |
| 51 ExtensionEventRouterForwarder* event_router, | 95 ExtensionEventRouterForwarder* event_router, |
| 52 ExtensionInfoMap* extension_info_map, | 96 ExtensionInfoMap* extension_info_map, |
| 53 const policy::URLBlacklistManager* url_blacklist_manager, | 97 const policy::URLBlacklistManager* url_blacklist_manager, |
| 54 void* profile, | 98 void* profile, |
| 55 BooleanPrefMember* enable_referrers) | 99 BooleanPrefMember* enable_referrers) |
| 56 : event_router_(event_router), | 100 : event_router_(event_router), |
| 57 profile_(profile), | 101 profile_(profile), |
| (...skipping 27 matching lines...) Expand all Loading... | |
| 85 url_blacklist_manager_->IsURLBlocked(request->url())) { | 129 url_blacklist_manager_->IsURLBlocked(request->url())) { |
| 86 // URL access blocked by policy. | 130 // URL access blocked by policy. |
| 87 scoped_refptr<net::NetLog::EventParameters> params; | 131 scoped_refptr<net::NetLog::EventParameters> params; |
| 88 params = new net::NetLogStringParameter("url", request->url().spec()); | 132 params = new net::NetLogStringParameter("url", request->url().spec()); |
| 89 request->net_log().AddEvent( | 133 request->net_log().AddEvent( |
| 90 net::NetLog::TYPE_CHROME_POLICY_ABORTED_REQUEST, params); | 134 net::NetLog::TYPE_CHROME_POLICY_ABORTED_REQUEST, params); |
| 91 return net::ERR_NETWORK_ACCESS_DENIED; | 135 return net::ERR_NETWORK_ACCESS_DENIED; |
| 92 } | 136 } |
| 93 #endif | 137 #endif |
| 94 | 138 |
| 139 ForwardRequestStatus(REQUEST_STARTED, request, profile_); | |
| 140 | |
| 95 if (!enable_referrers_->GetValue()) | 141 if (!enable_referrers_->GetValue()) |
| 96 request->set_referrer(std::string()); | 142 request->set_referrer(std::string()); |
| 97 return ExtensionWebRequestEventRouter::GetInstance()->OnBeforeRequest( | 143 return ExtensionWebRequestEventRouter::GetInstance()->OnBeforeRequest( |
| 98 profile_, extension_info_map_.get(), request, callback, new_url); | 144 profile_, extension_info_map_.get(), request, callback, new_url); |
| 99 } | 145 } |
| 100 | 146 |
| 101 int ChromeNetworkDelegate::OnBeforeSendHeaders( | 147 int ChromeNetworkDelegate::OnBeforeSendHeaders( |
| 102 net::URLRequest* request, | 148 net::URLRequest* request, |
| 103 const net::CompletionCallback& callback, | 149 const net::CompletionCallback& callback, |
| 104 net::HttpRequestHeaders* headers) { | 150 net::HttpRequestHeaders* headers) { |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 153 profile_, extension_info_map_.get(), request); | 199 profile_, extension_info_map_.get(), request); |
| 154 } | 200 } |
| 155 } else if (request->status().status() == net::URLRequestStatus::FAILED || | 201 } else if (request->status().status() == net::URLRequestStatus::FAILED || |
| 156 request->status().status() == net::URLRequestStatus::CANCELED) { | 202 request->status().status() == net::URLRequestStatus::CANCELED) { |
| 157 ExtensionWebRequestEventRouter::GetInstance()->OnErrorOccurred( | 203 ExtensionWebRequestEventRouter::GetInstance()->OnErrorOccurred( |
| 158 profile_, extension_info_map_.get(), request, started); | 204 profile_, extension_info_map_.get(), request, started); |
| 159 } else { | 205 } else { |
| 160 NOTREACHED(); | 206 NOTREACHED(); |
| 161 } | 207 } |
| 162 ForwardProxyErrors(request, event_router_.get(), profile_); | 208 ForwardProxyErrors(request, event_router_.get(), profile_); |
| 209 | |
| 210 ForwardRequestStatus(REQUEST_DONE, request, profile_); | |
| 163 } | 211 } |
| 164 | 212 |
| 165 void ChromeNetworkDelegate::OnURLRequestDestroyed(net::URLRequest* request) { | 213 void ChromeNetworkDelegate::OnURLRequestDestroyed(net::URLRequest* request) { |
| 166 ExtensionWebRequestEventRouter::GetInstance()->OnURLRequestDestroyed( | 214 ExtensionWebRequestEventRouter::GetInstance()->OnURLRequestDestroyed( |
| 167 profile_, request); | 215 profile_, request); |
| 168 } | 216 } |
| 169 | 217 |
| 170 void ChromeNetworkDelegate::OnPACScriptError(int line_number, | 218 void ChromeNetworkDelegate::OnPACScriptError(int line_number, |
| 171 const string16& error) { | 219 const string16& error) { |
| 172 ExtensionProxyEventRouter::GetInstance()->OnPACScriptError( | 220 ExtensionProxyEventRouter::GetInstance()->OnPACScriptError( |
| 173 event_router_.get(), profile_, line_number, error); | 221 event_router_.get(), profile_, line_number, error); |
| 174 } | 222 } |
| 175 | 223 |
| 176 net::NetworkDelegate::AuthRequiredResponse | 224 net::NetworkDelegate::AuthRequiredResponse |
| 177 ChromeNetworkDelegate::OnAuthRequired( | 225 ChromeNetworkDelegate::OnAuthRequired( |
| 178 net::URLRequest* request, | 226 net::URLRequest* request, |
| 179 const net::AuthChallengeInfo& auth_info, | 227 const net::AuthChallengeInfo& auth_info, |
| 180 const AuthCallback& callback, | 228 const AuthCallback& callback, |
| 181 net::AuthCredentials* credentials) { | 229 net::AuthCredentials* credentials) { |
| 182 return ExtensionWebRequestEventRouter::GetInstance()->OnAuthRequired( | 230 return ExtensionWebRequestEventRouter::GetInstance()->OnAuthRequired( |
| 183 profile_, extension_info_map_.get(), request, auth_info, | 231 profile_, extension_info_map_.get(), request, auth_info, |
| 184 callback, credentials); | 232 callback, credentials); |
| 185 } | 233 } |
| OLD | NEW |