Bug 1538353 - Part 1: Add a SetEventTargetForRoute helper to allow setting EventTargets for Endpoint-constructed actors, r=mccr8

Differential Revision: https://phabricator.services.mozilla.com/D24566

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Nika Layzell 2019-04-17 00:51:32 +00:00
parent f1bca69405
commit c20d338fe9
2 changed files with 28 additions and 0 deletions

View File

@ -521,6 +521,11 @@ void IProtocol::ReplaceEventTargetForActor(IProtocol* aActor,
mState->ReplaceEventTargetForActor(aActor, aEventTarget);
}
void IProtocol::SetEventTargetForRoute(int32_t aRoute,
nsIEventTarget* aEventTarget) {
mState->SetEventTargetForRoute(aRoute, aEventTarget);
}
nsIEventTarget* IProtocol::GetActorEventTarget() {
return mState->GetActorEventTarget();
}
@ -551,6 +556,11 @@ void IProtocol::ManagedState::ReplaceEventTargetForActor(
mProtocol->Manager()->ReplaceEventTargetForActor(aActor, aEventTarget);
}
void IProtocol::ManagedState::SetEventTargetForRoute(
int32_t aRoute, nsIEventTarget* aEventTarget) {
mProtocol->Manager()->SetEventTargetForRoute(aRoute, aEventTarget);
}
already_AddRefed<nsIEventTarget> IProtocol::ManagedState::GetActorEventTarget(
IProtocol* aActor) {
return mProtocol->Manager()->GetActorEventTarget(aActor);
@ -905,6 +915,16 @@ void IToplevelProtocol::ToplevelState::ReplaceEventTargetForActor(
mEventTargetMap.ReplaceWithID(aEventTarget, id);
}
void IToplevelProtocol::ToplevelState::SetEventTargetForRoute(
int32_t aRoute, nsIEventTarget* aEventTarget) {
MOZ_RELEASE_ASSERT(aRoute != mProtocol->Id());
MOZ_RELEASE_ASSERT(aRoute != kNullActorId && aRoute != kFreedActorId);
MutexAutoLock lock(mEventTargetMutex);
MOZ_ASSERT(!mEventTargetMap.Lookup(aRoute));
mEventTargetMap.AddWithID(aEventTarget, aRoute);
}
const MessageChannel* IToplevelProtocol::ToplevelState::GetIPCChannel() const {
return ProtocolState::mChannel ? ProtocolState::mChannel : &mChannel;
}

View File

@ -184,6 +184,8 @@ class IProtocol : public HasResultCodes {
nsIEventTarget* aEventTarget) = 0;
virtual void ReplaceEventTargetForActor(IProtocol* aActor,
nsIEventTarget* aEventTarget) = 0;
virtual void SetEventTargetForRoute(int32_t aRoute,
nsIEventTarget* aEventTarget) = 0;
virtual already_AddRefed<nsIEventTarget> GetActorEventTarget(
IProtocol* aActor) = 0;
@ -226,6 +228,8 @@ class IProtocol : public HasResultCodes {
nsIEventTarget* aEventTarget) override;
void ReplaceEventTargetForActor(IProtocol* aActor,
nsIEventTarget* aEventTarget) override;
void SetEventTargetForRoute(int32_t aRoute,
nsIEventTarget* aEventTarget) override;
already_AddRefed<nsIEventTarget> GetActorEventTarget(
IProtocol* aActor) override;
@ -321,6 +325,8 @@ class IProtocol : public HasResultCodes {
void ReplaceEventTargetForActor(IProtocol* aActor,
nsIEventTarget* aEventTarget);
void SetEventTargetForRoute(int32_t aRoute, nsIEventTarget* aEventTarget);
nsIEventTarget* GetActorEventTarget();
already_AddRefed<nsIEventTarget> GetActorEventTarget(IProtocol* aActor);
@ -427,6 +433,8 @@ class IToplevelProtocol : public IProtocol {
nsIEventTarget* aEventTarget) override;
void ReplaceEventTargetForActor(IProtocol* aActor,
nsIEventTarget* aEventTarget) override;
void SetEventTargetForRoute(int32_t aRoute,
nsIEventTarget* aEventTarget) override;
already_AddRefed<nsIEventTarget> GetActorEventTarget(
IProtocol* aActor) override;