diff --git a/caps/tests/unit/test_origin.js b/caps/tests/unit/test_origin.js index 9e00c750dde9..e575976203b7 100644 --- a/caps/tests/unit/test_origin.js +++ b/caps/tests/unit/test_origin.js @@ -203,7 +203,7 @@ function run_test() { // check that we can create an empty origin attributes dict with default // members and values. - emptyAttrs = ChromeUtils.fillNonDefaultOriginAttributes({}); + emptyAttrs = ChromeUtils.createDefaultOriginAttributes(); checkValues(emptyAttrs); var uri = "http://example.org"; @@ -226,7 +226,7 @@ function run_test() { // check that we can create an origin attributes from a dict properly tests.forEach(function(t) { - let attrs = ChromeUtils.fillNonDefaultOriginAttributes(t[1]); + let attrs = ChromeUtils.createOriginAttributesFromDict(t[1]); checkValues(attrs, t[1]); do_check_eq(ChromeUtils.originAttributesToSuffix(attrs), t[0]); }); diff --git a/dom/base/ChromeUtils.cpp b/dom/base/ChromeUtils.cpp index 0923226d5628..f8acc6db2282 100644 --- a/dom/base/ChromeUtils.cpp +++ b/dom/base/ChromeUtils.cpp @@ -70,6 +70,13 @@ ChromeUtils::OriginAttributesMatchPattern(dom::GlobalObject& aGlobal, return pattern.Matches(attrs); } +/* static */ void +ChromeUtils::CreateDefaultOriginAttributes(dom::GlobalObject& aGlobal, + dom::OriginAttributesDictionary& aAttrs) +{ + aAttrs = GenericOriginAttributes(); +} + /* static */ void ChromeUtils::CreateOriginAttributesFromOrigin(dom::GlobalObject& aGlobal, const nsAString& aOrigin, @@ -86,7 +93,7 @@ ChromeUtils::CreateOriginAttributesFromOrigin(dom::GlobalObject& aGlobal, } /* static */ void -ChromeUtils::FillNonDefaultOriginAttributes(dom::GlobalObject& aGlobal, +ChromeUtils::CreateOriginAttributesFromDict(dom::GlobalObject& aGlobal, const dom::OriginAttributesDictionary& aAttrs, dom::OriginAttributesDictionary& aNewAttrs) { diff --git a/dom/base/ChromeUtils.h b/dom/base/ChromeUtils.h index 35a6d6cc5a68..3378dac3af4e 100644 --- a/dom/base/ChromeUtils.h +++ b/dom/base/ChromeUtils.h @@ -58,6 +58,10 @@ public: const dom::OriginAttributesDictionary& aAttrs, const dom::OriginAttributesPatternDictionary& aPattern); + static void + CreateDefaultOriginAttributes(dom::GlobalObject& aGlobal, + dom::OriginAttributesDictionary& aAttrs); + static void CreateOriginAttributesFromOrigin(dom::GlobalObject& aGlobal, const nsAString& aOrigin, @@ -65,7 +69,7 @@ public: ErrorResult& aRv); static void - FillNonDefaultOriginAttributes(dom::GlobalObject& aGlobal, + CreateOriginAttributesFromDict(dom::GlobalObject& aGlobal, const dom::OriginAttributesDictionary& aAttrs, dom::OriginAttributesDictionary& aNewAttrs); diff --git a/dom/webidl/ChromeUtils.webidl b/dom/webidl/ChromeUtils.webidl index f0e5b03ba465..e22201341b2a 100644 --- a/dom/webidl/ChromeUtils.webidl +++ b/dom/webidl/ChromeUtils.webidl @@ -29,6 +29,16 @@ interface ChromeUtils : ThreadSafeChromeUtils { originAttributesMatchPattern(optional OriginAttributesDictionary originAttrs, optional OriginAttributesPatternDictionary pattern); + /** + * Returns an OriginAttributesDictionary with all default attributes added + * and assigned default values. + * + * @returns An OriginAttributesDictionary populated with the + * default attributes added and assigned default values. + */ + static OriginAttributesDictionary + createDefaultOriginAttributes(); + /** * Returns an OriginAttributesDictionary with values from the |origin| suffix * and unspecified attributes added and assigned default values. @@ -52,7 +62,7 @@ interface ChromeUtils : ThreadSafeChromeUtils { * default values. */ static OriginAttributesDictionary - fillNonDefaultOriginAttributes(optional OriginAttributesDictionary originAttrs); + createOriginAttributesFromDict(optional OriginAttributesDictionary originAttrs); /** * Returns true if the 2 OriginAttributes are equal. diff --git a/toolkit/components/extensions/ExtensionContent.jsm b/toolkit/components/extensions/ExtensionContent.jsm index 19906367f4d4..c5a11df3439d 100644 --- a/toolkit/components/extensions/ExtensionContent.jsm +++ b/toolkit/components/extensions/ExtensionContent.jsm @@ -296,18 +296,13 @@ class ExtensionContext extends BaseContext { let contentPrincipal = contentWindow.document.nodePrincipal; let ssm = Services.scriptSecurityManager; - // copy origin attributes from the content window origin attributes to - // preserve the user context id. overwrite the addonId. - let attrs = ChromeUtils.fillNonDefaultOriginAttributes(contentPrincipal.originAttributes); - attrs.addonId = extensionId; - let extensionPrincipal = ssm.createCodebasePrincipal(this.extension.baseURI, attrs); + let extensionPrincipal = ssm.createCodebasePrincipal(this.extension.baseURI, {addonId: extensionId}); Object.defineProperty(this, "principal", {value: extensionPrincipal, enumerable: true, configurable: true}); if (ssm.isSystemPrincipal(contentPrincipal)) { // Make sure we don't hand out the system principal by accident. - // also make sure that the null principal has the right origin attributes - prin = ssm.createNullPrincipal(attrs); + prin = Cc["@mozilla.org/nullprincipal;1"].createInstance(Ci.nsIPrincipal); } else { prin = [contentPrincipal, extensionPrincipal]; }