| 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) && | 
|  |