Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(116)

Side by Side Diff: chrome/browser/net/chrome_network_delegate.cc

Issue 9562017: Keep lazy background page alive while there are pending network requests or (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: review fixins Created 8 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698