Bug 1418007 P2 Track the client window or worker's event target on ClientSource. r=baku

This commit is contained in:
Ben Kelly 2017-11-16 13:15:10 -05:00
parent 156cd8dec2
commit 44e7d854dd
4 changed files with 30 additions and 9 deletions

View File

@ -98,6 +98,7 @@ ClientManager::Shutdown()
UniquePtr<ClientSource>
ClientManager::CreateSourceInternal(ClientType aType,
nsISerialEventTarget* aEventTarget,
const PrincipalInfo& aPrincipal)
{
NS_ASSERT_OWNINGTHREAD(ClientManager);
@ -113,7 +114,7 @@ ClientManager::CreateSourceInternal(ClientType aType,
}
ClientSourceConstructorArgs args(id, aType, aPrincipal, TimeStamp::Now());
UniquePtr<ClientSource> source(new ClientSource(this, args));
UniquePtr<ClientSource> source(new ClientSource(this, aEventTarget, args));
source->Activate(GetActor());
return Move(source);
@ -210,7 +211,8 @@ ClientManager::Startup()
// static
UniquePtr<ClientSource>
ClientManager::CreateSource(ClientType aType, nsIPrincipal* aPrincipal)
ClientManager::CreateSource(ClientType aType, nsISerialEventTarget* aEventTarget,
nsIPrincipal* aPrincipal)
{
MOZ_ASSERT(NS_IsMainThread());
MOZ_ASSERT(aPrincipal);
@ -222,15 +224,16 @@ ClientManager::CreateSource(ClientType aType, nsIPrincipal* aPrincipal)
}
RefPtr<ClientManager> mgr = GetOrCreateForCurrentThread();
return mgr->CreateSourceInternal(aType, principalInfo);
return mgr->CreateSourceInternal(aType, aEventTarget, principalInfo);
}
// static
UniquePtr<ClientSource>
ClientManager::CreateSource(ClientType aType, const PrincipalInfo& aPrincipal)
ClientManager::CreateSource(ClientType aType, nsISerialEventTarget* aEventTarget,
const PrincipalInfo& aPrincipal)
{
RefPtr<ClientManager> mgr = GetOrCreateForCurrentThread();
return mgr->CreateSourceInternal(aType, aPrincipal);
return mgr->CreateSourceInternal(aType, aEventTarget, aPrincipal);
}
// static

View File

@ -8,12 +8,13 @@
#include "mozilla/dom/ClientOpPromise.h"
#include "mozilla/dom/ClientThing.h"
#include "mozilla/ipc/PBackgroundSharedTypes.h"
#include "nsIPrincipal.h"
class nsIPrincipal;
namespace mozilla {
namespace ipc {
class PBackgroundChild;
class PrincipalInfo;
} // namespace ipc
namespace dom {
@ -48,6 +49,7 @@ class ClientManager final : public ClientThing<ClientManagerChild>
UniquePtr<ClientSource>
CreateSourceInternal(ClientType aType,
nsISerialEventTarget* aEventTarget,
const mozilla::ipc::PrincipalInfo& aPrincipal);
already_AddRefed<ClientHandle>
@ -79,10 +81,12 @@ public:
Startup();
static UniquePtr<ClientSource>
CreateSource(ClientType aType, nsIPrincipal* aPrincipal);
CreateSource(ClientType aType, nsISerialEventTarget* aEventTarget,
nsIPrincipal* aPrincipal);
static UniquePtr<ClientSource>
CreateSource(ClientType aType, const mozilla::ipc::PrincipalInfo& aPrincipal);
CreateSource(ClientType aType, nsISerialEventTarget* aEventTarget,
const mozilla::ipc::PrincipalInfo& aPrincipal);
static already_AddRefed<ClientHandle>
CreateHandle(const ClientInfo& aClientInfo,

View File

@ -75,12 +75,15 @@ ClientSource::GetDocShell() const
}
ClientSource::ClientSource(ClientManager* aManager,
nsISerialEventTarget* aEventTarget,
const ClientSourceConstructorArgs& aArgs)
: mManager(aManager)
, mEventTarget(aEventTarget)
, mOwner(AsVariant(Nothing()))
, mClientInfo(aArgs.id(), aArgs.type(), aArgs.principalInfo(), aArgs.creationTime())
{
MOZ_ASSERT(mManager);
MOZ_ASSERT(mEventTarget);
}
void
@ -238,5 +241,11 @@ ClientSource::Info() const
return mClientInfo;
}
nsISerialEventTarget*
ClientSource::EventTarget() const
{
return mEventTarget;
}
} // namespace dom
} // namespace mozilla

View File

@ -38,6 +38,7 @@ class ClientSource final : public ClientThing<ClientSourceChild>
NS_DECL_OWNINGTHREAD
RefPtr<ClientManager> mManager;
nsCOMPtr<nsISerialEventTarget> mEventTarget;
Variant<Nothing,
RefPtr<nsPIDOMWindowInner>,
@ -60,6 +61,7 @@ class ClientSource final : public ClientThing<ClientSourceChild>
// Private methods called by ClientManager
ClientSource(ClientManager* aManager,
nsISerialEventTarget* aEventTarget,
const ClientSourceConstructorArgs& aArgs);
void
@ -82,6 +84,9 @@ public:
const ClientInfo&
Info() const;
nsISerialEventTarget*
EventTarget() const;
};
} // namespace dom