Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* Any copyright is dedicated to the Public Domain.
"use strict";
const { sinon } = ChromeUtils.importESModule(
);
const { MockRegistrar } = ChromeUtils.importESModule(
);
const BASE = getRootDirectory(gTestPath).replace(
);
const TEST_URL = BASE + "browser_shareurl.html";
const mockShareData = [
{
name: "Test",
menuItemTitle: "Sharing Service Test",
image:
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAKE" +
"lEQVR42u3NQQ0AAAgEoNP+nTWFDzcoQE1udQQCgUAgEAgEAsGTYAGjxAE/G/Q2tQAAAABJRU5ErkJggg==",
},
];
let shareUrlSpy = sinon.spy();
let openSharingPreferencesSpy = sinon.spy();
let getSharingProvidersSpy = sinon.spy();
const mockMacSharingService = MockRegistrar.register(
"@mozilla.org/widget/macsharingservice;1",
{
getSharingProviders(url) {
getSharingProvidersSpy(url);
return mockShareData;
},
shareUrl(name, url, title) {
shareUrlSpy(name, url, title);
},
openSharingPreferences() {
openSharingPreferencesSpy();
},
QueryInterface: ChromeUtils.generateQI([Ci.nsIMacSharingService]),
}
);
registerCleanupFunction(function () {
MockRegistrar.unregister(mockMacSharingService);
});
async function openShareTabPopup() {
await waitForOverflowButtonShown();
await document.getElementById("nav-bar").overflowable.show();
let shareTabButton = document.getElementById("share-tab-button");
shareTabButton.click();
let popupElement = document.getElementById("share-tab-popup");
await BrowserTestUtils.waitForPopupEvent(popupElement, "shown");
return { shareTabButton, popupElement };
}
async function closePopup(popupElement) {
let menuPopupClosedPromise = BrowserTestUtils.waitForPopupEvent(
popupElement,
"hidden"
);
popupElement.hidePopup();
await menuPopupClosedPromise;
ok(true, "Menu popup closed");
if (isOverflowOpen()) {
await hideOverflow();
}
}
add_setup(async function () {
CustomizableUI.addWidgetToArea(
"share-tab-button",
CustomizableUI.AREA_FIXED_OVERFLOW_PANEL
);
registerCleanupFunction(() => CustomizableUI.reset());
});
add_task(async function test_button_exists() {
await BrowserTestUtils.withNewTab(TEST_URL, async () => {
await waitForOverflowButtonShown();
await document.getElementById("nav-bar").overflowable.show();
let shareTabButton = document.getElementById("share-tab-button");
Assert.ok(shareTabButton, "Share tab button appears in Panel Menu");
await hideOverflow();
});
});
add_task(async function test_popup_opens_with_share_services() {
await BrowserTestUtils.withNewTab(TEST_URL, async () => {
getSharingProvidersSpy.resetHistory();
let { popupElement } = await openShareTabPopup();
Assert.ok(popupElement, "Popup element is open");
ok(getSharingProvidersSpy.calledOnce, "getSharingProviders was called");
let items = Array.from(popupElement.querySelectorAll("menuitem"));
is(
items.length,
3,
"There should be 3 menu items (copy link, share service, more)"
);
let shareButton = items.find(
item => item.getAttribute("label") == mockShareData[0].menuItemTitle
);
ok(
shareButton,
"Share button's label should match the service's menu item title"
);
is(
shareButton?.getAttribute("data-share-name"),
mockShareData[0].name,
"Share button's share-name value should match the service's name"
);
await closePopup(popupElement);
});
});
add_task(async function test_share_service_click() {
await BrowserTestUtils.withNewTab(TEST_URL, async () => {
shareUrlSpy.resetHistory();
let { popupElement } = await openShareTabPopup();
let items = Array.from(popupElement.querySelectorAll("menuitem"));
let shareButton = items.find(
item => item.getAttribute("label") == mockShareData[0].menuItemTitle
);
let menuPopupClosedPromise = BrowserTestUtils.waitForPopupEvent(
popupElement,
"hidden"
);
popupElement.activateItem(shareButton);
await menuPopupClosedPromise;
ok(shareUrlSpy.calledOnce, "shareUrl was called");
let [name, url, title] = shareUrlSpy.getCall(0).args;
is(name, mockShareData[0].name, "Shared correct service name");
is(url, TEST_URL, "Shared correct URL");
is(title, "Sharing URL", "Shared the correct title");
});
});
add_task(async function test_copy_link() {
await BrowserTestUtils.withNewTab(TEST_URL, async () => {
let { popupElement } = await openShareTabPopup();
let items = Array.from(popupElement.querySelectorAll("menuitem"));
let copyLinkItem = items.find(
item => item.getAttribute("data-l10n-id") == "menu-share-copy-link"
);
ok(copyLinkItem, "Copy link item exists");
let menuPopupClosedPromise = BrowserTestUtils.waitForPopupEvent(
popupElement,
"hidden"
);
await SimpleTest.promiseClipboardChange(TEST_URL, () =>
popupElement.activateItem(copyLinkItem)
);
await menuPopupClosedPromise;
ok(true, "Menu popup closed after button click");
});
});
add_task(async function test_more_button() {
await BrowserTestUtils.withNewTab(TEST_URL, async () => {
openSharingPreferencesSpy.resetHistory();
let { popupElement } = await openShareTabPopup();
let items = Array.from(popupElement.querySelectorAll("menuitem"));
let moreItem = items.find(
item => item.getAttribute("data-l10n-id") == "menu-share-more"
);
ok(moreItem, "More item exists");
let menuPopupClosedPromise = BrowserTestUtils.waitForPopupEvent(
popupElement,
"hidden"
);
popupElement.activateItem(moreItem);
await menuPopupClosedPromise;
ok(
openSharingPreferencesSpy.calledOnce,
"openSharingPreferences was called"
);
});
});