Skip to content
This repository has been archived by the owner on Aug 4, 2022. It is now read-only.

Commit

Permalink
Bug 1218039 - Add a nice interface for both C++ and JS to access the …
Browse files Browse the repository at this point in the history
…principal kind. r=gabor
  • Loading branch information
bholley committed Oct 26, 2015
1 parent 85189e8 commit bf44ef7
Show file tree
Hide file tree
Showing 8 changed files with 73 additions and 13 deletions.
25 changes: 23 additions & 2 deletions caps/BasePrincipal.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -340,9 +340,30 @@ BasePrincipal::GetCspJSON(nsAString& outCSPinJSON)
}

NS_IMETHODIMP
BasePrincipal::GetIsNullPrincipal(bool* aIsNullPrincipal)
BasePrincipal::GetIsNullPrincipal(bool* aResult)
{
*aIsNullPrincipal = false;
*aResult = Kind() == eNullPrincipal;
return NS_OK;
}

NS_IMETHODIMP
BasePrincipal::GetIsCodebasePrincipal(bool* aResult)
{
*aResult = Kind() == eCodebasePrincipal;
return NS_OK;
}

NS_IMETHODIMP
BasePrincipal::GetIsExpandedPrincipal(bool* aResult)
{
*aResult = Kind() == eExpandedPrincipal;
return NS_OK;
}

NS_IMETHODIMP
BasePrincipal::GetIsSystemPrincipal(bool* aResult)
{
*aResult = Kind() == eSystemPrincipal;
return NS_OK;
}

Expand Down
14 changes: 13 additions & 1 deletion caps/BasePrincipal.h
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,10 @@ class BasePrincipal : public nsJSPrincipals
NS_IMETHOD GetCsp(nsIContentSecurityPolicy** aCsp) override;
NS_IMETHOD SetCsp(nsIContentSecurityPolicy* aCsp) override;
NS_IMETHOD GetCspJSON(nsAString& outCSPinJSON) override;
NS_IMETHOD GetIsNullPrincipal(bool* aIsNullPrincipal) override;
NS_IMETHOD GetIsNullPrincipal(bool* aResult) override;
NS_IMETHOD GetIsCodebasePrincipal(bool* aResult) override;
NS_IMETHOD GetIsExpandedPrincipal(bool* aResult) override;
NS_IMETHOD GetIsSystemPrincipal(bool* aResult) override;
NS_IMETHOD GetJarPrefix(nsACString& aJarPrefix) final;
NS_IMETHOD GetOriginAttributes(JSContext* aCx, JS::MutableHandle<JS::Value> aVal) final;
NS_IMETHOD GetOriginSuffix(nsACString& aOriginSuffix) final;
Expand All @@ -171,6 +174,15 @@ class BasePrincipal : public nsJSPrincipals
uint32_t UserContextId() const { return mOriginAttributes.mUserContextId; }
bool IsInBrowserElement() const { return mOriginAttributes.mInBrowser; }

enum PrincipalKind {
eNullPrincipal,
eCodebasePrincipal,
eExpandedPrincipal,
eSystemPrincipal
};

virtual PrincipalKind Kind() = 0;

protected:
virtual ~BasePrincipal();

Expand Down
19 changes: 17 additions & 2 deletions caps/nsIPrincipal.idl
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ interface nsIContentSecurityPolicy;
[ptr] native JSPrincipals(JSPrincipals);
[ptr] native PrincipalArray(nsTArray<nsCOMPtr<nsIPrincipal> >);

