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

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

Issue 1603503002: Use scoped_ptr for loaders map in ResourceDispatcherHostImpl (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: remove linked_ptr.h Created 4 years, 11 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/loader/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/loader/resource_dispatcher_host_impl.cc
diff --git a/content/browser/loader/resource_dispatcher_host_impl.cc b/content/browser/loader/resource_dispatcher_host_impl.cc
index 022f410c82590f05aa1ddc8bf3f01a1c6a174bfc..d4a6661ddbfc185be7a106c7e9293bfab3c1e2bc 100644
--- a/content/browser/loader/resource_dispatcher_host_impl.cc
+++ b/content/browser/loader/resource_dispatcher_host_impl.cc
@@ -563,14 +563,15 @@ void ResourceDispatcherHostImpl::CancelRequestsForContext(
// the requests to cancel first, and then we start cancelling. We assert at
// the end that there are no more to cancel since the context is about to go
// away.
- typedef std::vector<linked_ptr<ResourceLoader>> LoaderList;
+ typedef std::vector<scoped_ptr<ResourceLoader>> LoaderList;
LoaderList loaders_to_cancel;
for (LoaderMap::iterator i = pending_loaders_.begin();
i != pending_loaders_.end();) {
- if (i->second->GetRequestInfo()->GetContext() == context) {
- loaders_to_cancel.push_back(i->second);
- IncrementOutstandingRequestsMemory(-1, *i->second->GetRequestInfo());
+ ResourceLoader* loader = i->second.get();
+ if (loader->GetRequestInfo()->GetContext() == context) {
+ loaders_to_cancel.push_back(std::move(i->second));
+ IncrementOutstandingRequestsMemory(-1, *loader->GetRequestInfo());
pending_loaders_.erase(i++);
} else {
++i;
@@ -579,7 +580,7 @@ void ResourceDispatcherHostImpl::CancelRequestsForContext(
for (BlockedLoadersMap::iterator i = blocked_loaders_map_.begin();
i != blocked_loaders_map_.end();) {
- BlockedLoadersList* loaders = i->second;
+ BlockedLoadersList* loaders = i->second.get();
if (loaders->empty()) {
// This can happen if BlockRequestsForRoute() has been called for a route,
// but we haven't blocked any matching requests yet.
@@ -588,38 +589,35 @@ void ResourceDispatcherHostImpl::CancelRequestsForContext(
}
ResourceRequestInfoImpl* info = loaders->front()->GetRequestInfo();
if (info->GetContext() == context) {
+ scoped_ptr<BlockedLoadersList> deleter(std::move(i->second));
blocked_loaders_map_.erase(i++);
- for (BlockedLoadersList::const_iterator it = loaders->begin();
- it != loaders->end(); ++it) {
- linked_ptr<ResourceLoader> loader = *it;
+ for (auto& loader : *loaders) {
info = loader->GetRequestInfo();
// We make the assumption that all requests on the list have the same
// ResourceContext.
DCHECK_EQ(context, info->GetContext());
IncrementOutstandingRequestsMemory(-1, *info);
- loaders_to_cancel.push_back(loader);
+ loaders_to_cancel.push_back(std::move(loader));
}
- delete loaders;
} else {
++i;
}
}
#ifndef NDEBUG
- for (LoaderList::iterator i = loaders_to_cancel.begin();
- i != loaders_to_cancel.end(); ++i) {
+ for (const auto& loader : loaders_to_cancel) {
// There is no strict requirement that this be the case, but currently
// downloads, streams, detachable requests, transferred requests, and
// browser-owned requests are the only requests that aren't cancelled when
// the associated processes go away. It may be OK for this invariant to
// change in the future, but if this assertion fires without the invariant
// changing, then it's indicative of a leak.
- DCHECK((*i)->GetRequestInfo()->IsDownload() ||
- (*i)->GetRequestInfo()->is_stream() ||
- ((*i)->GetRequestInfo()->detachable_handler() &&
- (*i)->GetRequestInfo()->detachable_handler()->is_detached()) ||
- (*i)->GetRequestInfo()->GetProcessType() == PROCESS_TYPE_BROWSER ||
- (*i)->is_transferring());
+ DCHECK(loader->GetRequestInfo()->IsDownload() ||
+ loader->GetRequestInfo()->is_stream() ||
+ (loader->GetRequestInfo()->detachable_handler() &&
+ loader->GetRequestInfo()->detachable_handler()->is_detached()) ||
+ loader->GetRequestInfo()->GetProcessType() == PROCESS_TYPE_BROWSER ||
+ loader->is_transferring());
}
#endif
@@ -633,15 +631,13 @@ void ResourceDispatcherHostImpl::CancelRequestsForContext(
}
// Validate that no more requests for this context were added.
- for (LoaderMap::const_iterator i = pending_loaders_.begin();
- i != pending_loaders_.end(); ++i) {
+ for (const auto& loader : pending_loaders_) {
// http://crbug.com/90971
- CHECK_NE(i->second->GetRequestInfo()->GetContext(), context);
+ CHECK_NE(loader.second->GetRequestInfo()->GetContext(), context);
}
- for (BlockedLoadersMap::const_iterator i = blocked_loaders_map_.begin();
- i != blocked_loaders_map_.end(); ++i) {
- BlockedLoadersList* loaders = i->second;
+ for (const auto& blocked_loaders : blocked_loaders_map_) {
+ BlockedLoadersList* loaders = blocked_loaders.second.get();
if (!loaders->empty()) {
ResourceRequestInfoImpl* info = loaders->front()->GetRequestInfo();
// http://crbug.com/90971
@@ -1072,16 +1068,14 @@ void ResourceDispatcherHostImpl::OnShutdown() {
// CancelBlockedRequestsForRoute while iterating over
// blocked_loaders_map_, as it modifies it.
std::set<GlobalRoutingID> ids;
- for (BlockedLoadersMap::const_iterator iter = blocked_loaders_map_.begin();
- iter != blocked_loaders_map_.end(); ++iter) {
+ for (const auto& blocked_loaders : blocked_loaders_map_) {
std::pair<std::set<GlobalRoutingID>::iterator, bool> result =
- ids.insert(iter->first);
+ ids.insert(blocked_loaders.first);
// We should not have duplicates.
DCHECK(result.second);
}
- for (std::set<GlobalRoutingID>::const_iterator iter = ids.begin();
- iter != ids.end(); ++iter) {
- CancelBlockedRequestsForRoute(iter->child_id, iter->route_id);
+ for (const auto& routing_id : ids) {
+ CancelBlockedRequestsForRoute(routing_id.child_id, routing_id.route_id);
}
scheduler_.reset();
@@ -1175,8 +1169,8 @@ void ResourceDispatcherHostImpl::UpdateRequestForTransfer(
int route_id,
int request_id,
const ResourceHostMsg_Request& request_data,
- const linked_ptr<ResourceLoader>& loader) {
- ResourceRequestInfoImpl* info = loader->GetRequestInfo();
+ LoaderMap::iterator iter) {
+ ResourceRequestInfoImpl* info = iter->second->GetRequestInfo();
GlobalRoutingID old_routing_id(
request_data.transferred_request_child_id, info->GetRouteID());
GlobalRequestID old_request_id(request_data.transferred_request_child_id,
@@ -1192,7 +1186,11 @@ void ResourceDispatcherHostImpl::UpdateRequestForTransfer(
bool should_update_count = info->counted_as_in_flight_request();
if (should_update_count)
IncrementOutstandingRequestsCount(-1, info);
- pending_loaders_.erase(old_request_id);
+
+ DCHECK(pending_loaders_.find(old_request_id) == iter);
+ scoped_ptr<ResourceLoader> loader = std::move(iter->second);
+ ResourceLoader* loader_ptr = loader.get();
+ pending_loaders_.erase(iter);
// ResourceHandlers should always get state related to the request from the
// ResourceRequestInfo rather than caching it locally. This lets us update
@@ -1203,7 +1201,7 @@ void ResourceDispatcherHostImpl::UpdateRequestForTransfer(
// Update maps that used the old IDs, if necessary. Some transfers in tests
// do not actually use a different ID, so not all maps need to be updated.
- pending_loaders_[new_request_id] = loader;
+ pending_loaders_[new_request_id] = std::move(loader);
IncrementOutstandingRequestsMemory(1, *info);
if (should_update_count)
IncrementOutstandingRequestsCount(1, info);
@@ -1211,7 +1209,7 @@ void ResourceDispatcherHostImpl::UpdateRequestForTransfer(
if (blocked_loaders_map_.find(old_routing_id) !=
blocked_loaders_map_.end()) {
blocked_loaders_map_[new_routing_id] =
- blocked_loaders_map_[old_routing_id];
+ std::move(blocked_loaders_map_[old_routing_id]);
blocked_loaders_map_.erase(old_routing_id);
}
}
@@ -1231,13 +1229,13 @@ void ResourceDispatcherHostImpl::UpdateRequestForTransfer(
}
AppCacheInterceptor::CompleteCrossSiteTransfer(
- loader->request(),
+ loader_ptr->request(),
child_id,
request_data.appcache_host_id,
filter_);
ServiceWorkerRequestHandler* handler =
- ServiceWorkerRequestHandler::GetHandler(loader->request());
+ ServiceWorkerRequestHandler::GetHandler(loader_ptr->request());
if (handler) {
handler->CompleteCrossSiteTransfer(
child_id, request_data.service_worker_provider_id);
@@ -1285,10 +1283,9 @@ void ResourceDispatcherHostImpl::BeginRequest(
// If the request is transferring to a new process, we can update our
// state and let it resume with its existing ResourceHandlers.
if (it->second->is_transferring()) {
- linked_ptr<ResourceLoader> deferred_loader = it->second;
+ ResourceLoader* deferred_loader = it->second.get();
UpdateRequestForTransfer(child_id, route_id, request_id,
- request_data, deferred_loader);
-
+ request_data, it);
deferred_loader->CompleteTransfer();
} else {
bad_message::ReceivedBadMessage(
@@ -1883,15 +1880,14 @@ void ResourceDispatcherHostImpl::CancelRequestsForRoute(int child_id,
// Find the global ID of all matching elements.
bool any_requests_transferring = false;
std::vector<GlobalRequestID> matching_requests;
- for (LoaderMap::const_iterator i = pending_loaders_.begin();
- i != pending_loaders_.end(); ++i) {
- if (i->first.child_id != child_id)
+ for (const auto& loader : pending_loaders_) {
+ if (loader.first.child_id != child_id)
continue;
- ResourceRequestInfoImpl* info = i->second->GetRequestInfo();
+ ResourceRequestInfoImpl* info = loader.second->GetRequestInfo();
- GlobalRequestID id(child_id, i->first.request_id);
- DCHECK(id == i->first);
+ GlobalRequestID id(child_id, loader.first.request_id);
+ DCHECK(id == loader.first);
// Don't cancel navigations that are expected to live beyond this process.
if (IsTransferredNavigation(id))
any_requests_transferring = true;
@@ -1940,14 +1936,12 @@ void ResourceDispatcherHostImpl::CancelRequestsForRoute(int child_id,
// CancelBlockedRequestsForRoute while iterating over
// blocked_loaders_map_, as it modifies it.
std::set<int> route_ids;
- for (BlockedLoadersMap::const_iterator iter = blocked_loaders_map_.begin();
- iter != blocked_loaders_map_.end(); ++iter) {
- if (iter->first.child_id == child_id)
- route_ids.insert(iter->first.route_id);
+ for (const auto& blocked_loaders : blocked_loaders_map_) {
+ if (blocked_loaders.first.child_id == child_id)
+ route_ids.insert(blocked_loaders.first.route_id);
}
- for (std::set<int>::const_iterator iter = route_ids.begin();
- iter != route_ids.end(); ++iter) {
- CancelBlockedRequestsForRoute(child_id, *iter);
+ for (int route_id : route_ids) {
+ CancelBlockedRequestsForRoute(child_id, route_id);
}
}
}
@@ -2291,30 +2285,32 @@ void ResourceDispatcherHostImpl::BeginRequestInternal(
return;
}
- linked_ptr<ResourceLoader> loader(
+ scoped_ptr<ResourceLoader> loader(
new ResourceLoader(std::move(request), std::move(handler), this));
GlobalRoutingID id(info->GetGlobalRoutingID());
BlockedLoadersMap::const_iterator iter = blocked_loaders_map_.find(id);
if (iter != blocked_loaders_map_.end()) {
// The request should be blocked.
- iter->second->push_back(loader);
+ iter->second->push_back(std::move(loader));
return;
}
- StartLoading(info, loader);
+ StartLoading(info, std::move(loader));
}
void ResourceDispatcherHostImpl::StartLoading(
ResourceRequestInfoImpl* info,
- const linked_ptr<ResourceLoader>& loader) {
+ scoped_ptr<ResourceLoader> loader) {
// TODO(pkasting): Remove ScopedTracker below once crbug.com/456331 is fixed.
tracked_objects::ScopedTracker tracking_profile(
FROM_HERE_WITH_EXPLICIT_FUNCTION(
"456331 ResourceDispatcherHostImpl::StartLoading"));
- pending_loaders_[info->GetGlobalRequestID()] = loader;
- loader->StartRequest();
+ ResourceLoader* loader_ptr = loader.get();
+ pending_loaders_[info->GetGlobalRequestID()] = std::move(loader);
+
+ loader_ptr->StartRequest();
}
void ResourceDispatcherHostImpl::OnUserGesture(WebContentsImpl* contents) {
@@ -2422,7 +2418,7 @@ void ResourceDispatcherHostImpl::BlockRequestsForRoute(int child_id,
GlobalRoutingID key(child_id, route_id);
DCHECK(blocked_loaders_map_.find(key) == blocked_loaders_map_.end()) <<
"BlockRequestsForRoute called multiple time for the same RVH";
- blocked_loaders_map_[key] = new BlockedLoadersList();
+ blocked_loaders_map_[key] = make_scoped_ptr(new BlockedLoadersList());
}
void ResourceDispatcherHostImpl::ResumeBlockedRequestsForRoute(int child_id,
@@ -2447,23 +2443,20 @@ void ResourceDispatcherHostImpl::ProcessBlockedRequestsForRoute(
return;
}
- BlockedLoadersList* loaders = iter->second;
+ BlockedLoadersList* loaders = iter->second.get();
+ scoped_ptr<BlockedLoadersList> deleter(std::move(iter->second));
// Removing the vector from the map unblocks any subsequent requests.
blocked_loaders_map_.erase(iter);
- for (BlockedLoadersList::iterator loaders_iter = loaders->begin();
- loaders_iter != loaders->end(); ++loaders_iter) {
- linked_ptr<ResourceLoader> loader = *loaders_iter;
+ for (scoped_ptr<ResourceLoader>& loader : *loaders) {
ResourceRequestInfoImpl* info = loader->GetRequestInfo();
if (cancel_requests) {
IncrementOutstandingRequestsMemory(-1, *info);
} else {
- StartLoading(info, loader);
+ StartLoading(info, std::move(loader));
}
}
-
- delete loaders;
}
ResourceDispatcherHostImpl::HttpAuthRelationType
« no previous file with comments | « content/browser/loader/resource_dispatcher_host_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698