Bug 1175685 - add OriginAttribute to LoadInfo. r=jonas, r=ckerschb, r=michal

This commit is contained in:
Dragana Damjanovic 2015-10-21 23:47:00 +02:00
parent d50532b568
commit 8b800510c1
5 changed files with 87 additions and 12 deletions

View File

@ -242,6 +242,7 @@ LoadInfoToLoadInfoArgs(nsILoadInfo *aLoadInfo,
aLoadInfo->GetParentOuterWindowID(),
aLoadInfo->GetEnforceSecurity(),
aLoadInfo->GetInitialSecurityCheckDone(),
aLoadInfo->GetOriginAttributes(),
redirectChain);
return NS_OK;
@ -286,6 +287,7 @@ LoadInfoArgsToLoadInfo(const OptionalLoadInfoArgs& aOptionalLoadInfoArgs,
loadInfoArgs.parentOuterWindowID(),
loadInfoArgs.enforceSecurity(),
loadInfoArgs.initialSecurityCheckDone(),
loadInfoArgs.originAttributes(),
redirectChain);
loadInfo.forget(outLoadInfo);

View File

@ -81,6 +81,8 @@ LoadInfo::LoadInfo(nsIPrincipal* aLoadingPrincipal,
mUpgradeInsecureRequests = aLoadingContext->OwnerDoc()->GetUpgradeInsecureRequests();
}
mOriginAttributes = BasePrincipal::Cast(mLoadingPrincipal)->OriginAttributesRef();
}
LoadInfo::LoadInfo(const LoadInfo& rhs)
@ -108,6 +110,7 @@ LoadInfo::LoadInfo(nsIPrincipal* aLoadingPrincipal,
uint64_t aParentOuterWindowID,
bool aEnforceSecurity,
bool aInitialSecurityCheckDone,
const OriginAttributes& aOriginAttributes,
nsTArray<nsCOMPtr<nsIPrincipal>>& aRedirectChain)
: mLoadingPrincipal(aLoadingPrincipal)
, mTriggeringPrincipal(aTriggeringPrincipal)
@ -119,6 +122,7 @@ LoadInfo::LoadInfo(nsIPrincipal* aLoadingPrincipal,
, mParentOuterWindowID(aParentOuterWindowID)
, mEnforceSecurity(aEnforceSecurity)
, mInitialSecurityCheckDone(aInitialSecurityCheckDone)
, mOriginAttributes(aOriginAttributes)
{
MOZ_ASSERT(mLoadingPrincipal);
MOZ_ASSERT(mTriggeringPrincipal);
@ -290,6 +294,44 @@ LoadInfo::GetParentOuterWindowID(uint64_t* aResult)
return NS_OK;
}
NS_IMETHODIMP
LoadInfo::GetScriptableOriginAttributes(JSContext* aCx,
JS::MutableHandle<JS::Value> aOriginAttributes)
{
if (NS_WARN_IF(!ToJSValue(aCx, mOriginAttributes, aOriginAttributes))) {
return NS_ERROR_FAILURE;
}
return NS_OK;
}
NS_IMETHODIMP
LoadInfo::SetScriptableOriginAttributes(JSContext* aCx,
JS::Handle<JS::Value> aOriginAttributes)
{
OriginAttributes attrs;
if (!aOriginAttributes.isObject() || !attrs.Init(aCx, aOriginAttributes)) {
return NS_ERROR_INVALID_ARG;
}
mOriginAttributes = attrs;
return NS_OK;
}
nsresult
LoadInfo::GetOriginAttributes(mozilla::OriginAttributes* aOriginAttributes)
{
NS_ENSURE_ARG(aOriginAttributes);
*aOriginAttributes = mOriginAttributes;
return NS_OK;
}
nsresult
LoadInfo::SetOriginAttributes(const mozilla::OriginAttributes& aOriginAttributes)
{
mOriginAttributes = aOriginAttributes;
return NS_OK;
}
NS_IMETHODIMP
LoadInfo::SetEnforceSecurity(bool aEnforceSecurity)
{

View File

@ -14,6 +14,8 @@
#include "nsIURI.h"
#include "nsTArray.h"
#include "mozilla/BasePrincipal.h"
class nsINode;
class nsXMLHttpRequest;
@ -68,6 +70,7 @@ private:
uint64_t aParentOuterWindowID,
bool aEnforceSecurity,
bool aInitialSecurityCheckDone,
const OriginAttributes& aOriginAttributes,
nsTArray<nsCOMPtr<nsIPrincipal>>& aRedirectChain);
LoadInfo(const LoadInfo& rhs);
@ -95,6 +98,7 @@ private:
uint64_t mParentOuterWindowID;
bool mEnforceSecurity;
bool mInitialSecurityCheckDone;
OriginAttributes mOriginAttributes;
nsTArray<nsCOMPtr<nsIPrincipal>> mRedirectChain;
};

