Don't access gNeckoChild if not on main thread. (DiD)

This patch also makes UDPSocketChild::Bind return NS_ERROR_NOT_AVAILABLE
when mBackgroundManager is null.
This commit is contained in:
wolfbeast 2019-07-16 18:59:14 +02:00 committed by Roy Tam
commit 71a6b780d9

View file

@ -172,19 +172,28 @@ UDPSocketChild::Bind(nsIUDPSocketInternal* aSocket,
NS_ENSURE_ARG(aSocket);
mSocket = aSocket;
AddIPDLReference();
if (NS_IsMainThread()) {
if (!gNeckoChild->SendPUDPSocketConstructor(
this, IPC::Principal(aPrincipal), mFilterName)) {
return NS_ERROR_FAILURE;
}
} else {
if (!mBackgroundManager) {
return NS_ERROR_NOT_AVAILABLE;
}
if (mBackgroundManager) {
// If we want to support a passed-in principal here we'd need to
// convert it to a PrincipalInfo
MOZ_ASSERT(!aPrincipal);
mBackgroundManager->SendPUDPSocketConstructor(this, void_t(), mFilterName);
} else {
gNeckoChild->SendPUDPSocketConstructor(this, IPC::Principal(aPrincipal),
mFilterName);
if (!mBackgroundManager->SendPUDPSocketConstructor(
this, void_t(), mFilterName)) {
return NS_ERROR_FAILURE;
}
}
mSocket = aSocket;
AddIPDLReference();
SendBind(UDPAddressInfo(nsCString(aHost), aPort), aAddressReuse, aLoopback,
recvBufferSize, sendBufferSize);
return NS_OK;