/* Any copyright is dedicated to the Public Domain. * http://creativecommons.org/publicdomain/zero/1.0/ */ "use strict"; /** * Check that navigating through both the URL bar and using in-page hash- or ref- * based links and back or forward navigation updates the URL bar and identity block correctly. */ add_task(async function () { await SpecialPowers.pushPrefEnv({ set: [["browser.navigation.requireUserInteraction", false]], }); let baseURL = `${TEST_BASE_URL}dummy_page.html`; let url = baseURL + "#foo"; await BrowserTestUtils.withNewTab( { gBrowser, url }, async function (browser) { let identityBox = document.getElementById("identity-box"); let expectedURL = url; let verifyURLBarState = testType => { is( gURLBar.value, expectedURL, "URL bar visible value should be correct " + testType ); is( gURLBar.untrimmedValue, expectedURL, "URL bar value should be correct " + testType ); ok( identityBox.classList.contains("verifiedDomain"), "Identity box should know we're doing SSL " + testType ); is( gURLBar.getAttribute("pageproxystate"), "valid", "URL bar is in valid page proxy state" ); }; verifyURLBarState("at the beginning"); let locationChangePromise; let resolveLocationChangePromise; let expectURL = urlTemp => { expectedURL = urlTemp; locationChangePromise = new Promise( r => (resolveLocationChangePromise = r) ); }; let wpl = { onLocationChange(unused, unused2, location) { is(location.spec, expectedURL, "Got the expected URL"); resolveLocationChangePromise(); }, }; gBrowser.addProgressListener(wpl); expectURL(baseURL + "#foo"); gURLBar.select(); EventUtils.sendKey("return"); await locationChangePromise; verifyURLBarState("after hitting enter on the same URL a second time"); expectURL(baseURL + "#bar"); gURLBar.value = expectedURL; gURLBar.select(); EventUtils.sendKey("return"); await locationChangePromise; verifyURLBarState("after a URL bar hash navigation"); expectURL(baseURL + "#foo"); await SpecialPowers.spawn(browser, [], function () { let a = content.document.createElement("a"); a.href = "#foo"; a.textContent = "Foo Link"; content.document.body.appendChild(a); a.click(); }); await locationChangePromise; verifyURLBarState("after a page link hash navigation"); expectURL(baseURL + "#bar"); gBrowser.goBack(); await locationChangePromise; verifyURLBarState("after going back"); expectURL(baseURL + "#foo"); gBrowser.goForward(); await locationChangePromise; verifyURLBarState("after going forward"); expectURL(baseURL + "#foo"); gURLBar.select(); EventUtils.sendKey("return"); await locationChangePromise; verifyURLBarState("after hitting enter on the same URL"); gBrowser.removeProgressListener(wpl); } ); }); /** * Check that initial secure loads that swap remoteness * get the correct page icon when finished. */ add_task(async function () { // Ensure there's no preloaded newtab browser, since that'll not fire a load event. NewTabPagePreloading.removePreloadedBrowser(window); let tab = await BrowserTestUtils.openNewForegroundTab( gBrowser, "about:newtab" ); let url = `${TEST_BASE_URL}dummy_page.html#foo`; gURLBar.value = url; gURLBar.select(); EventUtils.sendKey("return"); await BrowserTestUtils.browserLoaded(tab.linkedBrowser); is( gURLBar.value, url, "URL bar visible value should be correct when the page loads from about:newtab" ); is( gURLBar.untrimmedValue, url, "URL bar value should be correct when the page loads from about:newtab" ); let identityBox = document.getElementById("identity-box"); ok( identityBox.classList.contains("verifiedDomain"), "Identity box should know we're doing SSL when the page loads from about:newtab" ); is( gURLBar.getAttribute("pageproxystate"), "valid", "URL bar is in valid page proxy state when SSL page with hash loads from about:newtab" ); BrowserTestUtils.removeTab(tab); });