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 Profile* profile = reinterpret_cast<Profile*>(profile_id); | |
Yoyo Zhou
2012/03/02 03:10:46
Might be a good idea to DCHECK we're on the UI thr
Matt Perry
2012/03/02 20:25:21
Done.
| |
62 if (!g_browser_process->profile_manager()->IsValidProfile(profile)) | |
63 return; | |
64 | |
65 RenderViewHost* render_view_host = | |
66 RenderViewHost::FromID(process_id, render_view_id); | |
67 if (render_view_host) { | |
68 if (status == REQUEST_STARTED) { | |
69 profile->GetExtensionProcessManager()->OnNetworkRequestStarted( | |
70 render_view_host); | |
71 } else if (status == REQUEST_DONE) { | |
72 profile->GetExtensionProcessManager()->OnNetworkRequestDone( | |
73 render_view_host); | |
74 } else { | |
75 NOTREACHED(); | |
76 } | |
77 } | |
78 } | |
79 | |
80 void ForwardRequestStatus( | |
81 RequestStatus status, net::URLRequest* request, void* profile_id) { | |
82 int process_id, render_view_id; | |
83 if (ResourceDispatcherHost::RenderViewForRequest( | |
84 request, &process_id, &render_view_id)) { | |
85 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, | |
86 base::Bind(&NotifyEPMRequestStatus, | |
87 status, profile_id, process_id, render_view_id)); | |
88 } | |
89 } | |
90 | |
48 } // namespace | 91 } // namespace |
49 | 92 |
50 ChromeNetworkDelegate::ChromeNetworkDelegate( | 93 ChromeNetworkDelegate::ChromeNetworkDelegate( |
51 ExtensionEventRouterForwarder* event_router, | 94 ExtensionEventRouterForwarder* event_router, |
52 ExtensionInfoMap* extension_info_map, | 95 ExtensionInfoMap* extension_info_map, |
53 const policy::URLBlacklistManager* url_blacklist_manager, | 96 const policy::URLBlacklistManager* url_blacklist_manager, |
54 void* profile, | 97 void* profile, |
55 BooleanPrefMember* enable_referrers) | 98 BooleanPrefMember* enable_referrers) |
56 : event_router_(event_router), | 99 : event_router_(event_router), |
57 profile_(profile), | 100 profile_(profile), |
(...skipping 27 matching lines...) Expand all Loading... | |
85 url_blacklist_manager_->IsURLBlocked(request->url())) { | 128 url_blacklist_manager_->IsURLBlocked(request->url())) { |
86 // URL access blocked by policy. | 129 // URL access blocked by policy. |
87 scoped_refptr<net::NetLog::EventParameters> params; | 130 scoped_refptr<net::NetLog::EventParameters> params; |
88 params = new net::NetLogStringParameter("url", request->url().spec()); | 131 params = new net::NetLogStringParameter("url", request->url().spec()); |
89 request->net_log().AddEvent( | 132 request->net_log().AddEvent( |
90 net::NetLog::TYPE_CHROME_POLICY_ABORTED_REQUEST, params); | 133 net::NetLog::TYPE_CHROME_POLICY_ABORTED_REQUEST, params); |
91 return net::ERR_NETWORK_ACCESS_DENIED; | 134 return net::ERR_NETWORK_ACCESS_DENIED; |
92 } | 135 } |
93 #endif | 136 #endif |
94 | 137 |
138 ForwardRequestStatus(REQUEST_STARTED, request, profile_); | |
139 | |
95 if (!enable_referrers_->GetValue()) | 140 if (!enable_referrers_->GetValue()) |
96 request->set_referrer(std::string()); | 141 request->set_referrer(std::string()); |
97 return ExtensionWebRequestEventRouter::GetInstance()->OnBeforeRequest( | 142 return ExtensionWebRequestEventRouter::GetInstance()->OnBeforeRequest( |
98 profile_, extension_info_map_.get(), request, callback, new_url); | 143 profile_, extension_info_map_.get(), request, callback, new_url); |
99 } | 144 } |
100 | 145 |
101 int ChromeNetworkDelegate::OnBeforeSendHeaders( | 146 int ChromeNetworkDelegate::OnBeforeSendHeaders( |
102 net::URLRequest* request, | 147 net::URLRequest* request, |
103 const net::CompletionCallback& callback, | 148 const net::CompletionCallback& callback, |
104 net::HttpRequestHeaders* headers) { | 149 net::HttpRequestHeaders* headers) { |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
153 profile_, extension_info_map_.get(), request); | 198 profile_, extension_info_map_.get(), request); |
154 } | 199 } |
155 } else if (request->status().status() == net::URLRequestStatus::FAILED || | 200 } else if (request->status().status() == net::URLRequestStatus::FAILED || |
156 request->status().status() == net::URLRequestStatus::CANCELED) { | 201 request->status().status() == net::URLRequestStatus::CANCELED) { |
157 ExtensionWebRequestEventRouter::GetInstance()->OnErrorOccurred( | 202 ExtensionWebRequestEventRouter::GetInstance()->OnErrorOccurred( |
158 profile_, extension_info_map_.get(), request, started); | 203 profile_, extension_info_map_.get(), request, started); |
159 } else { | 204 } else { |
160 NOTREACHED(); | 205 NOTREACHED(); |
161 } | 206 } |
162 ForwardProxyErrors(request, event_router_.get(), profile_); | 207 ForwardProxyErrors(request, event_router_.get(), profile_); |
208 | |
209 ForwardRequestStatus(REQUEST_DONE, request, profile_); | |
163 } | 210 } |
164 | 211 |
165 void ChromeNetworkDelegate::OnURLRequestDestroyed(net::URLRequest* request) { | 212 void ChromeNetworkDelegate::OnURLRequestDestroyed(net::URLRequest* request) { |
166 ExtensionWebRequestEventRouter::GetInstance()->OnURLRequestDestroyed( | 213 ExtensionWebRequestEventRouter::GetInstance()->OnURLRequestDestroyed( |
167 profile_, request); | 214 profile_, request); |
168 } | 215 } |
169 | 216 |
170 void ChromeNetworkDelegate::OnPACScriptError(int line_number, | 217 void ChromeNetworkDelegate::OnPACScriptError(int line_number, |
171 const string16& error) { | 218 const string16& error) { |
172 ExtensionProxyEventRouter::GetInstance()->OnPACScriptError( | 219 ExtensionProxyEventRouter::GetInstance()->OnPACScriptError( |
173 event_router_.get(), profile_, line_number, error); | 220 event_router_.get(), profile_, line_number, error); |
174 } | 221 } |
175 | 222 |
176 net::NetworkDelegate::AuthRequiredResponse | 223 net::NetworkDelegate::AuthRequiredResponse |
177 ChromeNetworkDelegate::OnAuthRequired( | 224 ChromeNetworkDelegate::OnAuthRequired( |
178 net::URLRequest* request, | 225 net::URLRequest* request, |
179 const net::AuthChallengeInfo& auth_info, | 226 const net::AuthChallengeInfo& auth_info, |
180 const AuthCallback& callback, | 227 const AuthCallback& callback, |
181 net::AuthCredentials* credentials) { | 228 net::AuthCredentials* credentials) { |
182 return ExtensionWebRequestEventRouter::GetInstance()->OnAuthRequired( | 229 return ExtensionWebRequestEventRouter::GetInstance()->OnAuthRequired( |
183 profile_, extension_info_map_.get(), request, auth_info, | 230 profile_, extension_info_map_.get(), request, auth_info, |
184 callback, credentials); | 231 callback, credentials); |
185 } | 232 } |
OLD | NEW |