author | Bobby Holley <bobbyholley@gmail.com> |
Sat, 11 Jul 2015 00:22:14 -0400 | |
changeset 284770 | 71069116ee281ff10618d78097abb21c8bcba3aa |
parent 284769 | 86d4a584905c36d6c4ef873cd2a03496a17adde5 |
child 284771 | 56e9597b125752f45745dc007ee3db6d0a8f82c0 |
push id | 5067 |
push user | raliiev@mozilla.com |
push date | Mon, 21 Sep 2015 14:04:52 +0000 |
treeherder | mozilla-beta@14221ffe5b2f [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | mrbkap |
bugs | 1182357 |
milestone | 42.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/caps/nsIScriptSecurityManager.idl +++ b/caps/nsIScriptSecurityManager.idl @@ -21,17 +21,17 @@ class DomainPolicyClone; } } %} [ptr] native JSContextPtr(JSContext); [ptr] native JSObjectPtr(JSObject); [ptr] native DomainPolicyClonePtr(mozilla::dom::DomainPolicyClone); -[scriptable, uuid(f4c578b8-5bac-4ba1-9582-f1140e09a3b4)] +[scriptable, uuid(50418f5c-b0d8-42c3-ba5d-efffb6927e1c)] interface nsIScriptSecurityManager : nsISupports { /** * For each of these hooks returning NS_OK means 'let the action continue'. * Returning an error code means 'veto the action'. XPConnect will return * false to the js engine if the action is vetoed. The implementor of this * interface is responsible for setting a JS exception into the JSContext * if that is appropriate. @@ -197,16 +197,30 @@ interface nsIScriptSecurityManager : nsI * Returns a unique nonce principal with |originAttributes|. * See nsIPrincipal.h for a description of origin attributes, and * SystemDictionaries.webidl for a list of origin attributes and their defaults. */ [implicit_jscontext] nsIPrincipal createNullPrincipal(in jsval originAttributes); /** + * Creates an expanded principal whose capabilities are the union of the + * given principals. An expanded principal has an asymmetric privilege + * relationship with its sub-principals (that is to say, it subsumes the + * sub-principals, but the sub-principals do not subsume it), even if + * there's only one. This presents a legitimate use-case for making an + * expanded principal around a single sub-principal, which we do frequently. + * + * Expanded principals cannot have origin attributes themselves, but rather + * have them through their sub-principals - so we don't accept them here. + */ + nsIPrincipal createExpandedPrincipal([array, size_is(aLength)] in nsIPrincipal aPrincipalArray, + [optional] in unsigned long aLength); + + /** * Returns OK if aSourceURI and target have the same "origin" * (scheme, host, and port). * ReportError flag suppresses error reports for functions that * don't need reporting. */ void checkSameOriginURI(in nsIURI aSourceURI, in nsIURI aTargetURI, in boolean reportError);
--- a/caps/nsScriptSecurityManager.cpp +++ b/caps/nsScriptSecurityManager.cpp @@ -1,10 +1,10 @@ /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* vim: set ts=4 et sw=4 tw=80: */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include "nsScriptSecurityManager.h" #include "mozilla/ArrayUtils.h" @@ -1023,16 +1023,31 @@ nsScriptSecurityManager::CreateNullPrinc } nsCOMPtr<nsIPrincipal> prin = nsNullPrincipal::Create(attrs); NS_ENSURE_TRUE(prin, NS_ERROR_FAILURE); prin.forget(aPrincipal); return NS_OK; } NS_IMETHODIMP +nsScriptSecurityManager::CreateExpandedPrincipal(nsIPrincipal** aPrincipalArray, uint32_t aLength, + nsIPrincipal** aResult) +{ + nsTArray<nsCOMPtr<nsIPrincipal>> principals; + principals.SetCapacity(aLength); + for (uint32_t i = 0; i < aLength; ++i) { + principals.AppendElement(aPrincipalArray[i]); + } + + nsCOMPtr<nsIPrincipal> p = new nsExpandedPrincipal(principals); + p.forget(aResult); + return NS_OK; +} + +NS_IMETHODIMP nsScriptSecurityManager::GetAppCodebasePrincipal(nsIURI* aURI, uint32_t aAppId, bool aInMozBrowser, nsIPrincipal** aPrincipal) { NS_ENSURE_TRUE(aAppId != nsIScriptSecurityManager::UNKNOWN_APP_ID, NS_ERROR_INVALID_ARG);
--- a/caps/tests/unit/test_origin.js +++ b/caps/tests/unit/test_origin.js @@ -42,17 +42,17 @@ function run_test() { do_check_eq(exampleOrg.origin, 'http://example.org'); checkOriginAttributes(exampleOrg); var exampleCom = ssm.createCodebasePrincipal(makeURI('https://www.example.com:123'), {}); do_check_eq(exampleCom.origin, 'https://www.example.com:123'); checkOriginAttributes(exampleCom); var nullPrin = Cu.getObjectPrincipal(new Cu.Sandbox(null)); do_check_true(/^moz-nullprincipal:\{([0-9]|[a-z]|\-){36}\}$/.test(nullPrin.origin)); checkOriginAttributes(nullPrin); - var ep = Cu.getObjectPrincipal(new Cu.Sandbox([exampleCom, nullPrin, exampleOrg])); + var ep = ssm.createExpandedPrincipal([exampleCom, nullPrin, exampleOrg]); checkOriginAttributes(ep); checkCrossOrigin(exampleCom, exampleOrg); checkCrossOrigin(exampleOrg, nullPrin); // nsEP origins should be in lexical order. do_check_eq(ep.origin, `[Expanded Principal [${exampleOrg.origin}, ${exampleCom.origin}, ${nullPrin.origin}]]`); // Make sure createCodebasePrincipal does what the rest of gecko does.