View File

@ -13,16 +13,19 @@ interface nsIPrincipal;
%{C++
#include "nsTArray.h"
#include "mozilla/BasePrincipal.h"
%}
[ref] native const_nsIPrincipalArray(const nsTArray<nsCOMPtr<nsIPrincipal>>);
native OriginAttributes(mozilla::OriginAttributes);
[ref] native const_OriginAttributesRef(const mozilla::OriginAttributes);
typedef unsigned long nsSecurityFlags;
/**
* An nsILoadOwner represents per-load information about who started the load.
*/
[scriptable, builtinclass, uuid(c6dacd0c-7faf-4943-811f-03583591bc85)]
[scriptable, builtinclass, uuid(51313616-163f-4be1-aba0-e3d471b7f7a2)]
interface nsILoadInfo : nsISupports
{
/**
@ -343,6 +346,29 @@ interface nsILoadInfo : nsISupports
}
%}
/**
* Customized OriginAttributes within LoadInfo to allow overwriting of the
* default originAttributes from the loadingPrincipal.
*/
[implicit_jscontext, binaryname(ScriptableOriginAttributes)]
attribute jsval originAttributes;
[noscript, nostdcall, binaryname(GetOriginAttributes)]
OriginAttributes binaryGetOriginAttributes();
[noscript, nostdcall, binaryname(SetOriginAttributes)]
void binarySetOriginAttributes(in const_OriginAttributesRef aOriginAttrs);
%{ C++
inline mozilla::OriginAttributes GetOriginAttributes()
{
mozilla::OriginAttributes result;
mozilla::DebugOnly<nsresult> rv = GetOriginAttributes(&result);
MOZ_ASSERT(NS_SUCCEEDED(rv));
return result;
}
%}
/**
* Whenever a channel is openend by asyncOpen2() [or also open2()],
* lets set this flag so that redirects of such channels are also

View File

@ -26,17 +26,18 @@ namespace net {
struct LoadInfoArgs
{
PrincipalInfo requestingPrincipalInfo;
PrincipalInfo triggeringPrincipalInfo;
uint32_t securityFlags;
uint32_t contentPolicyType;
bool upgradeInsecureRequests;
uint64_t innerWindowID;
uint64_t outerWindowID;
uint64_t parentOuterWindowID;
bool enforceSecurity;
bool initialSecurityCheckDone;
PrincipalInfo[] redirectChain;
PrincipalInfo requestingPrincipalInfo;
PrincipalInfo triggeringPrincipalInfo;
uint32_t securityFlags;
uint32_t contentPolicyType;
bool upgradeInsecureRequests;
uint64_t innerWindowID;
uint64_t outerWindowID;
uint64_t parentOuterWindowID;
bool enforceSecurity;
bool initialSecurityCheckDone;
OriginAttributes originAttributes;
PrincipalInfo[] redirectChain;
};
/**