# HG changeset patch # User Kris Maglione # Date 1478052253 25200 # Tue Nov 01 19:04:13 2016 -0700 # Node ID 2a4d9f25f716bcac912049a8c68428658f794c18 # Parent 1d99461c007a176947e4b1beaa4e4c4475e592a6 Bug 1308920: Part 2 - Support posting messages across windows with different addonId origins. r=billm MozReview-Commit-ID: 89TD8x5cUlZ diff --git a/dom/base/PostMessageEvent.cpp b/dom/base/PostMessageEvent.cpp --- a/dom/base/PostMessageEvent.cpp +++ b/dom/base/PostMessageEvent.cpp @@ -102,23 +102,29 @@ PostMessageEvent::Run() if (NS_WARN_IF(!targetPrin)) return NS_OK; // Note: This is contrary to the spec with respect to file: URLs, which // the spec groups into a single origin, but given we intentionally // don't do that in other places it seems better to hold the line for // now. Long-term, we want HTML5 to address this so that we can // be compliant while being safer. - if (!targetPrin->Equals(mProvidedPrincipal)) { + if (!BasePrincipal::Cast(targetPrin)->EqualsIgnoringAddonId(mProvidedPrincipal)) { nsAutoString providedOrigin, targetOrigin; nsresult rv = nsContentUtils::GetUTFOrigin(targetPrin, targetOrigin); NS_ENSURE_SUCCESS(rv, rv); rv = nsContentUtils::GetUTFOrigin(mProvidedPrincipal, providedOrigin); NS_ENSURE_SUCCESS(rv, rv); + MOZ_DIAGNOSTIC_ASSERT(providedOrigin != targetOrigin || + (BasePrincipal::Cast(mProvidedPrincipal)->OriginAttributesRef() == + BasePrincipal::Cast(targetPrin)->OriginAttributesRef()), + "Unexpected postMessage call to a window with mismatched " + "origin attributes"); + const char16_t* params[] = { providedOrigin.get(), targetOrigin.get() }; nsContentUtils::ReportToConsole(nsIScriptError::errorFlag, NS_LITERAL_CSTRING("DOM Window"), sourceDocument, nsContentUtils::eDOM_PROPERTIES, "TargetPrincipalDoesNotMatch", params, ArrayLength(params)); diff --git a/toolkit/components/extensions/test/mochitest/mochitest.ini b/toolkit/components/extensions/test/mochitest/mochitest.ini --- a/toolkit/components/extensions/test/mochitest/mochitest.ini +++ b/toolkit/components/extensions/test/mochitest/mochitest.ini @@ -80,10 +80,11 @@ skip-if = (os == 'android') # Bug 125897 [test_ext_web_accessible_resources.html] skip-if = (os == 'android') # Bug 1258975 on android. [test_ext_webrequest.html] skip-if = (os == 'android' || buildapp == 'b2g') # webrequest api uninplemented (bug 1199504). Bug 1258975 on android. [test_ext_webnavigation.html] skip-if = (os == 'android' || buildapp == 'b2g') # needs TabManager which is not yet implemented. Bug 1258975 on android. [test_ext_webnavigation_filters.html] skip-if = (os == 'android' || buildapp == 'b2g') # needs TabManager which is not yet implemented. Bug 1258975 on android. +[test_ext_window_postMessage.html] [test_ext_subframes_privileges.html] skip-if = (os == 'android' || buildapp == 'b2g') # neews TabManager which is not yet implemented. Bug 1258975 on android. diff --git a/toolkit/components/extensions/test/mochitest/test_ext_window_postMessage.html b/toolkit/components/extensions/test/mochitest/test_ext_window_postMessage.html new file mode 100644 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_window_postMessage.html @@ -0,0 +1,105 @@ + + + + Test for content script + + + + + + + + + + + +