diff options
Diffstat (limited to 'comm/mail/components/im/test/browser/browser_browserRequest.js')
-rw-r--r-- | comm/mail/components/im/test/browser/browser_browserRequest.js | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/comm/mail/components/im/test/browser/browser_browserRequest.js b/comm/mail/components/im/test/browser/browser_browserRequest.js new file mode 100644 index 0000000000..7ffdb1c725 --- /dev/null +++ b/comm/mail/components/im/test/browser/browser_browserRequest.js @@ -0,0 +1,112 @@ +/* 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/. */ + +const { InteractiveBrowser, CancelledError } = ChromeUtils.importESModule( + "resource:///modules/InteractiveBrowser.sys.mjs" +); +const kBaseWindowUri = "chrome://messenger/content/browserRequest.xhtml"; + +add_task(async function testBrowserRequestObserverNotification() { + const windowPromise = BrowserTestUtils.domWindowOpenedAndLoaded( + undefined, + win => win.document.documentURI === kBaseWindowUri + ); + let notifyLoaded; + const loadedPromise = new Promise(resolve => { + notifyLoaded = resolve; + }); + const cancelledPromise = new Promise(resolve => { + Services.obs.notifyObservers( + { + promptText: "", + iconURI: "", + url: "about:blank", + cancelled() { + resolve(); + }, + loaded(window, webProgress) { + ok(webProgress); + notifyLoaded(window); + }, + }, + "browser-request" + ); + }); + + const requestWindow = await windowPromise; + const loadedWindow = await loadedPromise; + ok(loadedWindow); + is(loadedWindow.document.documentURI, kBaseWindowUri); + + const closeEvent = new Event("close"); + requestWindow.dispatchEvent(closeEvent); + await BrowserTestUtils.closeWindow(requestWindow); + + await cancelledPromise; +}); + +add_task(async function testWaitForRedirect() { + const initialUrl = "about:blank"; + const promptText = "just testing"; + const completionUrl = InteractiveBrowser.COMPLETION_URL + "/done?info=foo"; + const windowPromise = BrowserTestUtils.domWindowOpenedAndLoaded( + undefined, + win => win.document.documentURI === kBaseWindowUri + ); + const request = InteractiveBrowser.waitForRedirect(initialUrl, promptText); + const requestWindow = await windowPromise; + is(requestWindow.document.title, promptText, "set window title"); + + const closedWindow = BrowserTestUtils.domWindowClosed(requestWindow); + const browser = requestWindow.document.getElementById("requestFrame"); + await BrowserTestUtils.browserLoaded(browser); + BrowserTestUtils.loadURIString(browser, completionUrl); + const result = await request; + is(result, completionUrl, "finished with correct URL"); + + await closedWindow; +}); + +add_task(async function testCancelWaitForRedirect() { + const initialUrl = "about:blank"; + const promptText = "just testing"; + const windowPromise = BrowserTestUtils.domWindowOpenedAndLoaded( + undefined, + win => win.document.documentURI === kBaseWindowUri + ); + const request = InteractiveBrowser.waitForRedirect(initialUrl, promptText); + const requestWindow = await windowPromise; + is(requestWindow.document.title, promptText, "set window title"); + + await new Promise(resolve => setTimeout(resolve)); + + const closeEvent = new Event("close"); + requestWindow.dispatchEvent(closeEvent); + await BrowserTestUtils.closeWindow(requestWindow); + + try { + await request; + ok(false, "request should be rejected"); + } catch (error) { + ok(error instanceof CancelledError, "request was rejected"); + } +}); + +add_task(async function testAlreadyComplete() { + const completionUrl = InteractiveBrowser.COMPLETION_URL + "/done?info=foo"; + const promptText = "just testing"; + const windowPromise = BrowserTestUtils.domWindowOpenedAndLoaded( + undefined, + win => win.document.documentURI === kBaseWindowUri + ); + const request = InteractiveBrowser.waitForRedirect(completionUrl, promptText); + const requestWindow = await windowPromise; + is(requestWindow.document.title, promptText, "set window title"); + + const closedWindow = BrowserTestUtils.domWindowClosed(requestWindow); + const result = await request; + is(result, completionUrl, "finished with correct URL"); + + await closedWindow; +}); |