"use strict"; const { AboutNewTab } = ChromeUtils.import( "resource:///modules/AboutNewTab.jsm" ); registerCleanupFunction(() => { AboutNewTab.resetNewTabURL(); }); function nextChangeNotificationPromise(aNewURL, testMessage) { return TestUtils.topicObserved( "newtab-url-changed", function observer(aSubject, aData) { Assert.equal(aData, aNewURL, testMessage); return true; } ); } /* * Tests that the default newtab page is always returned when one types "about:newtab" in the URL bar, * even when overridden. */ add_task(async function redirector_ignores_override() { let overrides = ["chrome://browser/content/aboutRobots.xhtml", "about:home"]; for (let overrideURL of overrides) { let notificationPromise = nextChangeNotificationPromise( overrideURL, `newtab page now points to ${overrideURL}` ); AboutNewTab.newTabURL = overrideURL; await notificationPromise; Assert.ok(AboutNewTab.newTabURLOverridden, "url has been overridden"); let tabOptions = { gBrowser, url: "about:newtab", }; /* * Simulate typing "about:newtab" in the url bar. * * Bug 1240169 - We expect the redirector to lead the user to "about:newtab", the default URL, * due to invoking AboutRedirector. A user interacting with the chrome otherwise would lead * to the overriding URLs. */ await BrowserTestUtils.withNewTab(tabOptions, async browser => { await SpecialPowers.spawn(browser, [], async () => { Assert.equal(content.location.href, "about:newtab", "Got right URL"); Assert.equal( content.document.location.href, "about:newtab", "Got right URL" ); Assert.notEqual( content.document.nodePrincipal, Services.scriptSecurityManager.getSystemPrincipal(), "activity stream principal should not match systemPrincipal" ); }); }); } }); /* * Tests loading an overridden newtab page by simulating opening a newtab page from chrome */ add_task(async function override_loads_in_browser() { let overrides = [ "chrome://browser/content/aboutRobots.xhtml", "about:home", " about:home", ]; for (let overrideURL of overrides) { let notificationPromise = nextChangeNotificationPromise( overrideURL.trim(), `newtab page now points to ${overrideURL}` ); AboutNewTab.newTabURL = overrideURL; await notificationPromise; Assert.ok(AboutNewTab.newTabURLOverridden, "url has been overridden"); // simulate a newtab open as a user would BrowserOpenTab(); let browser = gBrowser.selectedBrowser; await BrowserTestUtils.browserLoaded(browser); await SpecialPowers.spawn(browser, [{ url: overrideURL }], async args => { Assert.equal(content.location.href, args.url.trim(), "Got right URL"); Assert.equal( content.document.location.href, args.url.trim(), "Got right URL" ); }); BrowserTestUtils.removeTab(gBrowser.selectedTab); } }); /* * Tests edge cases when someone overrides the newtabpage with whitespace */ add_task(async function override_blank_loads_in_browser() { let overrides = ["", " ", "\n\t", " about:blank"]; for (let overrideURL of overrides) { let notificationPromise = nextChangeNotificationPromise( "about:blank", "newtab page now points to about:blank" ); AboutNewTab.newTabURL = overrideURL; await notificationPromise; Assert.ok(AboutNewTab.newTabURLOverridden, "url has been overridden"); // simulate a newtab open as a user would BrowserOpenTab(); let browser = gBrowser.selectedBrowser; await BrowserTestUtils.browserLoaded(browser); await SpecialPowers.spawn(browser, [], async () => { Assert.equal(content.location.href, "about:blank", "Got right URL"); Assert.equal( content.document.location.href, "about:blank", "Got right URL" ); }); BrowserTestUtils.removeTab(gBrowser.selectedTab); } });