Bug 1749059 - Remove Quantum DOM support from IPDL, r=ipc-reviewers,mccr8

This is no longer necessary as the Quantum DOM project is no longer
happening, and removing support simplifies various components inside of
IPDL.

As some code used the support to get a `nsISerialEventTarget` for an
actor's worker thread, that method was replaced with a method which
instead pulls the nsISerialEventTarget from the MessageChannel and
should work on all actors.

Differential Revision: https://phabricator.services.mozilla.com/D135411
This commit is contained in:
Nika Layzell 2022-01-25 20:29:46 +00:00
parent 677b775c8f
commit 09d88e5fd2
46 changed files with 45 additions and 325 deletions

View file

@ -291,9 +291,6 @@ nsresult nsContentPermissionUtils::AskPermission(
&isRequestDelegatedToUnsafeThirdParty);
NS_ENSURE_SUCCESS(rv, rv);
ContentChild::GetSingleton()->SetEventTargetForActor(
req, aWindow->EventTargetFor(TaskCategory::Other));
req->IPDLAddRef();
ContentChild::GetSingleton()->SendPContentPermissionRequestConstructor(
req, permArray, IPC::Principal(principal),

View file

@ -115,14 +115,6 @@ void FileSystemTaskChildBase::Start() {
return;
}
if (NS_IsMainThread()) {
nsISerialEventTarget* target =
mGlobalObject->EventTargetFor(TaskCategory::Other);
MOZ_ASSERT(target);
actor->SetEventTargetForActor(this, target);
}
actor->SendPFileSystemRequestConstructor(this, params);
}

View file

@ -1262,8 +1262,6 @@ BackgroundFactoryChild::RecvPBackgroundIDBDatabaseConstructor(
PBackgroundIDBFactoryRequestChild* aRequest) {
AssertIsOnOwningThread();
MOZ_ASSERT(aActor);
MOZ_ASSERT(aActor->GetActorEventTarget(),
"The event target shall be inherited from its manager actor.");
return IPC_OK();
}
@ -1709,8 +1707,6 @@ BackgroundDatabaseChild::RecvPBackgroundIDBVersionChangeTransactionConstructor(
const int64_t& aNextObjectStoreId, const int64_t& aNextIndexId) {
AssertIsOnOwningThread();
MOZ_ASSERT(aActor);
MOZ_ASSERT(aActor->GetActorEventTarget(),
"The event target shall be inherited from its manager actor.");
MOZ_ASSERT(mOpenRequestActor);
MaybeCollectGarbageOnIPCMessage();

View file

@ -623,8 +623,6 @@ RefPtr<IDBTransaction> IDBDatabase::Transaction(
MOZ_ALWAYS_TRUE(mBackgroundActor->SendPBackgroundIDBTransactionConstructor(
actor, sortedStoreNames, mode));
MOZ_ASSERT(actor->GetActorEventTarget(),
"The event target shall be inherited from it manager actor.");
transaction->SetBackgroundActor(actor);
@ -682,9 +680,6 @@ RefPtr<IDBRequest> IDBDatabase::CreateMutableFile(
mBackgroundActor->SendPBackgroundIDBDatabaseRequestConstructor(actor, params);
MOZ_ASSERT(actor->GetActorEventTarget(),
"The event target shall be inherited from its manager actor.");
return request;
}
@ -814,8 +809,6 @@ PBackgroundIDBDatabaseFileChild* IDBDatabase::GetOrCreateFileActorForBlob(
return nullptr;
}
MOZ_ASSERT(actor->GetActorEventTarget(),
"The event target shall be inherited from its manager actor.");
mFileActors.InsertOrUpdate(weakRef, actor);
}

View file

@ -659,10 +659,6 @@ RefPtr<IDBOpenDBRequest> IDBFactory::OpenInternal(
{
BackgroundFactoryChild* actor = new BackgroundFactoryChild(*this);
// Set EventTarget for the top-level actor.
// All child actors created later inherit the same event target.
backgroundActor->SetEventTargetForActor(actor, EventTarget());
MOZ_ASSERT(actor->GetActorEventTarget());
mBackgroundActor = static_cast<BackgroundFactoryChild*>(
backgroundActor->SendPBackgroundIDBFactoryConstructor(
actor, idbThreadLocal->GetLoggingInfo()));
@ -757,9 +753,6 @@ nsresult IDBFactory::InitiateRequest(
return NS_ERROR_DOM_INDEXEDDB_UNKNOWN_ERR;
}
MOZ_ASSERT(actor->GetActorEventTarget(),
"The event target shall be inherited from its manager actor.");
return NS_OK;
}

View file

@ -289,9 +289,6 @@ BackgroundRequestChild* IDBTransaction::StartRequest(
transactionChild.SendPBackgroundIDBRequestConstructor(actor, aParams);
});
MOZ_ASSERT(actor->GetActorEventTarget(),
"The event target shall be inherited from its manager actor.");
// Balanced in BackgroundRequestChild::Recv__delete__().
OnNewRequest();
@ -307,9 +304,6 @@ void IDBTransaction::OpenCursor(PBackgroundIDBCursorChild& aBackgroundActor,
actor.SendPBackgroundIDBCursorConstructor(&aBackgroundActor, aParams);
});
MOZ_ASSERT(aBackgroundActor.GetActorEventTarget(),
"The event target shall be inherited from its manager actor.");
// Balanced in BackgroundCursorChild::RecvResponse().
OnNewRequest();
}

