| 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 d671e2b715abefdc166efd1417e480ffc84f137b..12a7f29ee7552568681b1cee694e371e25b2db80 100644
|
| --- a/content/browser/loader/resource_dispatcher_host_impl.cc
|
| +++ b/content/browser/loader/resource_dispatcher_host_impl.cc
|
| @@ -1170,6 +1170,23 @@ void ResourceDispatcherHostImpl::OnSyncLoad(
|
| sync_result->routing_id());
|
| }
|
|
|
| +bool ResourceDispatcherHostImpl::IsRequestIDInUse(
|
| + const GlobalRequestID& id) const {
|
| + if (pending_loaders_.find(id) != pending_loaders_.end())
|
| + return true;
|
| + for (BlockedLoadersMap::const_iterator iter = blocked_loaders_map_.begin();
|
| + iter != blocked_loaders_map_.end(); ++iter) {
|
| + BlockedLoadersList* loaders = iter->second;
|
| + for (BlockedLoadersList::const_iterator loaders_iter = loaders->begin();
|
| + loaders_iter != loaders->end(); ++loaders_iter) {
|
| + ResourceRequestInfoImpl* info = (*loaders_iter)->GetRequestInfo();
|
| + if (info->GetGlobalRequestID() == id)
|
| + return true;
|
| + }
|
| + }
|
| + return false;
|
| +}
|
| +
|
| void ResourceDispatcherHostImpl::UpdateRequestForTransfer(
|
| int child_id,
|
| int route_id,
|
| @@ -1254,6 +1271,14 @@ void ResourceDispatcherHostImpl::BeginRequest(
|
| int process_type = filter_->process_type();
|
| int child_id = filter_->child_id();
|
|
|
| + // Reject request id that's currently in use.
|
| + if (IsRequestIDInUse(GlobalRequestID(child_id, request_id))) {
|
| + bad_message::ReceivedBadMessage(
|
| + filter_,
|
| + bad_message::RDH_INVALID_REQUEST_ID);
|
| + return;
|
| + }
|
| +
|
| // PlzNavigate: reject invalid renderer main resource request.
|
| if (IsBrowserSideNavigationEnabled() &&
|
| IsResourceTypeFrame(request_data.resource_type) &&
|
|
|