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

Side by Side Diff: content/browser/renderer_host/resource_dispatcher_host.cc

Issue 6713008: Don't destroy a request while it is being processed (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: . Created 9 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 // See http://dev.chromium.org/developers/design-documents/multi-process-resourc e-loading 5 // See http://dev.chromium.org/developers/design-documents/multi-process-resourc e-loading
6 6
7 #include "content/browser/renderer_host/resource_dispatcher_host.h" 7 #include "content/browser/renderer_host/resource_dispatcher_host.h"
8 8
9 #include <set> 9 #include <set>
10 #include <vector> 10 #include <vector>
(...skipping 1152 matching lines...) Expand 10 before | Expand all | Expand 10 after
1163 GlobalRequestID(child_id, request_id)); 1163 GlobalRequestID(child_id, request_id));
1164 if (i == pending_requests_.end()) { 1164 if (i == pending_requests_.end()) {
1165 // We probably want to remove this warning eventually, but I wanted to be 1165 // We probably want to remove this warning eventually, but I wanted to be
1166 // able to notice when this happens during initial development since it 1166 // able to notice when this happens during initial development since it
1167 // should be rare and may indicate a bug. 1167 // should be rare and may indicate a bug.
1168 DLOG(WARNING) << "Canceling a request that wasn't found"; 1168 DLOG(WARNING) << "Canceling a request that wasn't found";
1169 return; 1169 return;
1170 } 1170 }
1171 net::URLRequest* request = i->second; 1171 net::URLRequest* request = i->second;
1172 const bool started_before_cancel = request->is_pending(); 1172 const bool started_before_cancel = request->is_pending();
1173 CancelRequestInternal(request, from_renderer); 1173
1174 // If the request isn't in flight, then we won't get asyncronous notification, 1174 if (CancelRequestInternal(request, from_renderer) &&
1175 // so we have to signal ourselves to finish this request. 1175 !started_before_cancel) {
1176 if (!started_before_cancel) 1176 // If the request isn't in flight, then we won't get asyncronous
1177 // notification, so we have to signal ourselves to finish this
1178 // request.
1177 OnResponseCompleted(request); 1179 OnResponseCompleted(request);
1180 }
1178 } 1181 }
1179 1182
1180 void ResourceDispatcherHost::CancelRequestInternal(net::URLRequest* request, 1183 bool ResourceDispatcherHost::CancelRequestInternal(net::URLRequest* request,
1181 bool from_renderer) { 1184 bool from_renderer) {
1182 VLOG(1) << "CancelRequest: " << request->url().spec(); 1185 VLOG(1) << "CancelRequest: " << request->url().spec();
1183 1186
1184 // WebKit will send us a cancel for downloads since it no longer handles them. 1187 // WebKit will send us a cancel for downloads since it no longer handles them.
1185 // In this case, ignore the cancel since we handle downloads in the browser. 1188 // In this case, ignore the cancel since we handle downloads in the browser.
1186 ResourceDispatcherHostRequestInfo* info = InfoForRequest(request); 1189 ResourceDispatcherHostRequestInfo* info = InfoForRequest(request);
1187 if (!from_renderer || !info->is_download()) { 1190 if (!from_renderer || !info->is_download()) {
1188 if (info->login_handler()) { 1191 if (info->login_handler()) {
1189 info->login_handler()->OnRequestCancelled(); 1192 info->login_handler()->OnRequestCancelled();
1190 info->set_login_handler(NULL); 1193 info->set_login_handler(NULL);
1191 } 1194 }
1192 if (info->ssl_client_auth_handler()) { 1195 if (info->ssl_client_auth_handler()) {
1193 info->ssl_client_auth_handler()->OnRequestCancelled(); 1196 info->ssl_client_auth_handler()->OnRequestCancelled();
1194 info->set_ssl_client_auth_handler(NULL); 1197 info->set_ssl_client_auth_handler(NULL);
1195 } 1198 }
1196 request->Cancel(); 1199 request->Cancel();
rvargas (doing something else) 2011/03/21 22:38:10 Did you considered moving the pending check to thi
asanka 2011/03/22 14:52:42 My concern was that request->is_pending() being fa
1197 // Our callers assume |request| is valid after we return. 1200 // Our callers assume |request| is valid after we return.
1198 DCHECK(IsValidRequest(request)); 1201 DCHECK(IsValidRequest(request));
1202 return true;
1199 } 1203 }
1200 1204
1201 // Do not remove from the pending requests, as the request will still 1205 // Do not remove from the pending requests, as the request will still
1202 // call AllDataReceived, and may even have more data before it does 1206 // call AllDataReceived, and may even have more data before it does
1203 // that. 1207 // that.
1208 return false;
1204 } 1209 }
1205 1210
1206 int ResourceDispatcherHost::IncrementOutstandingRequestsMemoryCost( 1211 int ResourceDispatcherHost::IncrementOutstandingRequestsMemoryCost(
1207 int cost, 1212 int cost,
1208 int child_id) { 1213 int child_id) {
1209 // Retrieve the previous value (defaulting to 0 if not found). 1214 // Retrieve the previous value (defaulting to 0 if not found).
1210 OutstandingRequestsMemoryCostMap::iterator prev_entry = 1215 OutstandingRequestsMemoryCostMap::iterator prev_entry =
1211 outstanding_requests_memory_cost_map_.find(child_id); 1216 outstanding_requests_memory_cost_map_.find(child_id);
1212 int new_cost = 0; 1217 int new_cost = 0;
1213 if (prev_entry != outstanding_requests_memory_cost_map_.end()) 1218 if (prev_entry != outstanding_requests_memory_cost_map_.end())
(...skipping 727 matching lines...) Expand 10 before | Expand all | Expand 10 after
1941 return is_prefetch_enabled_; 1946 return is_prefetch_enabled_;
1942 } 1947 }
1943 1948
1944 // static 1949 // static
1945 void ResourceDispatcherHost::set_is_prefetch_enabled(bool value) { 1950 void ResourceDispatcherHost::set_is_prefetch_enabled(bool value) {
1946 is_prefetch_enabled_ = value; 1951 is_prefetch_enabled_ = value;
1947 } 1952 }
1948 1953
1949 // static 1954 // static
1950 bool ResourceDispatcherHost::is_prefetch_enabled_ = false; 1955 bool ResourceDispatcherHost::is_prefetch_enabled_ = false;
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698