View file

@ -2364,8 +2364,6 @@ mozilla::ipc::IPCResult ContentChild::RecvNotifyAlertsObserver(
return IPC_OK();
}
// NOTE: This method is being run in the SystemGroup, and thus cannot directly
// touch pages. See GetSpecificMessageEventTarget.
mozilla::ipc::IPCResult ContentChild::RecvNotifyVisited(
nsTArray<VisitedQueryResult>&& aURIs) {
nsCOMPtr<IHistory> history = components::History::Service();

View file

@ -28,7 +28,7 @@ mozilla::ipc::IPCResult URLClassifierParent::StartClassify(
nsCOMPtr<nsIURIClassifier> uriClassifier =
do_GetService(NS_URICLASSIFIERSERVICE_CONTRACTID, &rv);
if (NS_SUCCEEDED(rv)) {
rv = uriClassifier->Classify(aPrincipal, nullptr, this, aSuccess);
rv = uriClassifier->Classify(aPrincipal, this, aSuccess);
}
if (NS_FAILED(rv) || !*aSuccess) {
// We treat the case where we fail to classify and the case where the

View file

@ -40,7 +40,6 @@ MediaTransportHandlerIPC::MediaTransportHandlerIPC(
__func__);
}
MediaTransportChild* child = new MediaTransportChild(this);
actor->SetEventTargetForActor(child, mCallbackThread);
// PBackgroungChild owns mChild! When it is done with it,
// mChild will let us know it it going away.
mChild = actor->SendPMediaTransportConstructor(child);

View file

@ -100,13 +100,8 @@ PeerConnectionMedia::PeerConnectionMedia(PeerConnectionImpl* parent)
mTargetForDefaultLocalAddressLookupIsSet(false),
mDestroyed(false) {
if (XRE_IsContentProcess()) {
nsCOMPtr<nsISerialEventTarget> target =
mParent->GetWindow()
? mParent->GetWindow()->EventTargetFor(TaskCategory::Other)
: nullptr;
mStunAddrsRequest =
new net::StunAddrsRequestChild(new StunAddrsHandler(this), target);
new net::StunAddrsRequestChild(new StunAddrsHandler(this));
}
}

View file

@ -11,13 +11,8 @@ using namespace mozilla::ipc;
namespace mozilla::net {
StunAddrsRequestChild::StunAddrsRequestChild(
StunAddrsListener* listener, nsISerialEventTarget* mainThreadEventTarget)
StunAddrsRequestChild::StunAddrsRequestChild(StunAddrsListener* listener)
: mListener(listener) {
if (mainThreadEventTarget) {
gNeckoChild->SetEventTargetForActor(this, mainThreadEventTarget);
}
gNeckoChild->SendPStunAddrsRequestConstructor(this);
// IPDL holds a reference until IPDL channel gets destroyed
AddIPDLReference();

View file

@ -32,8 +32,7 @@ class StunAddrsRequestChild final : public PStunAddrsRequestChild {
friend class PStunAddrsRequestChild;
public:
explicit StunAddrsRequestChild(StunAddrsListener* listener,
nsISerialEventTarget* mainThreadEventTarget);
explicit StunAddrsRequestChild(StunAddrsListener* listener);
NS_IMETHOD_(MozExternalRefCountType) AddRef();
NS_IMETHOD_(MozExternalRefCountType) Release();

View file

@ -82,12 +82,9 @@ void WebrtcTCPSocketChild::AsyncOpen(
if (IsNeckoChild()) {
// We're on a content process
gNeckoChild->SetEventTargetForActor(this, GetMainThreadSerialEventTarget());
gNeckoChild->SendPWebrtcTCPSocketConstructor(this, tabId);
} else if (IsSocketProcessChild()) {
// We're on a socket process
SocketProcessChild::GetSingleton()->SetEventTargetForActor(
this, GetMainThreadSerialEventTarget());
SocketProcessChild::GetSingleton()->SendPWebrtcTCPSocketConstructor(this,
tabId);
}

View file

@ -1504,8 +1504,7 @@ void NrUdpSocketIpc::create_i(const nsACString& host, const uint16_t port) {
/* addressReuse = */ false,
/* loopback = */ false,
/* recv buffer size */ minBuffSize,
/* send buffer size */ minBuffSize,
/* mainThreadEventTarget */ nullptr))) {
/* send buffer size */ minBuffSize))) {
err_ = true;
MOZ_ASSERT(false, "Failed to create UDP socket");
mon.NotifyAll();

View file

@ -60,12 +60,8 @@ nsresult TCPServerSocket::Init() {
}
if (XRE_GetProcessType() == GeckoProcessType_Content) {
nsCOMPtr<nsISerialEventTarget> target;
if (nsCOMPtr<nsIGlobalObject> global = GetOwnerGlobal()) {
target = global->EventTargetFor(TaskCategory::Other);
}
mServerBridgeChild = new TCPServerSocketChild(this, mPort, mBacklog,
mUseArrayBuffers, target);
mServerBridgeChild =
new TCPServerSocketChild(this, mPort, mBacklog, mUseArrayBuffers);
return NS_OK;
}

View file

@ -38,13 +38,11 @@ NS_IMETHODIMP_(MozExternalRefCountType) TCPServerSocketChild::Release(void) {
return refcnt;
}
TCPServerSocketChild::TCPServerSocketChild(
TCPServerSocket* aServerSocket, uint16_t aLocalPort, uint16_t aBacklog,
bool aUseArrayBuffers, nsISerialEventTarget* aIPCEventTarget) {
TCPServerSocketChild::TCPServerSocketChild(TCPServerSocket* aServerSocket,
uint16_t aLocalPort,
uint16_t aBacklog,
bool aUseArrayBuffers) {
mServerSocket = aServerSocket;
if (aIPCEventTarget) {
gNeckoChild->SetEventTargetForActor(this, aIPCEventTarget);
}
AddIPDLReference();
gNeckoChild->SendPTCPServerSocketConstructor(this, aLocalPort, aBacklog,
aUseArrayBuffers);

View file

@ -47,8 +47,7 @@ class TCPServerSocketChild : public mozilla::net::PTCPServerSocketChild,
NS_IMETHOD_(MozExternalRefCountType) Release() override;
TCPServerSocketChild(TCPServerSocket* aServerSocket, uint16_t aLocalPort,
uint16_t aBacklog, bool aUseArrayBuffers,
nsISerialEventTarget* aIPCEventTarget);
uint16_t aBacklog, bool aUseArrayBuffers);
~TCPServerSocketChild();
void Close();

View file

@ -90,10 +90,6 @@ void TCPSocketChild::SendOpen(nsITCPSocketCallback* aSocket, bool aUseSSL,
bool aUseArrayBuffers) {
mSocket = aSocket;
if (mIPCEventTarget) {
gNeckoChild->SetEventTargetForActor(this, mIPCEventTarget);
}
AddIPDLReference();
gNeckoChild->SendPTCPSocketConstructor(this, mHost, mPort);
PTCPSocketChild::SendOpen(mHost, mPort, aUseSSL, aUseArrayBuffers);

View file

@ -476,14 +476,9 @@ nsresult UDPSocket::InitRemote(const nsAString& aLocalAddress,
return NS_ERROR_FAILURE;
}
nsCOMPtr<nsISerialEventTarget> target;
if (nsCOMPtr<nsIGlobalObject> global = GetOwnerGlobal()) {
target = global->EventTargetFor(TaskCategory::Other);
}
rv = sock->Bind(mListenerProxy, principal,
NS_ConvertUTF16toUTF8(aLocalAddress), aLocalPort,
mAddressReuse, mLoopback, 0, 0, target);
mAddressReuse, mLoopback, 0, 0);
if (NS_FAILED(rv)) {
return rv;

View file

@ -67,17 +67,13 @@ nsresult UDPSocketChild::Bind(nsIUDPSocketInternal* aSocket,
nsIPrincipal* aPrincipal, const nsACString& aHost,
uint16_t aPort, bool aAddressReuse,
bool aLoopback, uint32_t recvBufferSize,
uint32_t sendBufferSize,
nsISerialEventTarget* aMainThreadEventTarget) {
uint32_t sendBufferSize) {
UDPSOCKET_LOG(
("%s: %s:%u", __FUNCTION__, PromiseFlatCString(aHost).get(), aPort));
NS_ENSURE_ARG(aSocket);
if (NS_IsMainThread()) {
if (aMainThreadEventTarget) {
gNeckoChild->SetEventTargetForActor(this, aMainThreadEventTarget);
}
if (!gNeckoChild->SendPUDPSocketConstructor(this, aPrincipal,
mFilterName)) {
return NS_ERROR_FAILURE;

View file

@ -61,8 +61,7 @@ class UDPSocketChild : public mozilla::net::PUDPSocketChild,
nsresult Bind(nsIUDPSocketInternal* aSocket, nsIPrincipal* aPrincipal,
const nsACString& aHost, uint16_t aPort, bool aAddressReuse,
bool aLoopback, uint32_t recvBufferSize,
uint32_t sendBufferSize,
nsISerialEventTarget* aMainThreadEventTarget);
uint32_t sendBufferSize);
// Tell the chrome process to connect the UDP socket to a given remote host
// and port

View file

@ -1039,7 +1039,7 @@ bool TextureClient::InitIPDLActor(CompositableForwarder* aForwarder) {
PTextureChild* actor = aForwarder->GetTextureForwarder()->CreateTexture(
desc, std::move(readLockDescriptor),
aForwarder->GetCompositorBackendType(), GetFlags(), mSerial,
mExternalImageId, nullptr);
mExternalImageId);
if (!actor) {
gfxCriticalNote << static_cast<int32_t>(desc.type()) << ", "

View file

@ -555,16 +555,11 @@ CompositorBridgeChild::GetTileLockAllocator() {
PTextureChild* CompositorBridgeChild::CreateTexture(
const SurfaceDescriptor& aSharedData, ReadLockDescriptor&& aReadLock,
LayersBackend aLayersBackend, TextureFlags aFlags, uint64_t aSerial,
wr::MaybeExternalImageId& aExternalImageId, nsISerialEventTarget* aTarget) {
wr::MaybeExternalImageId& aExternalImageId) {
PTextureChild* textureChild =
AllocPTextureChild(aSharedData, aReadLock, aLayersBackend, aFlags,
LayersId{0} /* FIXME */, aSerial, aExternalImageId);
// Do the DOM labeling.
if (aTarget) {
SetEventTargetForActor(textureChild, aTarget);
}
return SendPTextureConstructor(
textureChild, aSharedData, std::move(aReadLock), aLayersBackend, aFlags,
LayersId{0} /* FIXME? */, aSerial, aExternalImageId);

View file

@ -102,12 +102,10 @@ class CompositorBridgeChild final : public PCompositorBridgeChild,
mozilla::ipc::IPCResult RecvParentAsyncMessages(
nsTArray<AsyncParentMessageData>&& aMessages);
PTextureChild* CreateTexture(const SurfaceDescriptor& aSharedData,
ReadLockDescriptor&& aReadLock,
LayersBackend aLayersBackend,
TextureFlags aFlags, uint64_t aSerial,
wr::MaybeExternalImageId& aExternalImageId,
nsISerialEventTarget* aTarget) override;
PTextureChild* CreateTexture(
const SurfaceDescriptor& aSharedData, ReadLockDescriptor&& aReadLock,
LayersBackend aLayersBackend, TextureFlags aFlags, uint64_t aSerial,
wr::MaybeExternalImageId& aExternalImageId) override;
already_AddRefed<CanvasChild> GetCanvasChild() final;

View file

@ -822,7 +822,7 @@ mozilla::ipc::IPCResult ImageBridgeChild::RecvReportFramesDropped(
PTextureChild* ImageBridgeChild::CreateTexture(
const SurfaceDescriptor& aSharedData, ReadLockDescriptor&& aReadLock,
LayersBackend aLayersBackend, TextureFlags aFlags, uint64_t aSerial,
wr::MaybeExternalImageId& aExternalImageId, nsISerialEventTarget* aTarget) {
wr::MaybeExternalImageId& aExternalImageId) {
MOZ_ASSERT(CanSend());
return SendPTextureConstructor(aSharedData, std::move(aReadLock),
aLayersBackend, aFlags, aSerial,

View file

@ -292,8 +292,7 @@ class ImageBridgeChild final : public PImageBridgeChild,
PTextureChild* CreateTexture(
const SurfaceDescriptor& aSharedData, ReadLockDescriptor&& aReadLock,
LayersBackend aLayersBackend, TextureFlags aFlags, uint64_t aSerial,
wr::MaybeExternalImageId& aExternalImageId,
nsISerialEventTarget* aTarget = nullptr) override;
wr::MaybeExternalImageId& aExternalImageId) override;
bool IsSameProcess() const override;

View file

@ -76,8 +76,7 @@ class TextureForwarder : public LayersIPCChannel {
virtual PTextureChild* CreateTexture(
const SurfaceDescriptor& aSharedData, ReadLockDescriptor&& aReadLock,
LayersBackend aLayersBackend, TextureFlags aFlags, uint64_t aSerial,
wr::MaybeExternalImageId& aExternalImageId,
nsISerialEventTarget* aTarget = nullptr) = 0;
wr::MaybeExternalImageId& aExternalImageId) = 0;
/**
* Returns the CanvasChild for this TextureForwarder.

View file

@ -166,7 +166,7 @@ void VideoBridgeChild::ActorDealloc() { mIPDLSelfRef = nullptr; }
PTextureChild* VideoBridgeChild::CreateTexture(
const SurfaceDescriptor& aSharedData, ReadLockDescriptor&& aReadLock,
LayersBackend aLayersBackend, TextureFlags aFlags, uint64_t aSerial,
wr::MaybeExternalImageId& aExternalImageId, nsISerialEventTarget* aTarget) {
wr::MaybeExternalImageId& aExternalImageId) {
MOZ_ASSERT(CanSend());
return SendPTextureConstructor(aSharedData, std::move(aReadLock),
aLayersBackend, aFlags, aSerial);

View file

@ -51,8 +51,7 @@ class VideoBridgeChild final : public PVideoBridgeChild,
PTextureChild* CreateTexture(
const SurfaceDescriptor& aSharedData, ReadLockDescriptor&& aReadLock,
LayersBackend aLayersBackend, TextureFlags aFlags, uint64_t aSerial,
wr::MaybeExternalImageId& aExternalImageId,
nsISerialEventTarget* aTarget = nullptr) override;
wr::MaybeExternalImageId& aExternalImageId) override;
// ClientIPCAllocator
base::ProcessId GetParentPid() const override { return OtherPid(); }

View file

@ -40,14 +40,12 @@ void VRDisplayPresentation::UpdateXRWebGLLayer(dom::XRWebGLLayer* aLayer) {
}
dom::HTMLCanvasElement* canvasElement = aLayer->GetCanvas();
nsCOMPtr<nsISerialEventTarget> target =
canvasElement->OwnerDoc()->EventTargetFor(TaskCategory::Other);
if (mLayers.Length() == 0) {
// WebXR uses a single layer for now.
RefPtr<VRLayerChild> vrLayer =
static_cast<VRLayerChild*>(manager->CreateVRLayer(
mDisplayClient->GetDisplayInfo().GetDisplayID(), target, mGroup));
mDisplayClient->GetDisplayInfo().GetDisplayID(), mGroup));
mLayers.AppendElement(vrLayer);
}
RefPtr<VRLayerChild> vrLayer = mLayers[0];
@ -104,14 +102,11 @@ void VRDisplayPresentation::CreateLayers() {
continue;
}
nsCOMPtr<nsISerialEventTarget> target =
canvasElement->OwnerDoc()->EventTargetFor(TaskCategory::Other);
if (mLayers.Length() <= iLayer) {
// Not enough layers, let's add one
RefPtr<VRLayerChild> vrLayer =
static_cast<VRLayerChild*>(manager->CreateVRLayer(
mDisplayClient->GetDisplayInfo().GetDisplayID(), target, mGroup));
mDisplayClient->GetDisplayInfo().GetDisplayID(), mGroup));
if (!vrLayer) {
NS_WARNING("CreateVRLayer returned null!");
continue;

View file

@ -369,14 +369,8 @@ bool VRManagerChild::EnumerateVRDisplays() {
void VRManagerChild::DetectRuntimes() { Unused << SendDetectRuntimes(); }
PVRLayerChild* VRManagerChild::CreateVRLayer(uint32_t aDisplayID,
nsISerialEventTarget* aTarget,
uint32_t aGroup) {
PVRLayerChild* vrLayerChild = AllocPVRLayerChild(aDisplayID, aGroup);
// Do the DOM labeling.
if (aTarget) {
SetEventTargetForActor(vrLayerChild, aTarget);
MOZ_ASSERT(vrLayerChild->GetActorEventTarget());
}
return SendPVRLayerConstructor(vrLayerChild, aDisplayID, aGroup);
}

View file

@ -80,8 +80,7 @@ class VRManagerChild : public PVRManagerChild {
static bool IsPresenting();
static TimeStamp GetIdleDeadlineHint(TimeStamp aDefault);
PVRLayerChild* CreateVRLayer(uint32_t aDisplayID,
nsISerialEventTarget* aTarget, uint32_t aGroup);
PVRLayerChild* CreateVRLayer(uint32_t aDisplayID, uint32_t aGroup);
static void IdentifyTextureHost(
const layers::TextureFactoryIdentifier& aIdentifier);

View file

@ -1779,19 +1779,12 @@ void MessageChannel::RunMessage(MessageTask& aTask) {
// Check that we're going to run the first message that's valid to run.
#if 0
# ifdef DEBUG
nsCOMPtr<nsIEventTarget> messageTarget =
mListener->GetMessageEventTarget(msg);
for (MessageTask* task : mPending) {
if (task == &aTask) {
break;
}
nsCOMPtr<nsIEventTarget> taskTarget =
mListener->GetMessageEventTarget(task->Msg());
MOZ_ASSERT(!ShouldRunMessage(task->Msg()) ||
taskTarget != messageTarget ||
aTask.Msg().priority() != task->Msg().priority());
}
@ -1879,15 +1872,7 @@ void MessageChannel::MessageTask::Post() {
mScheduled = true;
RefPtr<MessageTask> self = this;
nsCOMPtr<nsISerialEventTarget> eventTarget =
Channel()->mListener->GetMessageEventTarget(mMessage);
if (eventTarget) {
eventTarget->Dispatch(self.forget(), NS_DISPATCH_NORMAL);
} else {
Channel()->mWorkerThread->Dispatch(self.forget());
}
Channel()->mWorkerThread->Dispatch(do_AddRef(this));
}
NS_IMETHODIMP

View file

@ -156,6 +156,11 @@ class MessageChannel : HasResultCodes {
IToplevelProtocol* Listener() const { return mListener; }
// Returns the event target which the worker lives on and must be used for
// operations on the current thread. Only safe to access after the
// MessageChannel has been opened.
nsISerialEventTarget* GetWorkerEventTarget() const { return mWorkerThread; }
// "Open" a connection using an existing ScopedPort. The ScopedPort must be
// valid and connected to a remote.
//

View file

@ -337,27 +337,8 @@ const MessageChannel* IProtocol::GetIPCChannel() const {
return mToplevel->GetIPCChannel();
}
void IProtocol::SetEventTargetForActor(IProtocol* aActor,
nsISerialEventTarget* aEventTarget) {
// Make sure we have a manager for the internal method to access.
aActor->SetManager(this);
mToplevel->SetEventTargetForActorInternal(aActor, aEventTarget);
}
void IProtocol::ReplaceEventTargetForActor(IProtocol* aActor,
nsISerialEventTarget* aEventTarget) {
MOZ_ASSERT(aActor->Manager());
mToplevel->ReplaceEventTargetForActor(aActor, aEventTarget);
}
nsISerialEventTarget* IProtocol::GetActorEventTarget() {
// FIXME: It's a touch sketchy that we don't return a strong reference here.
RefPtr<nsISerialEventTarget> target = GetActorEventTarget(this);
return target;
}
already_AddRefed<nsISerialEventTarget> IProtocol::GetActorEventTarget(
IProtocol* aActor) {
return mToplevel->GetActorEventTarget(aActor);
return GetIPCChannel()->GetWorkerEventTarget();
}
void IProtocol::SetId(int32_t aId) {
@ -605,7 +586,6 @@ IToplevelProtocol::IToplevelProtocol(const char* aName, ProtocolId aProtoId,
: IProtocol(aProtoId, aSide),
mOtherPid(base::kInvalidProcessId),
mLastLocalId(0),
mEventTargetMutex("ProtocolEventTargetMutex"),
mChannel(aName, this) {
mToplevel = this;
}
@ -668,20 +648,7 @@ int32_t IToplevelProtocol::Register(IProtocol* aRouted) {
// If there's already an ID, just return that.
return aRouted->Id();
}
int32_t id = RegisterID(aRouted, NextId());
// Inherit our event target from our manager.
if (IProtocol* manager = aRouted->Manager()) {
MutexAutoLock lock(mEventTargetMutex);
if (nsCOMPtr<nsISerialEventTarget> target =
mEventTargetMap.Get(manager->Id())) {
MOZ_ASSERT(!mEventTargetMap.Contains(id),
"Don't insert with an existing ID");
mEventTargetMap.InsertOrUpdate(id, std::move(target));
}
}
return id;
return RegisterID(aRouted, NextId());
}
int32_t IToplevelProtocol::RegisterID(IProtocol* aRouted, int32_t aId) {
@ -698,9 +665,6 @@ void IToplevelProtocol::Unregister(int32_t aId) {
MOZ_ASSERT(mActorMap.Contains(aId),
"Attempting to remove an ID not in the actor map");
mActorMap.Remove(aId);
MutexAutoLock lock(mEventTargetMutex);
mEventTargetMap.Remove(aId);
}
Shmem::SharedMemory* IToplevelProtocol::CreateSharedMemory(
@ -801,88 +765,6 @@ bool IToplevelProtocol::ShmemDestroyed(const Message& aMsg) {
return true;
}
already_AddRefed<nsISerialEventTarget> IToplevelProtocol::GetMessageEventTarget(
const Message& aMsg) {
int32_t route = aMsg.routing_id();
Maybe<MutexAutoLock> lock;
lock.emplace(mEventTargetMutex);
nsCOMPtr<nsISerialEventTarget> target = mEventTargetMap.Get(route);
if (aMsg.is_constructor()) {
ActorHandle handle;
PickleIterator iter = PickleIterator(aMsg);
if (!IPC::ReadParam(&aMsg, &iter, &handle)) {
return nullptr;
}
#ifdef DEBUG
// If this function is called more than once for the same message, the actor
// handle ID will already be in the map, but it should have the same target.
nsCOMPtr<nsISerialEventTarget> existingTgt =
mEventTargetMap.Get(handle.mId);
MOZ_ASSERT(existingTgt == target || existingTgt == nullptr);
#endif /* DEBUG */
mEventTargetMap.InsertOrUpdate(handle.mId, nsCOMPtr{target});
}
return target.forget();
}
already_AddRefed<nsISerialEventTarget> IToplevelProtocol::GetActorEventTarget(
IProtocol* aActor) {
MOZ_RELEASE_ASSERT(aActor->Id() != kNullActorId &&
aActor->Id() != kFreedActorId);
MutexAutoLock lock(mEventTargetMutex);
nsCOMPtr<nsISerialEventTarget> target = mEventTargetMap.Get(aActor->Id());
return target.forget();
}
nsISerialEventTarget* IToplevelProtocol::GetActorEventTarget() {
// The EventTarget of a ToplevelProtocol shall never be set.
return nullptr;
}
void IToplevelProtocol::SetEventTargetForActorInternal(
IProtocol* aActor, nsISerialEventTarget* aEventTarget) {
// The EventTarget of a ToplevelProtocol shall never be set.
MOZ_RELEASE_ASSERT(aActor != this);
// We should only call this function on actors that haven't been used for IPC
// code yet. Otherwise we'll be posting stuff to the wrong event target before
// we're called.
MOZ_RELEASE_ASSERT(aActor->Id() == kNullActorId ||
aActor->Id() == kFreedActorId);
MOZ_ASSERT(aActor->Manager() && aActor->ToplevelProtocol() == this);
// Register the actor early. When it's registered again, it will keep the same
// ID.
int32_t id = Register(aActor);
aActor->SetId(id);
MutexAutoLock lock(mEventTargetMutex);
// FIXME bug 1445121 - sometimes the id is already mapped.
mEventTargetMap.InsertOrUpdate(id, nsCOMPtr{aEventTarget});
}
void IToplevelProtocol::ReplaceEventTargetForActor(
IProtocol* aActor, nsISerialEventTarget* aEventTarget) {
// The EventTarget of a ToplevelProtocol shall never be set.
MOZ_RELEASE_ASSERT(aActor != this);
int32_t id = aActor->Id();
// The ID of the actor should have existed.
MOZ_RELEASE_ASSERT(id != kNullActorId && id != kFreedActorId);
MutexAutoLock lock(mEventTargetMutex);
MOZ_ASSERT(mEventTargetMap.Contains(id), "Only replace an existing ID");
mEventTargetMap.InsertOrUpdate(id, nsCOMPtr{aEventTarget});
}
IPDLResolverInner::IPDLResolverInner(UniquePtr<IPC::Message> aReply,
IProtocol* aActor)
: mReply(std::move(aReply)),

View file

@ -208,23 +208,10 @@ class IProtocol : public HasResultCodes {
MessageChannel* GetIPCChannel();
const MessageChannel* GetIPCChannel() const;
// Sets an event target to which all messages for aActor will be
// dispatched. This method must be called before right before the SendPFoo
// message for aActor is sent. And SendPFoo *must* be called if
// SetEventTargetForActor is called. The receiver when calling
// SetEventTargetForActor must be the actor that will be the manager for
// aActor.
void SetEventTargetForActor(IProtocol* aActor,
nsISerialEventTarget* aEventTarget);
// Replace the event target for the messages of aActor. There must not be
// any messages of aActor in the task queue, or we might run into some
// unexpected behavior.
void ReplaceEventTargetForActor(IProtocol* aActor,
nsISerialEventTarget* aEventTarget);
// Get the nsISerialEventTarget which all messages sent to this actor will be
// processed on. Unless stated otherwise, all operations on IProtocol which
// don't occur on this `nsISerialEventTarget` are unsafe.
nsISerialEventTarget* GetActorEventTarget();
already_AddRefed<nsISerialEventTarget> GetActorEventTarget(IProtocol* aActor);
// Actor lifecycle and other properties.
ProtocolId GetProtocolId() const { return mProtocolId; }
@ -424,14 +411,6 @@ class IToplevelProtocol : public IProtocol {
MessageChannel* GetIPCChannel() { return &mChannel; }
const MessageChannel* GetIPCChannel() const { return &mChannel; }
// NOTE: The target actor's Manager must already be set.
void SetEventTargetForActorInternal(IProtocol* aActor,
nsISerialEventTarget* aEventTarget);
void ReplaceEventTargetForActor(IProtocol* aActor,
nsISerialEventTarget* aEventTarget);
nsISerialEventTarget* GetActorEventTarget();
already_AddRefed<nsISerialEventTarget> GetActorEventTarget(IProtocol* aActor);
void SetOtherProcessId(base::ProcessId aOtherPid);
virtual void OnChannelClose() = 0;
@ -521,9 +500,6 @@ class IToplevelProtocol : public IProtocol {
void OnIPCChannelOpened() { ActorConnected(); }
already_AddRefed<nsISerialEventTarget> GetMessageEventTarget(
const Message& aMsg);
base::ProcessId OtherPidMaybeInvalid() const { return mOtherPid; }
private:
@ -540,12 +516,6 @@ class IToplevelProtocol : public IProtocol {
IDMap<IProtocol*> mActorMap;
IDMap<Shmem::SharedMemory*> mShmemMap;
// XXX: We no longer need mEventTargetMap for Quantum DOM, so it may be
// worthwhile to remove it before people start depending on it for other weird
// things.
Mutex mEventTargetMutex;
IDMap<nsCOMPtr<nsISerialEventTarget>> mEventTargetMap;
MessageChannel mChannel;
};

View file

@ -184,10 +184,6 @@ PWebSocketEventListenerChild* NeckoChild::AllocPWebSocketEventListenerChild(
RefPtr<WebSocketEventListenerChild> c =
new WebSocketEventListenerChild(aInnerWindowID, target);
if (target) {
gNeckoChild->SetEventTargetForActor(c, target);
}
return c.forget().take();
}

View file

@ -454,8 +454,6 @@ void GIOChannelChild::SetupNeckoTarget() {
if (!mNeckoTarget) {
return;
}
gNeckoChild->SetEventTargetForActor(this, mNeckoTarget);
}
} // namespace net

View file

@ -2034,8 +2034,6 @@ void HttpChannelChild::SetEventTarget() {
return;
}
gNeckoChild->SetEventTargetForActor(this, target);
{
MutexAutoLock lock(mEventTargetMutex);
mNeckoTarget = target;
@ -2480,8 +2478,6 @@ HttpChannelChild::OpenAlternativeOutputStream(const nsACString& aType,
RefPtr<AltDataOutputStreamChild> stream = new AltDataOutputStreamChild();
stream->AddIPDLReference();
gNeckoChild->SetEventTargetForActor(stream, neckoTarget);
if (!gNeckoChild->SendPAltDataOutputStreamConstructor(
stream, nsCString(aType), aPredictedSize, this)) {
return NS_ERROR_FAILURE;

View file

@ -453,11 +453,6 @@ void WebSocketChannelChild::OnServerClose(const uint16_t& aCode,
void WebSocketChannelChild::SetupNeckoTarget() {
mNeckoTarget = nsContentUtils::GetEventTargetByLoadInfo(
mLoadInfo, TaskCategory::Network);
if (!mNeckoTarget) {
return;
}
gNeckoChild->SetEventTargetForActor(this, mNeckoTarget);
}
NS_IMETHODIMP

View file

@ -215,7 +215,7 @@ nsresult nsChannelClassifier::StartInternal() {
}
// The classify is running in parent process, no need to give a valid event
// target
rv = uriClassifier->Classify(principal, nullptr, this, &expectCallback);
rv = uriClassifier->Classify(principal, this, &expectCallback);
if (NS_FAILED(rv)) {
return rv;
}

View file

@ -58,11 +58,6 @@ interface nsIURIClassifier : nsISupports
* @param aPrincipal
* The principal that should be checked by the URI classifier.
*
* @param nsISerialEventTarget
* Event target for constructing actor in content process.
* The event target should be tied to Docgroup/Tabgroup by
* using EventTargetFor
*
* @param aCallback
* The URI classifier will call this callback when the URI has been
* classified.
@ -73,7 +68,6 @@ interface nsIURIClassifier : nsISupports
* callback will be called.
*/
boolean classify(in nsIPrincipal aPrincipal,
in nsISerialEventTarget aEventTarget,
in nsIURIClassifierCallback aCallback);
/**

View file

@ -2193,7 +2193,7 @@ class SpecialPowersChild extends JSWindowActorChild {
* chrome-privileged and allowed to run inside SystemGroup
*/
doUrlClassify(principal, eventTarget, callback) {
doUrlClassify(principal, callback) {
let classifierService = Cc[
"@mozilla.org/url-classifier/dbservice;1"
].getService(Ci.nsIURIClassifier);
@ -2210,7 +2210,6 @@ class SpecialPowersChild extends JSWindowActorChild {
return classifierService.classify(
WrapPrivileged.unwrap(principal),
eventTarget,
wrapCallback
);
}

View file

@ -1690,9 +1690,9 @@ nsresult nsUrlClassifierDBService::Init() {
// nsChannelClassifier is the only consumer of this interface.
NS_IMETHODIMP
nsUrlClassifierDBService::Classify(nsIPrincipal* aPrincipal,
nsISerialEventTarget* aEventTarget,
nsIURIClassifierCallback* c, bool* aResult) {
NS_ENSURE_ARG(aPrincipal);
MOZ_ASSERT(c);
NS_ENSURE_ARG(aResult);
if (aPrincipal->IsSystemPrincipal()) {
@ -1710,10 +1710,6 @@ nsUrlClassifierDBService::Classify(nsIPrincipal* aPrincipal,
content->AllocPURLClassifierChild(IPC::Principal(aPrincipal), aResult));
MOZ_ASSERT(actor);
if (aEventTarget) {
content->SetEventTargetForActor(actor, aEventTarget);
}
if (!content->SendPURLClassifierConstructor(
actor, IPC::Principal(aPrincipal), aResult)) {
*aResult = false;

View file

@ -94,7 +94,7 @@ function testService() {
let tables = "test-malware-simple,test-unwanted-simple,test-phish-simple,test-block-simple,test-harmful-simple";
let uri = SpecialPowers.Services.io.newURI(test.url);
let prin = SpecialPowers.Services.scriptSecurityManager.createContentPrincipal(uri, {});
SpecialPowers.doUrlClassify(prin, null, function(errorCode) {
SpecialPowers.doUrlClassify(prin, function(errorCode) {
is(errorCode, test.result,
`Successful asynchronous classification of ${test.url}`);
SpecialPowers.doUrlClassifyLocal(uri, tables, function(results) {

View file

@ -154,7 +154,7 @@ function runTest() {
let test = testDatas.shift();
let uri = SpecialPowers.Services.io.newURI(test.url);
let prin = SpecialPowers.Services.scriptSecurityManager.createContentPrincipal(uri, {});
SpecialPowers.doUrlClassify(prin, null, function(errorCode, table, provider, fullhash) {
SpecialPowers.doUrlClassify(prin, function(errorCode, table, provider, fullhash) {
is(errorCode, test.expect.error, `Test url ${test.url} correct error`);
is(table, test.expect.table, `Test url ${test.url} correct table`);
is(provider, test.expect.provider, `Test url ${test.url} correct provider`);