зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1362228 - Make sure messageManager.loadFrameScript() is called before window.postMessage(), r=janv
After BrowserLoaded got called and persist() been resolved, there is no guarantee window.postMessage() is executed after addEventListener(). In order to call window.postMessage() after addEventListener(), make sure messageManager.loadFrameScript() is registered "message" in chrome privileged script, instead of via web content.
This commit is contained in:
Родитель
59605ed6b5
Коммит
8ebd1a59a4
|
@ -8,12 +8,6 @@ const testPageURL =
|
|||
|
||||
add_task(async function testPermissionAllow() {
|
||||
removePermission(testPageURL, "persistent-storage");
|
||||
info("Creating tab");
|
||||
gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser);
|
||||
|
||||
info("Loading test page: " + testPageURL);
|
||||
gBrowser.selectedBrowser.loadURI(testPageURL);
|
||||
await BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser);
|
||||
|
||||
registerPopupEventHandler("popupshowing", function () {
|
||||
ok(true, "prompt showing");
|
||||
|
@ -26,7 +20,12 @@ add_task(async function testPermissionAllow() {
|
|||
ok(true, "prompt hidden");
|
||||
});
|
||||
|
||||
await promiseMessage(true, gBrowser);
|
||||
info("Creating tab");
|
||||
gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser);
|
||||
|
||||
info("Loading test page: " + testPageURL);
|
||||
gBrowser.selectedBrowser.loadURI(testPageURL);
|
||||
await waitForMessage(true, gBrowser);
|
||||
|
||||
is(getPermission(testPageURL, "persistent-storage"),
|
||||
Components.interfaces.nsIPermissionManager.ALLOW_ACTION,
|
||||
|
@ -37,13 +36,6 @@ add_task(async function testPermissionAllow() {
|
|||
});
|
||||
|
||||
add_task(async function testNoPermissionPrompt() {
|
||||
info("Creating tab");
|
||||
gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser);
|
||||
|
||||
info("Loading test page: " + testPageURL);
|
||||
gBrowser.selectedBrowser.loadURI(testPageURL);
|
||||
await BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser);
|
||||
|
||||
registerPopupEventHandler("popupshowing", function () {
|
||||
ok(false, "Shouldn't show a popup this time");
|
||||
});
|
||||
|
@ -54,7 +46,12 @@ add_task(async function testNoPermissionPrompt() {
|
|||
ok(false, "Shouldn't show a popup this time");
|
||||
});
|
||||
|
||||
await promiseMessage(true, gBrowser);
|
||||
info("Creating tab");
|
||||
gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser);
|
||||
|
||||
info("Loading test page: " + testPageURL);
|
||||
gBrowser.selectedBrowser.loadURI(testPageURL);
|
||||
await waitForMessage(true, gBrowser);
|
||||
|
||||
is(getPermission(testPageURL, "persistent-storage"),
|
||||
Components.interfaces.nsIPermissionManager.ALLOW_ACTION,
|
||||
|
|
|
@ -8,12 +8,6 @@ const testPageURL =
|
|||
|
||||
add_task(async function testPermissionDenied() {
|
||||
removePermission(testPageURL, "persistent-storage");
|
||||
info("Creating tab");
|
||||
gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser);
|
||||
|
||||
info("Loading test page: " + testPageURL);
|
||||
gBrowser.selectedBrowser.loadURI(testPageURL);
|
||||
await BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser);
|
||||
|
||||
registerPopupEventHandler("popupshowing", function () {
|
||||
ok(true, "prompt showing");
|
||||
|
@ -26,7 +20,12 @@ add_task(async function testPermissionDenied() {
|
|||
ok(true, "prompt hidden");
|
||||
});
|
||||
|
||||
await promiseMessage(false, gBrowser);
|
||||
info("Creating tab");
|
||||
gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser);
|
||||
|
||||
info("Loading test page: " + testPageURL);
|
||||
gBrowser.selectedBrowser.loadURI(testPageURL);
|
||||
await waitForMessage(false, gBrowser);
|
||||
|
||||
is(getPermission(testPageURL, "persistent-storage"),
|
||||
Components.interfaces.nsIPermissionManager.DENY_ACTION,
|
||||
|
@ -37,13 +36,6 @@ add_task(async function testPermissionDenied() {
|
|||
});
|
||||
|
||||
add_task(async function testNoPermissionPrompt() {
|
||||
info("Creating tab");
|
||||
gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser);
|
||||
|
||||
info("Loading test page: " + testPageURL);
|
||||
gBrowser.selectedBrowser.loadURI(testPageURL);
|
||||
await BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser);
|
||||
|
||||
registerPopupEventHandler("popupshowing", function () {
|
||||
ok(false, "Shouldn't show a popup this time");
|
||||
});
|
||||
|
@ -54,7 +46,12 @@ add_task(async function testNoPermissionPrompt() {
|
|||
ok(false, "Shouldn't show a popup this time");
|
||||
});
|
||||
|
||||
await promiseMessage(false, gBrowser);
|
||||
info("Creating tab");
|
||||
gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser);
|
||||
|
||||
info("Loading test page: " + testPageURL);
|
||||
gBrowser.selectedBrowser.loadURI(testPageURL);
|
||||
await waitForMessage(false, gBrowser);
|
||||
|
||||
is(getPermission(testPageURL, "persistent-storage"),
|
||||
Components.interfaces.nsIPermissionManager.DENY_ACTION,
|
||||
|
@ -65,13 +62,6 @@ add_task(async function testNoPermissionPrompt() {
|
|||
});
|
||||
|
||||
add_task(async function testPermissionDeniedDismiss() {
|
||||
info("Creating tab");
|
||||
gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser);
|
||||
|
||||
info("Loading test page: " + testPageURL);
|
||||
gBrowser.selectedBrowser.loadURI(testPageURL);
|
||||
await BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser);
|
||||
|
||||
registerPopupEventHandler("popupshowing", function () {
|
||||
ok(true, "prompt showing");
|
||||
});
|
||||
|
@ -84,7 +74,12 @@ add_task(async function testPermissionDeniedDismiss() {
|
|||
ok(true, "prompt hidden");
|
||||
});
|
||||
|
||||
await promiseMessage(false, gBrowser);
|
||||
info("Creating tab");
|
||||
gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser);
|
||||
|
||||
info("Loading test page: " + testPageURL);
|
||||
gBrowser.selectedBrowser.loadURI(testPageURL);
|
||||
await waitForMessage(false, gBrowser);
|
||||
|
||||
is(getPermission(testPageURL, "persistent-storage"),
|
||||
Components.interfaces.nsIPermissionManager.DENY_ACTION,
|
||||
|
|
|
@ -11,13 +11,6 @@ add_task(async function testPermissionUnknownInPrivateWindow() {
|
|||
info("Creating private window");
|
||||
let win = await BrowserTestUtils.openNewBrowserWindow({ private : true });
|
||||
|
||||
info("Creating private tab");
|
||||
win.gBrowser.selectedTab = win.gBrowser.addTab();
|
||||
|
||||
info("Loading test page: " + testPageURL);
|
||||
win.gBrowser.selectedBrowser.loadURI(testPageURL);
|
||||
await BrowserTestUtils.browserLoaded(win.gBrowser.selectedBrowser);
|
||||
|
||||
registerPopupEventHandler("popupshowing", function () {
|
||||
ok(false, "Shouldn't show a popup this time");
|
||||
}, win);
|
||||
|
@ -28,7 +21,12 @@ add_task(async function testPermissionUnknownInPrivateWindow() {
|
|||
ok(false, "Shouldn't show a popup this time");
|
||||
}, win);
|
||||
|
||||
await promiseMessage(false, win.gBrowser);
|
||||
info("Creating private tab");
|
||||
win.gBrowser.selectedTab = win.gBrowser.addTab();
|
||||
|
||||
info("Loading test page: " + testPageURL);
|
||||
win.gBrowser.selectedBrowser.loadURI(testPageURL);
|
||||
await waitForMessage(false, win.gBrowser);
|
||||
|
||||
is(getPermission(testPageURL, "persistent-storage"),
|
||||
Components.interfaces.nsIPermissionManager.UNKNOWN_ACTION,
|
||||
|
|
|
@ -77,18 +77,32 @@ function dismissNotification(popup, win)
|
|||
});
|
||||
}
|
||||
|
||||
function promiseMessage(aMessage, browser)
|
||||
function waitForMessage(aMessage, browser)
|
||||
{
|
||||
return ContentTask.spawn(browser.selectedBrowser, aMessage, async function(aMessage) {
|
||||
await new Promise((resolve, reject) => {
|
||||
content.addEventListener("message", function(event) {
|
||||
is(event.data, aMessage, "received " + aMessage);
|
||||
if (event.data == aMessage)
|
||||
resolve();
|
||||
else
|
||||
reject();
|
||||
}, {once: true});
|
||||
return new Promise((resolve, reject) => {
|
||||
function contentScript() {
|
||||
addEventListener("message", function(event) {
|
||||
sendAsyncMessage("testLocal:persisted",
|
||||
{persisted: event.data});
|
||||
}, {once: true}, true);
|
||||
}
|
||||
|
||||
let script = "data:,(" + contentScript.toString() + ")();";
|
||||
|
||||
let mm = browser.selectedBrowser.messageManager;
|
||||
|
||||
mm.addMessageListener("testLocal:persisted", function listener(msg) {
|
||||
mm.removeMessageListener("testLocal:persisted", listener);
|
||||
mm.removeDelayedFrameScript(script);
|
||||
is(msg.data.persisted, aMessage, "received " + aMessage);
|
||||
if (msg.data.persisted == aMessage) {
|
||||
resolve();
|
||||
} else {
|
||||
reject();
|
||||
}
|
||||
});
|
||||
|
||||
mm.loadFrameScript(script, true);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче