Bug 1640160 - Serialize mRequestContextId with BrowsingContext's IPCInitializer to ensure that we don't try to create a request context with an id of 0. r=nika
This was a bit of pain to track down, because some code was allowing an ID of 0, and creating a request context to match, but other code was treating 0 as invalid. Differential Revision: https://phabricator.services.mozilla.com/D76652
This commit is contained in:
@@ -2383,6 +2383,7 @@ void IPDLParamTraits<dom::BrowsingContext::IPCInitializer>::Write(
|
|||||||
WriteIPDLParam(aMessage, aActor, aInit.mUseRemoteTabs);
|
WriteIPDLParam(aMessage, aActor, aInit.mUseRemoteTabs);
|
||||||
WriteIPDLParam(aMessage, aActor, aInit.mUseRemoteSubframes);
|
WriteIPDLParam(aMessage, aActor, aInit.mUseRemoteSubframes);
|
||||||
WriteIPDLParam(aMessage, aActor, aInit.mOriginAttributes);
|
WriteIPDLParam(aMessage, aActor, aInit.mOriginAttributes);
|
||||||
|
WriteIPDLParam(aMessage, aActor, aInit.mRequestContextId);
|
||||||
WriteIPDLParam(aMessage, aActor, aInit.mFields);
|
WriteIPDLParam(aMessage, aActor, aInit.mFields);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2397,6 +2398,7 @@ bool IPDLParamTraits<dom::BrowsingContext::IPCInitializer>::Read(
|
|||||||
!ReadIPDLParam(aMessage, aIterator, aActor,
|
!ReadIPDLParam(aMessage, aIterator, aActor,
|
||||||
&aInit->mUseRemoteSubframes) ||
|
&aInit->mUseRemoteSubframes) ||
|
||||||
!ReadIPDLParam(aMessage, aIterator, aActor, &aInit->mOriginAttributes) ||
|
!ReadIPDLParam(aMessage, aIterator, aActor, &aInit->mOriginAttributes) ||
|
||||||
|
!ReadIPDLParam(aMessage, aIterator, aActor, &aInit->mRequestContextId) ||
|
||||||
!ReadIPDLParam(aMessage, aIterator, aActor, &aInit->mFields)) {
|
!ReadIPDLParam(aMessage, aIterator, aActor, &aInit->mFields)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -505,6 +505,10 @@ RequestContextService::GetRequestContext(const uint64_t rcID,
|
|||||||
return NS_ERROR_ILLEGAL_DURING_SHUTDOWN;
|
return NS_ERROR_ILLEGAL_DURING_SHUTDOWN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!rcID) {
|
||||||
|
return NS_ERROR_INVALID_ARG;
|
||||||
|
}
|
||||||
|
|
||||||
if (!mTable.Get(rcID, rc)) {
|
if (!mTable.Get(rcID, rc)) {
|
||||||
nsCOMPtr<nsIRequestContext> newSC = new RequestContext(rcID);
|
nsCOMPtr<nsIRequestContext> newSC = new RequestContext(rcID);
|
||||||
mTable.Put(rcID, newSC);
|
mTable.Put(rcID, newSC);
|
||||||
|
|||||||
@@ -143,6 +143,9 @@ nsresult nsDocLoader::Init() {
|
|||||||
nsresult nsDocLoader::InitWithBrowsingContext(
|
nsresult nsDocLoader::InitWithBrowsingContext(
|
||||||
BrowsingContext* aBrowsingContext) {
|
BrowsingContext* aBrowsingContext) {
|
||||||
RefPtr<net::nsLoadGroup> loadGroup = new net::nsLoadGroup();
|
RefPtr<net::nsLoadGroup> loadGroup = new net::nsLoadGroup();
|
||||||
|
if (!aBrowsingContext->GetRequestContextId()) {
|
||||||
|
return NS_ERROR_NOT_AVAILABLE;
|
||||||
|
}
|
||||||
nsresult rv = loadGroup->InitWithRequestContextId(
|
nsresult rv = loadGroup->InitWithRequestContextId(
|
||||||
aBrowsingContext->GetRequestContextId());
|
aBrowsingContext->GetRequestContextId());
|
||||||
if (NS_FAILED(rv)) return rv;
|
if (NS_FAILED(rv)) return rv;
|
||||||
|
|||||||
Reference in New Issue
Block a user