Bug 1165270 - Use origin for BroadcastChannel, r=bholley

This commit is contained in:
Andrea Marchesini 2015-07-06 19:28:41 +01:00
Родитель b47de52156
Коммит 4ae7941574
13 изменённых файлов: 36 добавлений и 76 удалений

Просмотреть файл

@ -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();