Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* 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 { Observers } = ChromeUtils.importESModule(
);
// Since we show the brand name (Nightly, Beta) in the notification
// we need to fetch the localization so the test doesn't break when going
// through the trains
const l10n = new Localization(["branding/brand.ftl", "browser/accounts.ftl"]);
// URL that opens up when a user clicks the "close tab" notification
const NOTIFICATION_CLICKED_URL = "about:firefoxview#recentlyclosed";
add_task(async function test_closetab_notification() {
const URL_TO_CLOSE = "about:mozilla";
let payload = [
{
urls: [URL_TO_CLOSE],
sender: {
deviceName: "device-1",
},
},
];
info("Test verify receiving a close tab command will show a notification");
// Get the expected notification text we'll show the user
const [expectedTitle, expectedBody] = await l10n.formatValues([
{
id: "account-tabs-closed-remotely",
args: { closedCount: 1 },
},
{ id: "account-view-recently-closed-tabs" },
]);
// This will also immediately invoke the "alertclickcallback" in addition to
// the usual alertshow and alertfinished
setupMockAlertsService({
title: expectedTitle,
body: expectedBody,
});
// Open a tab with the same url we'll be expecting from the close tab command payload
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, URL_TO_CLOSE);
let tabClosedPromise = BrowserTestUtils.waitForTabClosing(tab);
let waitForTabPromise = BrowserTestUtils.waitForNewTab(gBrowser);
// Send the notify, which will kick off the closing of the tab and notification
Observers.notify("fxaccounts:commands:close-uri", payload);
Assert.ok("Close notification sent");
// Wait for the tab to close
await tabClosedPromise;
Assert.ok("Tab successfully closed");
// Test the tab that opened for "clicking" the notification shows
// the recently closed list
let notifTab = await waitForTabPromise;
Assert.equal(
notifTab.linkedBrowser.currentURI.spec,
NOTIFICATION_CLICKED_URL
);
// Cleanup the tab
BrowserTestUtils.removeTab(notifTab);
});
add_task(async function test_closetab_multiple_urls_notification() {
const URLS_TO_CLOSE = ["about:mozilla", "about:about"];
let payload = [
{
urls: URLS_TO_CLOSE,
sender: {
deviceName: "device-1",
},
},
];
info(
"Test verify receiving multiple close tabs command will show the proper notification"
);
// Get the expected notification text we'll show the user
const [expectedTitle, expectedBody] = await l10n.formatValues([
{
id: "account-tabs-closed-remotely",
args: { closedCount: 2 },
},
{ id: "account-view-recently-closed-tabs" },
]);
// This will also immediately invoke the "alertclickcallback" in addition to
// the usual alertshow and alertfinished
setupMockAlertsService({
title: expectedTitle,
body: expectedBody,
});
// Open multiple tabs to test we can close both and have the correct
// notification text
let tab1 = await BrowserTestUtils.openNewForegroundTab(
gBrowser,
URLS_TO_CLOSE[0]
);
let tab2 = await BrowserTestUtils.openNewForegroundTab(
gBrowser,
URLS_TO_CLOSE[1]
);
// We want to make sure multiple tabs were closed
let tabClosedPromise = Promise.all([
BrowserTestUtils.waitForTabClosing(tab1),
BrowserTestUtils.waitForTabClosing(tab2),
]);
let waitForTabPromise = BrowserTestUtils.waitForNewTab(gBrowser);
// Send the notify, which will kick off the closing of the tab and notification
Observers.notify("fxaccounts:commands:close-uri", payload);
Assert.ok("Close notification sent");
await tabClosedPromise;
Assert.ok("Multiple tabs successfully closed");
// Test the click after the notification
let notifTab = await waitForTabPromise;
Assert.equal(
notifTab.linkedBrowser.currentURI.spec,
NOTIFICATION_CLICKED_URL
);
// Cleanup the tab
BrowserTestUtils.removeTab(notifTab);
});