Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* Any copyright is dedicated to the Public Domain.
"use strict";
async function setupPrefs() {
sinon
.stub(DiscoveryStreamFeed.prototype, "generateFeedUrl")
.returns(
);
await setDefaultTopSites();
await SpecialPowers.pushPrefEnv({
set: [
[
"browser.newtabpage.activity-stream.discoverystream.config",
JSON.stringify({
api_key_pref: "extensions.pocket.oAuthConsumerKey",
collapsible: true,
enabled: true,
personalized: false,
}),
],
[
"browser.newtabpage.activity-stream.discoverystream.endpoints",
],
],
});
}
async function resetPrefs() {
// We set 5 prefs in setupPrefs, so we should reset 5 prefs.
// 1 popPrefEnv from pushPrefEnv
// and 4 popPrefEnv happen internally in setDefaultTopSites.
await SpecialPowers.popPrefEnv();
await SpecialPowers.popPrefEnv();
await SpecialPowers.popPrefEnv();
await SpecialPowers.popPrefEnv();
await SpecialPowers.popPrefEnv();
}
let initialHeight;
let initialWidth;
function setSize(width, height) {
initialHeight = window.innerHeight;
initialWidth = window.innerWidth;
let resizePromise = BrowserTestUtils.waitForEvent(window, "resize", false);
window.resizeTo(width, height);
return resizePromise;
}
function resetSize() {
let resizePromise = BrowserTestUtils.waitForEvent(window, "resize", false);
window.resizeTo(initialWidth, initialHeight);
return resizePromise;
}
add_task(async function test_newtab_last_LinkMenu() {
await setupPrefs();
// Open about:newtab without using the default load listener
let tab = await BrowserTestUtils.openNewForegroundTab(
gBrowser,
"about:newtab",
false
);
// Specially wait for potentially preloaded browsers
let browser = tab.linkedBrowser;
await waitForPreloaded(browser);
// Wait for React to render something
await BrowserTestUtils.waitForCondition(
() =>
SpecialPowers.spawn(
browser,
[],
() => content.document.getElementById("root").children.length
),
"Should render activity stream content"
);
// Set the window to a small enough size to trigger menus that might overflow.
await setSize(600, 450);
// Test context menu position for topsites.
await SpecialPowers.spawn(browser, [], async () => {
// Topsites might not be ready, so wait for the button.
await ContentTaskUtils.waitForCondition(
() =>
content.document.querySelector(
".top-site-outer:nth-child(2n) .context-menu-button"
),
"Wait for the Pocket card and button"
);
const topsiteOuter = content.document.querySelector(
".top-site-outer:nth-child(2n)"
);
const topsiteContextMenuButton = topsiteOuter.querySelector(
".context-menu-button"
);
topsiteContextMenuButton.click();
await ContentTaskUtils.waitForCondition(
() => topsiteOuter.classList.contains("active"),
"Wait for the menu to be active"
);
is(
content.window.scrollMaxX,
0,
"there should be no horizontal scroll bar"
);
});
// Test context menu position for topstories.
await SpecialPowers.spawn(browser, [], async () => {
// Pocket section might take a bit more time to load,
// so wait for the button to be ready.
await ContentTaskUtils.waitForCondition(
() =>
content.document.querySelector(
".ds-card:nth-child(1n) .context-menu-button"
),
"Wait for the Pocket card and button"
);
const dsCard = content.document.querySelector(".ds-card:nth-child(1n)");
const dsCarContextMenuButton = dsCard.querySelector(".context-menu-button");
dsCarContextMenuButton.click();
await ContentTaskUtils.waitForCondition(
() => dsCard.classList.contains("active"),
"Wait for the menu to be active"
);
is(
content.window.scrollMaxX,
0,
"there should be no horizontal scroll bar"
);
});
// Resetting the window size to what it was.
await resetSize();
// Resetting prefs we set for this test.
await resetPrefs();
BrowserTestUtils.removeTab(tab);
sinon.restore();
});