[scriptable, builtinclass, uuid(a083acd0-1ebf-4585-85ab-08cfdd9c96bd)]
[scriptable, builtinclass, uuid(86e5fd29-dccb-4547-8918-f224005479a0)]
interface nsIPrincipal : nsISerializable
{
/**
Expand Down Expand Up @@ -280,11 +280,26 @@ interface nsIPrincipal : nsISerializable
[infallible] readonly attribute boolean unknownAppId;

/**
* Returns true iff this principal is a null principal (corresponding to an
* Returns true iff this is a null principal (corresponding to an
* unknown, hence assumed minimally privileged, security context).
*/
[infallible] readonly attribute boolean isNullPrincipal;

/**
* Returns true iff this principal corresponds to a codebase origin.
*/
[infallible] readonly attribute boolean isCodebasePrincipal;

/**
* Returns true iff this is an expanded principal.
*/
[infallible] readonly attribute boolean isExpandedPrincipal;

/**
* Returns true iff this is the system principal.
*/
[infallible] readonly attribute boolean isSystemPrincipal;

/**
* Returns true if this principal's origin is recognized as being on the
* whitelist of sites that can use the CSS Unprefixing Service.
Expand Down
7 changes: 0 additions & 7 deletions caps/nsNullPrincipal.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -124,13 +124,6 @@ nsNullPrincipal::MayLoadInternal(nsIURI* aURI)
return false;
}

NS_IMETHODIMP
nsNullPrincipal::GetIsNullPrincipal(bool* aIsNullPrincipal)
{
*aIsNullPrincipal = true;
return NS_OK;
}

NS_IMETHODIMP
nsNullPrincipal::GetBaseDomain(nsACString& aBaseDomain)
{
Expand Down
3 changes: 2 additions & 1 deletion caps/nsNullPrincipal.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,6 @@ class nsNullPrincipal final : public mozilla::BasePrincipal
NS_IMETHOD GetURI(nsIURI** aURI) override;
NS_IMETHOD GetDomain(nsIURI** aDomain) override;
NS_IMETHOD SetDomain(nsIURI* aDomain) override;
NS_IMETHOD GetIsNullPrincipal(bool* aIsNullPrincipal) override;
NS_IMETHOD GetBaseDomain(nsACString& aBaseDomain) override;
nsresult GetOriginInternal(nsACString& aOrigin) override;

Expand All @@ -59,6 +58,8 @@ class nsNullPrincipal final : public mozilla::BasePrincipal

virtual void GetScriptLocation(nsACString &aStr) override;

PrincipalKind Kind() override { return eNullPrincipal; }

protected:
virtual ~nsNullPrincipal() {}

Expand Down
4 changes: 4 additions & 0 deletions caps/nsPrincipal.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@ class nsPrincipal final : public mozilla::BasePrincipal
*/
static void InitializeStatics();

PrincipalKind Kind() override { return eCodebasePrincipal; }

nsCOMPtr<nsIURI> mDomain;
nsCOMPtr<nsIURI> mCodebase;
// If mCodebaseImmutable is true, mCodebase is non-null and immutable
Expand Down Expand Up @@ -83,6 +85,8 @@ class nsExpandedPrincipal : public nsIExpandedPrincipal, public mozilla::BasePri
virtual void GetScriptLocation(nsACString &aStr) override;
nsresult GetOriginInternal(nsACString& aOrigin) override;

PrincipalKind Kind() override { return eExpandedPrincipal; }

protected:
virtual ~nsExpandedPrincipal();

Expand Down
2 changes: 2 additions & 0 deletions caps/nsSystemPrincipal.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,8 @@ class nsSystemPrincipal final : public mozilla::BasePrincipal
{
return true;
}

PrincipalKind Kind() override { return eSystemPrincipal; }
};

#endif // nsSystemPrincipal_h__
12 changes: 12 additions & 0 deletions caps/tests/unit/test_origin.js
Original file line number Diff line number Diff line change
Expand Up @@ -162,4 +162,16 @@ function run_test() {
checkCrossOrigin(exampleOrg_signedPkg, exampleOrg);
checkCrossOrigin(exampleOrg_signedPkg, exampleOrg_signedPkg_browser);
checkCrossOrigin(exampleOrg_signedPkg, exampleOrg_signedPkg_another);

// Check Principal kinds.
function checkKind(prin, kind) {
do_check_eq(prin.isNullPrincipal, kind == 'nullPrincipal');
do_check_eq(prin.isCodebasePrincipal, kind == 'codebasePrincipal');
do_check_eq(prin.isExpandedPrincipal, kind == 'expandedPrincipal');
do_check_eq(prin.isSystemPrincipal, kind == 'systemPrincipal');
}
checkKind(ssm.createNullPrincipal({}), 'nullPrincipal');
checkKind(ssm.createCodebasePrincipal(makeURI('http://www.example.com'), {}), 'codebasePrincipal');
checkKind(ssm.createExpandedPrincipal([ssm.createCodebasePrincipal(makeURI('http://www.example.com'), {})]), 'expandedPrincipal');
checkKind(ssm.getSystemPrincipal(), 'systemPrincipal');
}

0 comments on commit bf44ef7

Please sign in to comment.