зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1165270 - Use origin for BroadcastChannel, r=bholley
This commit is contained in:
Родитель
b47de52156
Коммит
4ae7941574
|
@ -49,45 +49,6 @@ private:
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
void
|
|
||||||
GetOrigin(nsIPrincipal* aPrincipal, nsAString& aOrigin, ErrorResult& aRv)
|
|
||||||
{
|
|
||||||
MOZ_ASSERT(aPrincipal);
|
|
||||||
|
|
||||||
nsAutoString tmp;
|
|
||||||
aRv = nsContentUtils::GetUTFOrigin(aPrincipal, tmp);
|
|
||||||
if (NS_WARN_IF(aRv.Failed())) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 'null' means an unknown origin (it can be chrome code or it can be some
|
|
||||||
// about: page).
|
|
||||||
|
|
||||||
aOrigin = tmp;
|
|
||||||
if (!aOrigin.EqualsASCII("null")) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
nsCOMPtr<nsIURI> uri;
|
|
||||||
aRv = aPrincipal->GetURI(getter_AddRefs(uri));
|
|
||||||
if (NS_WARN_IF(aRv.Failed())) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (NS_WARN_IF(!uri)) {
|
|
||||||
aRv.Throw(NS_ERROR_FAILURE);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
nsAutoCString spec;
|
|
||||||
aRv = uri->GetSpec(spec);
|
|
||||||
if (NS_WARN_IF(aRv.Failed())) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
aOrigin = NS_ConvertUTF8toUTF16(spec);
|
|
||||||
}
|
|
||||||
|
|
||||||
nsIPrincipal*
|
nsIPrincipal*
|
||||||
GetPrincipalFromWorkerPrivate(WorkerPrivate* aWorkerPrivate)
|
GetPrincipalFromWorkerPrivate(WorkerPrivate* aWorkerPrivate)
|
||||||
{
|
{
|
||||||
|
@ -108,7 +69,7 @@ GetPrincipalFromWorkerPrivate(WorkerPrivate* aWorkerPrivate)
|
||||||
class InitializeRunnable final : public WorkerMainThreadRunnable
|
class InitializeRunnable final : public WorkerMainThreadRunnable
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
InitializeRunnable(WorkerPrivate* aWorkerPrivate, nsAString& aOrigin,
|
InitializeRunnable(WorkerPrivate* aWorkerPrivate, nsACString& aOrigin,
|
||||||
PrincipalInfo& aPrincipalInfo, bool& aPrivateBrowsing,
|
PrincipalInfo& aPrincipalInfo, bool& aPrivateBrowsing,
|
||||||
ErrorResult& aRv)
|
ErrorResult& aRv)
|
||||||
: WorkerMainThreadRunnable(aWorkerPrivate)
|
: WorkerMainThreadRunnable(aWorkerPrivate)
|
||||||
|
@ -147,7 +108,7 @@ public:
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
GetOrigin(principal, mOrigin, mRv);
|
mRv = principal->GetOrigin(mOrigin);
|
||||||
if (NS_WARN_IF(mRv.Failed())) {
|
if (NS_WARN_IF(mRv.Failed())) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -177,7 +138,7 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
WorkerPrivate* mWorkerPrivate;
|
WorkerPrivate* mWorkerPrivate;
|
||||||
nsAString& mOrigin;
|
nsACString& mOrigin;
|
||||||
PrincipalInfo& mPrincipalInfo;
|
PrincipalInfo& mPrincipalInfo;
|
||||||
bool& mPrivateBrowsing;
|
bool& mPrivateBrowsing;
|
||||||
ErrorResult& mRv;
|
ErrorResult& mRv;
|
||||||
|
@ -384,7 +345,7 @@ BroadcastChannel::IsEnabled(JSContext* aCx, JSObject* aGlobal)
|
||||||
|
|
||||||
BroadcastChannel::BroadcastChannel(nsPIDOMWindow* aWindow,
|
BroadcastChannel::BroadcastChannel(nsPIDOMWindow* aWindow,
|
||||||
const PrincipalInfo& aPrincipalInfo,
|
const PrincipalInfo& aPrincipalInfo,
|
||||||
const nsAString& aOrigin,
|
const nsACString& aOrigin,
|
||||||
const nsAString& aChannel,
|
const nsAString& aChannel,
|
||||||
bool aPrivateBrowsing)
|
bool aPrivateBrowsing)
|
||||||
: DOMEventTargetHelper(aWindow)
|
: DOMEventTargetHelper(aWindow)
|
||||||
|
@ -420,7 +381,7 @@ BroadcastChannel::Constructor(const GlobalObject& aGlobal,
|
||||||
nsCOMPtr<nsPIDOMWindow> window = do_QueryInterface(aGlobal.GetAsSupports());
|
nsCOMPtr<nsPIDOMWindow> window = do_QueryInterface(aGlobal.GetAsSupports());
|
||||||
// Window is null in workers.
|
// Window is null in workers.
|
||||||
|
|
||||||
nsAutoString origin;
|
nsAutoCString origin;
|
||||||
PrincipalInfo principalInfo;
|
PrincipalInfo principalInfo;
|
||||||
bool privateBrowsing = false;
|
bool privateBrowsing = false;
|
||||||
WorkerPrivate* workerPrivate = nullptr;
|
WorkerPrivate* workerPrivate = nullptr;
|
||||||
|
@ -450,7 +411,7 @@ BroadcastChannel::Constructor(const GlobalObject& aGlobal,
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
GetOrigin(principal, origin, aRv);
|
aRv = principal->GetOrigin(origin);
|
||||||
if (NS_WARN_IF(aRv.Failed())) {
|
if (NS_WARN_IF(aRv.Failed())) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
|
@ -92,7 +92,7 @@ public:
|
||||||
private:
|
private:
|
||||||
BroadcastChannel(nsPIDOMWindow* aWindow,
|
BroadcastChannel(nsPIDOMWindow* aWindow,
|
||||||
const PrincipalInfo& aPrincipalInfo,
|
const PrincipalInfo& aPrincipalInfo,
|
||||||
const nsAString& aOrigin,
|
const nsACString& aOrigin,
|
||||||
const nsAString& aChannel,
|
const nsAString& aChannel,
|
||||||
bool aPrivateBrowsing);
|
bool aPrivateBrowsing);
|
||||||
|
|
||||||
|
@ -117,7 +117,7 @@ private:
|
||||||
|
|
||||||
nsAutoPtr<PrincipalInfo> mPrincipalInfo;
|
nsAutoPtr<PrincipalInfo> mPrincipalInfo;
|
||||||
|
|
||||||
nsString mOrigin;
|
nsCString mOrigin;
|
||||||
nsString mChannel;
|
nsString mChannel;
|
||||||
bool mPrivateBrowsing;
|
bool mPrivateBrowsing;
|
||||||
|
|
||||||
|
|
|
@ -26,10 +26,10 @@ namespace dom {
|
||||||
|
|
||||||
using namespace workers;
|
using namespace workers;
|
||||||
|
|
||||||
BroadcastChannelChild::BroadcastChannelChild(const nsAString& aOrigin)
|
BroadcastChannelChild::BroadcastChannelChild(const nsACString& aOrigin)
|
||||||
: mOrigin(aOrigin)
|
: mActorDestroyed(false)
|
||||||
, mActorDestroyed(false)
|
|
||||||
{
|
{
|
||||||
|
CopyUTF8toUTF16(aOrigin, mOrigin);
|
||||||
}
|
}
|
||||||
|
|
||||||
BroadcastChannelChild::~BroadcastChannelChild()
|
BroadcastChannelChild::~BroadcastChannelChild()
|
||||||
|
|
|
@ -39,7 +39,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
explicit BroadcastChannelChild(const nsAString& aOrigin);
|
explicit BroadcastChannelChild(const nsACString& aOrigin);
|
||||||
~BroadcastChannelChild();
|
~BroadcastChannelChild();
|
||||||
|
|
||||||
virtual void ActorDestroy(ActorDestroyReason aWhy) override;
|
virtual void ActorDestroy(ActorDestroyReason aWhy) override;
|
||||||
|
|
|
@ -20,7 +20,7 @@ namespace dom {
|
||||||
|
|
||||||
BroadcastChannelParent::BroadcastChannelParent(
|
BroadcastChannelParent::BroadcastChannelParent(
|
||||||
const PrincipalInfo& aPrincipalInfo,
|
const PrincipalInfo& aPrincipalInfo,
|
||||||
const nsAString& aOrigin,
|
const nsACString& aOrigin,
|
||||||
const nsAString& aChannel,
|
const nsAString& aChannel,
|
||||||
bool aPrivateBrowsing)
|
bool aPrivateBrowsing)
|
||||||
: mService(BroadcastChannelService::GetOrCreate())
|
: mService(BroadcastChannelService::GetOrCreate())
|
||||||
|
@ -91,7 +91,7 @@ BroadcastChannelParent::ActorDestroy(ActorDestroyReason aWhy)
|
||||||
|
|
||||||
void
|
void
|
||||||
BroadcastChannelParent::CheckAndDeliver(const ClonedMessageData& aData,
|
BroadcastChannelParent::CheckAndDeliver(const ClonedMessageData& aData,
|
||||||
const nsString& aOrigin,
|
const nsCString& aOrigin,
|
||||||
uint64_t aAppId,
|
uint64_t aAppId,
|
||||||
bool aInBrowserElement,
|
bool aInBrowserElement,
|
||||||
const nsString& aChannel,
|
const nsString& aChannel,
|
||||||
|
|
|
@ -28,7 +28,7 @@ class BroadcastChannelParent final : public PBroadcastChannelParent
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void CheckAndDeliver(const ClonedMessageData& aData,
|
void CheckAndDeliver(const ClonedMessageData& aData,
|
||||||
const nsString& aOrigin,
|
const nsCString& aOrigin,
|
||||||
const uint64_t aAppId,
|
const uint64_t aAppId,
|
||||||
const bool aIsInBrowserElement,
|
const bool aIsInBrowserElement,
|
||||||
const nsString& aChannel,
|
const nsString& aChannel,
|
||||||
|
@ -36,7 +36,7 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
BroadcastChannelParent(const PrincipalInfo& aPrincipalInfo,
|
BroadcastChannelParent(const PrincipalInfo& aPrincipalInfo,
|
||||||
const nsAString& aOrigin,
|
const nsACString& aOrigin,
|
||||||
const nsAString& aChannel,
|
const nsAString& aChannel,
|
||||||
bool aPrivateBrowsing);
|
bool aPrivateBrowsing);
|
||||||
~BroadcastChannelParent();
|
~BroadcastChannelParent();
|
||||||
|
@ -49,7 +49,7 @@ private:
|
||||||
virtual void ActorDestroy(ActorDestroyReason aWhy) override;
|
virtual void ActorDestroy(ActorDestroyReason aWhy) override;
|
||||||
|
|
||||||
nsRefPtr<BroadcastChannelService> mService;
|
nsRefPtr<BroadcastChannelService> mService;
|
||||||
nsString mOrigin;
|
nsCString mOrigin;
|
||||||
nsString mChannel;
|
nsString mChannel;
|
||||||
uint64_t mAppId;
|
uint64_t mAppId;
|
||||||
bool mIsInBrowserElement;
|
bool mIsInBrowserElement;
|
||||||
|
|
|
@ -83,7 +83,7 @@ struct MOZ_STACK_CLASS PostMessageData final
|
||||||
{
|
{
|
||||||
PostMessageData(BroadcastChannelParent* aParent,
|
PostMessageData(BroadcastChannelParent* aParent,
|
||||||
const ClonedMessageData& aData,
|
const ClonedMessageData& aData,
|
||||||
const nsAString& aOrigin,
|
const nsACString& aOrigin,
|
||||||
uint64_t aAppId,
|
uint64_t aAppId,
|
||||||
bool aIsInBrowserElement,
|
bool aIsInBrowserElement,
|
||||||
const nsAString& aChannel,
|
const nsAString& aChannel,
|
||||||
|
@ -121,7 +121,7 @@ struct MOZ_STACK_CLASS PostMessageData final
|
||||||
BroadcastChannelParent* mParent;
|
BroadcastChannelParent* mParent;
|
||||||
const ClonedMessageData& mData;
|
const ClonedMessageData& mData;
|
||||||
nsTArray<nsRefPtr<BlobImpl>> mBlobs;
|
nsTArray<nsRefPtr<BlobImpl>> mBlobs;
|
||||||
const nsString mOrigin;
|
const nsCString mOrigin;
|
||||||
const nsString mChannel;
|
const nsString mChannel;
|
||||||
uint64_t mAppId;
|
uint64_t mAppId;
|
||||||
bool mIsInBrowserElement;
|
bool mIsInBrowserElement;
|
||||||
|
@ -151,7 +151,7 @@ PostMessageEnumerator(nsPtrHashKey<BroadcastChannelParent>* aKey, void* aPtr)
|
||||||
void
|
void
|
||||||
BroadcastChannelService::PostMessage(BroadcastChannelParent* aParent,
|
BroadcastChannelService::PostMessage(BroadcastChannelParent* aParent,
|
||||||
const ClonedMessageData& aData,
|
const ClonedMessageData& aData,
|
||||||
const nsAString& aOrigin,
|
const nsACString& aOrigin,
|
||||||
uint64_t aAppId,
|
uint64_t aAppId,
|
||||||
bool aIsInBrowserElement,
|
bool aIsInBrowserElement,
|
||||||
const nsAString& aChannel,
|
const nsAString& aChannel,
|
||||||
|
|
|
@ -33,7 +33,7 @@ public:
|
||||||
|
|
||||||
void PostMessage(BroadcastChannelParent* aParent,
|
void PostMessage(BroadcastChannelParent* aParent,
|
||||||
const ClonedMessageData& aData,
|
const ClonedMessageData& aData,
|
||||||
const nsAString& aOrigin,
|
const nsACString& aOrigin,
|
||||||
uint64_t aAppId,
|
uint64_t aAppId,
|
||||||
bool aIsInBrowserElement,
|
bool aIsInBrowserElement,
|
||||||
const nsAString& aChannel,
|
const nsAString& aChannel,
|
||||||
|
|
|
@ -242,7 +242,7 @@ BackgroundChildImpl::DeallocPUDPSocketChild(PUDPSocketChild* child)
|
||||||
|
|
||||||
dom::PBroadcastChannelChild*
|
dom::PBroadcastChannelChild*
|
||||||
BackgroundChildImpl::AllocPBroadcastChannelChild(const PrincipalInfo& aPrincipalInfo,
|
BackgroundChildImpl::AllocPBroadcastChannelChild(const PrincipalInfo& aPrincipalInfo,
|
||||||
const nsString& aOrigin,
|
const nsCString& aOrigin,
|
||||||
const nsString& aChannel,
|
const nsString& aChannel,
|
||||||
const bool& aPrivateBrowsing)
|
const bool& aPrivateBrowsing)
|
||||||
{
|
{
|
||||||
|
|
|
@ -85,7 +85,7 @@ protected:
|
||||||
|
|
||||||
virtual PBroadcastChannelChild*
|
virtual PBroadcastChannelChild*
|
||||||
AllocPBroadcastChannelChild(const PrincipalInfo& aPrincipalInfo,
|
AllocPBroadcastChannelChild(const PrincipalInfo& aPrincipalInfo,
|
||||||
const nsString& aOrigin,
|
const nsCString& aOrigin,
|
||||||
const nsString& aChannel,
|
const nsString& aChannel,
|
||||||
const bool& aPrivateBrowsing) override;
|
const bool& aPrivateBrowsing) override;
|
||||||
|
|
||||||
|
|
|
@ -347,7 +347,7 @@ BackgroundParentImpl::DeallocPUDPSocketParent(PUDPSocketParent* actor)
|
||||||
mozilla::dom::PBroadcastChannelParent*
|
mozilla::dom::PBroadcastChannelParent*
|
||||||
BackgroundParentImpl::AllocPBroadcastChannelParent(
|
BackgroundParentImpl::AllocPBroadcastChannelParent(
|
||||||
const PrincipalInfo& aPrincipalInfo,
|
const PrincipalInfo& aPrincipalInfo,
|
||||||
const nsString& aOrigin,
|
const nsCString& aOrigin,
|
||||||
const nsString& aChannel,
|
const nsString& aChannel,
|
||||||
const bool& aPrivateBrowsing)
|
const bool& aPrivateBrowsing)
|
||||||
{
|
{
|
||||||
|
@ -365,7 +365,7 @@ class CheckPrincipalRunnable final : public nsRunnable
|
||||||
public:
|
public:
|
||||||
CheckPrincipalRunnable(already_AddRefed<ContentParent> aParent,
|
CheckPrincipalRunnable(already_AddRefed<ContentParent> aParent,
|
||||||
const PrincipalInfo& aPrincipalInfo,
|
const PrincipalInfo& aPrincipalInfo,
|
||||||
const nsString& aOrigin)
|
const nsCString& aOrigin)
|
||||||
: mContentParent(aParent)
|
: mContentParent(aParent)
|
||||||
, mPrincipalInfo(aPrincipalInfo)
|
, mPrincipalInfo(aPrincipalInfo)
|
||||||
, mOrigin(aOrigin)
|
, mOrigin(aOrigin)
|
||||||
|
@ -408,16 +408,15 @@ public:
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
nsCOMPtr<nsIURI> uri;
|
nsAutoCString origin;
|
||||||
rv = NS_NewURI(getter_AddRefs(uri), mOrigin);
|
rv = principal->GetOrigin(origin);
|
||||||
if (NS_FAILED(rv) || !uri) {
|
if (NS_FAILED(rv)) {
|
||||||
mContentParent->KillHard("BroadcastChannel killed: invalid origin URI.");
|
mContentParent->KillHard("BroadcastChannel killed: principal::GetOrigin failed.");
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
rv = principal->CheckMayLoad(uri, false, false);
|
if (NS_WARN_IF(!mOrigin.Equals(origin))) {
|
||||||
if (NS_FAILED(rv)) {
|
mContentParent->KillHard("BroadcastChannel killed: origins do not match.");
|
||||||
mContentParent->KillHard("BroadcastChannel killed: the url cannot be loaded by the principal.");
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -427,7 +426,7 @@ public:
|
||||||
private:
|
private:
|
||||||
nsRefPtr<ContentParent> mContentParent;
|
nsRefPtr<ContentParent> mContentParent;
|
||||||
PrincipalInfo mPrincipalInfo;
|
PrincipalInfo mPrincipalInfo;
|
||||||
nsString mOrigin;
|
nsCString mOrigin;
|
||||||
nsCOMPtr<nsIThread> mBackgroundThread;
|
nsCOMPtr<nsIThread> mBackgroundThread;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -437,7 +436,7 @@ bool
|
||||||
BackgroundParentImpl::RecvPBroadcastChannelConstructor(
|
BackgroundParentImpl::RecvPBroadcastChannelConstructor(
|
||||||
PBroadcastChannelParent* actor,
|
PBroadcastChannelParent* actor,
|
||||||
const PrincipalInfo& aPrincipalInfo,
|
const PrincipalInfo& aPrincipalInfo,
|
||||||
const nsString& aOrigin,
|
const nsCString& aOrigin,
|
||||||
const nsString& aChannel,
|
const nsString& aChannel,
|
||||||
const bool& aPrivateBrowsing)
|
const bool& aPrivateBrowsing)
|
||||||
{
|
{
|
||||||
|
|
|
@ -72,14 +72,14 @@ protected:
|
||||||
|
|
||||||
virtual PBroadcastChannelParent*
|
virtual PBroadcastChannelParent*
|
||||||
AllocPBroadcastChannelParent(const PrincipalInfo& aPrincipalInfo,
|
AllocPBroadcastChannelParent(const PrincipalInfo& aPrincipalInfo,
|
||||||
const nsString& aOrigin,
|
const nsCString& aOrigin,
|
||||||
const nsString& aChannel,
|
const nsString& aChannel,
|
||||||
const bool& aPrivateBrowsing) override;
|
const bool& aPrivateBrowsing) override;
|
||||||
|
|
||||||
virtual bool
|
virtual bool
|
||||||
RecvPBroadcastChannelConstructor(PBroadcastChannelParent* actor,
|
RecvPBroadcastChannelConstructor(PBroadcastChannelParent* actor,
|
||||||
const PrincipalInfo& aPrincipalInfo,
|
const PrincipalInfo& aPrincipalInfo,
|
||||||
const nsString& origin,
|
const nsCString& origin,
|
||||||
const nsString& channel,
|
const nsString& channel,
|
||||||
const bool& aPrivateBrowsing) override;
|
const bool& aPrivateBrowsing) override;
|
||||||
|
|
||||||
|
|
|
@ -49,7 +49,7 @@ parent:
|
||||||
PVsync();
|
PVsync();
|
||||||
|
|
||||||
PUDPSocket(OptionalPrincipalInfo pInfo, nsCString filter);
|
PUDPSocket(OptionalPrincipalInfo pInfo, nsCString filter);
|
||||||
PBroadcastChannel(PrincipalInfo pInfo, nsString origin, nsString channel,
|
PBroadcastChannel(PrincipalInfo pInfo, nsCString origin, nsString channel,
|
||||||
bool privateBrowsing);
|
bool privateBrowsing);
|
||||||
|
|
||||||
PServiceWorkerManager();
|
PServiceWorkerManager();
|
||||||
|
|
Загрузка…
Ссылка в новой задаче