diff --git a/browser/base/content/test/general/browser.ini b/browser/base/content/test/general/browser.ini index 97028bfce061..520dbf85fc8d 100644 --- a/browser/base/content/test/general/browser.ini +++ b/browser/base/content/test/general/browser.ini @@ -320,6 +320,7 @@ skip-if = e10s # Bug 863514 - no gesture support. skip-if = buildapp == 'mulet' [browser_identity_UI.js] [browser_insecureLoginForms.js] +[browser_invalid_uri_back_forward_manipulation.js] [browser_keywordBookmarklets.js] [browser_keywordSearch.js] [browser_keywordSearch_postData.js] diff --git a/browser/base/content/test/general/browser_invalid_uri_back_forward_manipulation.js b/browser/base/content/test/general/browser_invalid_uri_back_forward_manipulation.js new file mode 100644 index 000000000000..f3ea7a3ed136 --- /dev/null +++ b/browser/base/content/test/general/browser_invalid_uri_back_forward_manipulation.js @@ -0,0 +1,34 @@ +"use strict"; + + +/** + * Verify that loading an invalid URI does not clobber a previously-loaded page's history + * entry, but that the invalid URI gets its own history entry instead. We're checking this + * using nsIWebNavigation's canGoBack, as well as actually going back and then checking + * canGoForward. + */ +add_task(function* checkBackFromInvalidURI() { + yield pushPrefs(["keyword.enabled", false]); + let tab = yield BrowserTestUtils.openNewForegroundTab(gBrowser, "about:robots", true); + gURLBar.value = "::2600"; + gURLBar.focus(); + + let promiseErrorPageLoaded = BrowserTestUtils.waitForEvent(tab.linkedBrowser, "DOMContentLoaded"); + EventUtils.synthesizeKey("VK_RETURN", {}); + yield promiseErrorPageLoaded; + + ok(gBrowser.webNavigation.canGoBack, "Should be able to go back"); + if (gBrowser.webNavigation.canGoBack) { + // Can't use DOMContentLoaded here because the page is bfcached. Can't use pageshow for + // the error page because it doesn't seem to fire for those. + let promiseOtherPageLoaded = BrowserTestUtils.waitForEvent(tab.linkedBrowser, "pageshow", false, + // Be paranoid we *are* actually seeing this other page load, not some kind of race + // for if/when we do start firing pageshow for the error page... + function(e) { return gBrowser.currentURI.spec == "about:robots" } + ); + gBrowser.goBack(); + yield promiseOtherPageLoaded; + ok(gBrowser.webNavigation.canGoForward, "Should be able to go forward from previous page."); + } + yield BrowserTestUtils.removeTab(tab); +});