diff options
author | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
---|---|---|
committer | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
commit | 5f8de423f190bbb79a62f804151bc24824fa32d8 (patch) | |
tree | 10027f336435511475e392454359edea8e25895d /browser/components/contextualidentity/test/browser/browser_broadcastchannel.js | |
parent | 49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff) | |
download | UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip |
Add m-esr52 at 52.6.0
Diffstat (limited to 'browser/components/contextualidentity/test/browser/browser_broadcastchannel.js')
-rw-r--r-- | browser/components/contextualidentity/test/browser/browser_broadcastchannel.js | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/browser/components/contextualidentity/test/browser/browser_broadcastchannel.js b/browser/components/contextualidentity/test/browser/browser_broadcastchannel.js new file mode 100644 index 000000000..a821ce96b --- /dev/null +++ b/browser/components/contextualidentity/test/browser/browser_broadcastchannel.js @@ -0,0 +1,80 @@ +let { classes: Cc, interfaces: Ci } = Components; + +const BASE_ORIGIN = "http://example.com"; +const URI = BASE_ORIGIN + + "/browser/browser/components/contextualidentity/test/browser/empty_file.html"; + +// opens `uri' in a new tab with the provided userContextId and focuses it. +// returns the newly opened tab +function* openTabInUserContext(uri, userContextId) { + // open the tab in the correct userContextId + let tab = gBrowser.addTab(uri, {userContextId}); + + // select tab and make sure its browser is focused + gBrowser.selectedTab = tab; + tab.ownerGlobal.focus(); + + let browser = gBrowser.getBrowserForTab(tab); + yield BrowserTestUtils.browserLoaded(browser); + return {tab, browser}; +} + +add_task(function* setup() { + // make sure userContext is enabled. + yield new Promise(resolve => { + SpecialPowers.pushPrefEnv({"set": [ + ["privacy.userContext.enabled", true] + ]}, resolve); + }); +}); + +add_task(function* test() { + let receiver = yield* openTabInUserContext(URI, 2); + + let channelName = "contextualidentity-broadcastchannel"; + + // reflect the received message on title + yield ContentTask.spawn(receiver.browser, channelName, + function (name) { + content.window.testPromise = new content.window.Promise(resolve => { + content.window.bc = new content.window.BroadcastChannel(name); + content.window.bc.onmessage = function (e) { + content.document.title += e.data; + resolve(); + } + }); + } + ); + + let sender1 = yield* openTabInUserContext(URI, 1); + let sender2 = yield* openTabInUserContext(URI, 2); + sender1.message = "Message from user context #1"; + sender2.message = "Message from user context #2"; + + // send a message from a tab in different user context first + // then send a message from a tab in the same user context + for (let sender of [sender1, sender2]) { + yield ContentTask.spawn( + sender.browser, + { name: channelName, message: sender.message }, + function (opts) { + let bc = new content.window.BroadcastChannel(opts.name); + bc.postMessage(opts.message); + }); + } + + // Since sender1 sends before sender2, if the title is exactly + // sender2's message, sender1's message must've been blocked + yield ContentTask.spawn(receiver.browser, sender2.message, + function* (message) { + yield content.window.testPromise.then(function() { + is(content.document.title, message, + "should only receive messages from the same user context"); + }); + } + ); + + gBrowser.removeTab(sender1.tab); + gBrowser.removeTab(sender2.tab); + gBrowser.removeTab(receiver.tab); +}); |