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 {
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*
GetPrincipalFromWorkerPrivate(WorkerPrivate* aWorkerPrivate)
{
@ -108,7 +69,7 @@ GetPrincipalFromWorkerPrivate(WorkerPrivate* aWorkerPrivate)
class InitializeRunnable final : public WorkerMainThreadRunnable
{
public:
InitializeRunnable(WorkerPrivate* aWorkerPrivate, nsAString& aOrigin,
InitializeRunnable(WorkerPrivate* aWorkerPrivate, nsACString& aOrigin,
PrincipalInfo& aPrincipalInfo, bool& aPrivateBrowsing,
ErrorResult& aRv)
: WorkerMainThreadRunnable(aWorkerPrivate)
@ -147,7 +108,7 @@ public:
return true;
}
GetOrigin(principal, mOrigin, mRv);
mRv = principal->GetOrigin(mOrigin);
if (NS_WARN_IF(mRv.Failed())) {
return true;
}
@ -177,7 +138,7 @@ public:
private:
WorkerPrivate* mWorkerPrivate;
nsAString& mOrigin;
nsACString& mOrigin;
PrincipalInfo& mPrincipalInfo;
bool& mPrivateBrowsing;
ErrorResult& mRv;
@ -384,7 +345,7 @@ BroadcastChannel::IsEnabled(JSContext* aCx, JSObject* aGlobal)
BroadcastChannel::BroadcastChannel(nsPIDOMWindow* aWindow,
const PrincipalInfo& aPrincipalInfo,
const nsAString& aOrigin,
const nsACString& aOrigin,
const nsAString& aChannel,
bool aPrivateBrowsing)
: DOMEventTargetHelper(aWindow)
@ -420,7 +381,7 @@ BroadcastChannel::Constructor(const GlobalObject& aGlobal,
nsCOMPtr<nsPIDOMWindow> window = do_QueryInterface(aGlobal.GetAsSupports());
// Window is null in workers.
nsAutoString origin;
nsAutoCString origin;
PrincipalInfo principalInfo;
bool privateBrowsing = false;
WorkerPrivate* workerPrivate = nullptr;
@ -450,7 +411,7 @@ BroadcastChannel::Constructor(const GlobalObject& aGlobal,
return nullptr;
}
GetOrigin(principal, origin, aRv);
aRv = principal->GetOrigin(origin);
if (NS_WARN_IF(aRv.Failed())) {
return nullptr;
}

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

@ -92,7 +92,7 @@ public:
private:
BroadcastChannel(nsPIDOMWindow* aWindow,
const PrincipalInfo& aPrincipalInfo,
const nsAString& aOrigin,
const nsACString& aOrigin,
const nsAString& aChannel,
bool aPrivateBrowsing);
@ -117,7 +117,7 @@ private:
nsAutoPtr<PrincipalInfo> mPrincipalInfo;
nsString mOrigin;
nsCString mOrigin;
nsString mChannel;
bool mPrivateBrowsing;

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

@ -26,10 +26,10 @@ namespace dom {
using namespace workers;
BroadcastChannelChild::BroadcastChannelChild(const nsAString& aOrigin)
: mOrigin(aOrigin)
, mActorDestroyed(false)
BroadcastChannelChild::BroadcastChannelChild(const nsACString& aOrigin)
: mActorDestroyed(false)
{
CopyUTF8toUTF16(aOrigin, mOrigin);
}
BroadcastChannelChild::~BroadcastChannelChild()

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

@ -39,7 +39,7 @@ public:
}
private:
explicit BroadcastChannelChild(const nsAString& aOrigin);
explicit BroadcastChannelChild(const nsACString& aOrigin);
~BroadcastChannelChild();
virtual void ActorDestroy(ActorDestroyReason aWhy) override;

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

@ -20,7 +20,7 @@ namespace dom {
BroadcastChannelParent::BroadcastChannelParent(
const PrincipalInfo& aPrincipalInfo,
const nsAString& aOrigin,
const nsACString& aOrigin,
const nsAString& aChannel,
bool aPrivateBrowsing)
: mService(BroadcastChannelService::GetOrCreate())
@ -91,7 +91,7 @@ BroadcastChannelParent::ActorDestroy(ActorDestroyReason aWhy)
void
BroadcastChannelParent::CheckAndDeliver(const ClonedMessageData& aData,
const nsString& aOrigin,
const nsCString& aOrigin,
uint64_t aAppId,
bool aInBrowserElement,
const nsString& aChannel,

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

@ -28,7 +28,7 @@ class BroadcastChannelParent final : public PBroadcastChannelParent
public:
void CheckAndDeliver(const ClonedMessageData& aData,
const nsString& aOrigin,
const nsCString& aOrigin,
const uint64_t aAppId,
const bool aIsInBrowserElement,
const nsString& aChannel,
@ -36,7 +36,7 @@ public:
private:
BroadcastChannelParent(const PrincipalInfo& aPrincipalInfo,
const nsAString& aOrigin,
const nsACString& aOrigin,
const nsAString& aChannel,
bool aPrivateBrowsing);
~BroadcastChannelParent();
@ -49,7 +49,7 @@ private:
virtual void ActorDestroy(ActorDestroyReason aWhy) override;
nsRefPtr<BroadcastChannelService> mService;
nsString mOrigin;
nsCString mOrigin;
nsString mChannel;
uint64_t mAppId;
bool mIsInBrowserElement;

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

@ -83,7 +83,7 @@ struct MOZ_STACK_CLASS PostMessageData final
{
PostMessageData(BroadcastChannelParent* aParent,
const ClonedMessageData& aData,
const nsAString& aOrigin,
const nsACString& aOrigin,
uint64_t aAppId,
bool aIsInBrowserElement,
const nsAString& aChannel,
@ -121,7 +121,7 @@ struct MOZ_STACK_CLASS PostMessageData final
BroadcastChannelParent* mParent;
const ClonedMessageData& mData;
nsTArray<nsRefPtr<BlobImpl>> mBlobs;
const nsString mOrigin;
const nsCString mOrigin;
const nsString mChannel;
uint64_t mAppId;
bool mIsInBrowserElement;
@ -151,7 +151,7 @@ PostMessageEnumerator(nsPtrHashKey<BroadcastChannelParent>* aKey, void* aPtr)
void
BroadcastChannelService::PostMessage(BroadcastChannelParent* aParent,
const ClonedMessageData& aData,
const nsAString& aOrigin,
const nsACString& aOrigin,
uint64_t aAppId,
bool aIsInBrowserElement,
const nsAString& aChannel,

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

@ -33,7 +33,7 @@ public:
void PostMessage(BroadcastChannelParent* aParent,
const ClonedMessageData& aData,
const nsAString& aOrigin,
const nsACString& aOrigin,
uint64_t aAppId,
bool aIsInBrowserElement,
const nsAString& aChannel,

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

@ -242,7 +242,7 @@ BackgroundChildImpl::DeallocPUDPSocketChild(PUDPSocketChild* child)
dom::PBroadcastChannelChild*
BackgroundChildImpl::AllocPBroadcastChannelChild(const PrincipalInfo& aPrincipalInfo,
const nsString& aOrigin,
const nsCString& aOrigin,
const nsString& aChannel,
const bool& aPrivateBrowsing)
{

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

@ -85,7 +85,7 @@ protected:
virtual PBroadcastChannelChild*
AllocPBroadcastChannelChild(const PrincipalInfo& aPrincipalInfo,
const nsString& aOrigin,
const nsCString& aOrigin,
const nsString& aChannel,
const bool& aPrivateBrowsing) override;

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

@ -347,7 +347,7 @@ BackgroundParentImpl::DeallocPUDPSocketParent(PUDPSocketParent* actor)
mozilla::dom::PBroadcastChannelParent*
BackgroundParentImpl::AllocPBroadcastChannelParent(
const PrincipalInfo& aPrincipalInfo,
const nsString& aOrigin,
const nsCString& aOrigin,
const nsString& aChannel,
const bool& aPrivateBrowsing)
{
@ -365,7 +365,7 @@ class CheckPrincipalRunnable final : public nsRunnable
public:
CheckPrincipalRunnable(already_AddRefed<ContentParent> aParent,
const PrincipalInfo& aPrincipalInfo,
const nsString& aOrigin)
const nsCString& aOrigin)
: mContentParent(aParent)
, mPrincipalInfo(aPrincipalInfo)
, mOrigin(aOrigin)
@ -408,16 +408,15 @@ public:
return NS_OK;
}
nsCOMPtr<nsIURI> uri;
rv = NS_NewURI(getter_AddRefs(uri), mOrigin);
if (NS_FAILED(rv) || !uri) {
mContentParent->KillHard("BroadcastChannel killed: invalid origin URI.");
nsAutoCString origin;
rv = principal->GetOrigin(origin);
if (NS_FAILED(rv)) {
mContentParent->KillHard("BroadcastChannel killed: principal::GetOrigin failed.");
return NS_OK;
}
rv = principal->CheckMayLoad(uri, false, false);
if (NS_FAILED(rv)) {
mContentParent->KillHard("BroadcastChannel killed: the url cannot be loaded by the principal.");
if (NS_WARN_IF(!mOrigin.Equals(origin))) {
mContentParent->KillHard("BroadcastChannel killed: origins do not match.");
return NS_OK;
}
@ -427,7 +426,7 @@ public:
private:
nsRefPtr<ContentParent> mContentParent;
PrincipalInfo mPrincipalInfo;
nsString mOrigin;
nsCString mOrigin;
nsCOMPtr<nsIThread> mBackgroundThread;
};
@ -437,7 +436,7 @@ bool
BackgroundParentImpl::RecvPBroadcastChannelConstructor(
PBroadcastChannelParent* actor,
const PrincipalInfo& aPrincipalInfo,
const nsString& aOrigin,
const nsCString& aOrigin,
const nsString& aChannel,
const bool& aPrivateBrowsing)
{

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

@ -72,14 +72,14 @@ protected:
virtual PBroadcastChannelParent*
AllocPBroadcastChannelParent(const PrincipalInfo& aPrincipalInfo,
const nsString& aOrigin,
const nsCString& aOrigin,
const nsString& aChannel,
const bool& aPrivateBrowsing) override;
virtual bool
RecvPBroadcastChannelConstructor(PBroadcastChannelParent* actor,
const PrincipalInfo& aPrincipalInfo,
const nsString& origin,
const nsCString& origin,
const nsString& channel,
const bool& aPrivateBrowsing) override;

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

@ -49,7 +49,7 @@ parent:
PVsync();
PUDPSocket(OptionalPrincipalInfo pInfo, nsCString filter);
PBroadcastChannel(PrincipalInfo pInfo, nsString origin, nsString channel,
PBroadcastChannel(PrincipalInfo pInfo, nsCString origin, nsString channel,
bool privateBrowsing);
PServiceWorkerManager();