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

Unified Diff: content/browser/renderer_host/resource_dispatcher_host_impl.cc

Issue 10825073: Stop using ScopedAllowIO in content::ResourceDispatcherHostImpl (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Move abort check back to BeginRequest() Created 8 years, 5 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/browser/renderer_host/resource_dispatcher_host_impl.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/renderer_host/resource_dispatcher_host_impl.cc
diff --git a/content/browser/renderer_host/resource_dispatcher_host_impl.cc b/content/browser/renderer_host/resource_dispatcher_host_impl.cc
index a8973534cab184a71ead2c220edcece6ce0dd050..35e154a622e59d2dcf708e8819d94156461f3665 100644
--- a/content/browser/renderer_host/resource_dispatcher_host_impl.cc
+++ b/content/browser/renderer_host/resource_dispatcher_host_impl.cc
@@ -21,7 +21,6 @@
#include "base/shared_memory.h"
#include "base/stl_util.h"
#include "base/third_party/dynamic_annotations/dynamic_annotations.h"
-#include "base/threading/thread_restrictions.h"
#include "content/browser/appcache/chrome_appcache_service.h"
#include "content/browser/cert_store_impl.h"
#include "content/browser/child_process_security_policy_impl.h"
@@ -357,7 +356,8 @@ ResourceDispatcherHostImpl::ResourceDispatcherHostImpl()
kMaxOutstandingRequestsCostPerProcess),
filter_(NULL),
delegate_(NULL),
- allow_cross_origin_auth_prompt_(false) {
+ allow_cross_origin_auth_prompt_(false),
+ weak_ptr_factory_(this) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
DCHECK(!g_resource_dispatcher_host);
g_resource_dispatcher_host = this;
@@ -803,6 +803,8 @@ void ResourceDispatcherHostImpl::OnShutdown() {
iter != ids.end(); ++iter) {
CancelBlockedRequestsForRoute(iter->first, iter->second);
}
+
+ weak_ptr_factory_.InvalidateWeakPtrs();
}
bool ResourceDispatcherHostImpl::OnMessageReceived(
@@ -841,7 +843,7 @@ void ResourceDispatcherHostImpl::OnRequestResource(
const IPC::Message& message,
int request_id,
const ResourceHostMsg_Request& request_data) {
- BeginRequest(request_id, request_data, NULL, message.routing_id());
+ PrepareToBeginRequest(request_id, request_data, NULL, message.routing_id());
}
// Begins a resource request with the given params on behalf of the specified
@@ -856,17 +858,49 @@ void ResourceDispatcherHostImpl::OnSyncLoad(
int request_id,
const ResourceHostMsg_Request& request_data,
IPC::Message* sync_result) {
- BeginRequest(request_id, request_data, sync_result,
- sync_result->routing_id());
+ PrepareToBeginRequest(request_id, request_data, sync_result,
+ sync_result->routing_id());
+}
+
+void ResourceDispatcherHostImpl::PrepareToBeginRequest(
+ int request_id,
+ const ResourceHostMsg_Request& request_data,
+ IPC::Message* sync_result,
+ int route_id) {
+ if (!is_shutdown_ && request_data.upload_data) {
+ ResourceContext* resource_context = filter_->resource_context();
+ // http://crbug.com/90971
+ CHECK(ContainsKey(active_resource_contexts_, resource_context));
+
+ // Might need to resolve the blob references in the upload data.
+ GetBlobStorageControllerForResourceContext(resource_context)->
+ ResolveBlobReferencesInUploadData(request_data.upload_data.get());
+
+ // BeginRequest() will be called later with upload_size.
+ request_data.upload_data->GetContentLength(
+ base::Bind(&ResourceDispatcherHostImpl::BeginRequest,
darin (slow to review) 2012/07/31 19:29:46 note: The ResourceDispatcherHostImpl out-lives the
+ weak_ptr_factory_.GetWeakPtr(),
+ scoped_refptr<ResourceMessageFilter>(filter_),
+ request_id,
+ request_data,
+ sync_result,
+ route_id));
+ } else { // There is no upload data.
+ const uint64 upload_size = 0;
+ BeginRequest(
+ filter_, request_id, request_data, sync_result, route_id, upload_size);
+ }
}
void ResourceDispatcherHostImpl::BeginRequest(
+ scoped_refptr<ResourceMessageFilter> filter,
int request_id,
const ResourceHostMsg_Request& request_data,
IPC::Message* sync_result, // only valid for sync
- int route_id) {
- ProcessType process_type = filter_->process_type();
- int child_id = filter_->child_id();
+ int route_id,
+ uint64 upload_size) {
+ ProcessType process_type = filter->process_type();
+ int child_id = filter->child_id();
// If we crash here, figure out what URL the renderer was requesting.
// http://crbug.com/91398
@@ -887,25 +921,19 @@ void ResourceDispatcherHostImpl::BeginRequest(
pending_loaders_.erase(it);
} else {
RecordAction(UserMetricsAction("BadMessageTerminate_RDH"));
- filter_->BadMessageReceived();
+ filter->BadMessageReceived();
return;
}
}
}
- ResourceContext* resource_context = filter_->resource_context();
+ ResourceContext* resource_context = filter->resource_context();
// http://crbug.com/90971
CHECK(ContainsKey(active_resource_contexts_, resource_context));
- // Might need to resolve the blob references in the upload data.
- if (request_data.upload_data) {
- GetBlobStorageControllerForResourceContext(resource_context)->
- ResolveBlobReferencesInUploadData(request_data.upload_data.get());
- }
-
if (is_shutdown_ ||
!ShouldServiceRequest(process_type, child_id, request_data)) {
- AbortRequestBeforeItStarts(filter_, sync_result, route_id, request_id);
+ AbortRequestBeforeItStarts(filter, sync_result, route_id, request_id);
return;
}
@@ -920,7 +948,7 @@ void ResourceDispatcherHostImpl::BeginRequest(
request_data.resource_type,
resource_context,
referrer)) {
- AbortRequestBeforeItStarts(filter_, sync_result, route_id, request_id);
+ AbortRequestBeforeItStarts(filter, sync_result, route_id, request_id);
return;
}
@@ -940,7 +968,7 @@ void ResourceDispatcherHostImpl::BeginRequest(
new_request.reset(new net::URLRequest(
request_data.url,
NULL,
- filter_->GetURLRequestContext(request_data.resource_type)));
+ filter->GetURLRequestContext(request_data.resource_type)));
request = new_request.get();
request->set_method(request_data.method);
@@ -961,13 +989,8 @@ void ResourceDispatcherHostImpl::BeginRequest(
request->set_priority(DetermineRequestPriority(request_data.resource_type));
// Set upload data.
- uint64 upload_size = 0;
- if (request_data.upload_data) {
+ if (request_data.upload_data)
request->set_upload(request_data.upload_data);
- // This results in performing file IO. crbug.com/112607.
- base::ThreadRestrictions::ScopedAllowIO allow_io;
- upload_size = request_data.upload_data->GetContentLengthSync();
- }
bool allow_download = request_data.allow_download &&
ResourceType::IsFrame(request_data.resource_type);
@@ -1012,10 +1035,10 @@ void ResourceDispatcherHostImpl::BeginRequest(
scoped_ptr<ResourceHandler> handler;
if (sync_result) {
handler.reset(new SyncResourceHandler(
- filter_, request, sync_result, this));
+ filter, request, sync_result, this));
} else {
handler.reset(new AsyncResourceHandler(
- filter_, route_id, request, this));
+ filter, route_id, request, this));
}
// The RedirectToFileResourceHandler depends on being next in the chain.
« no previous file with comments | « content/browser/renderer_host/resource_dispatcher_host_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698