browser_backforward_userinteraction_systemprincipal.js (2875B)
1 /* Any copyright is dedicated to the Public Domain. 2 http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 "use strict"; 5 6 const TEST_PAGE = 7 getRootDirectory(gTestPath).replace( 8 "chrome://mochitests/content", 9 "https://example.com" 10 ) + "dummy_page.html"; 11 12 async function runTest(privilegedLoad) { 13 for (let requireUserInteraction of [true, false]) { 14 Services.prefs.setBoolPref( 15 "browser.navigation.requireUserInteraction", 16 requireUserInteraction 17 ); 18 19 let tab = await BrowserTestUtils.openNewForegroundTab( 20 gBrowser, 21 TEST_PAGE + "?entry=0" 22 ); 23 let browser = tab.linkedBrowser; 24 25 // Add some user interaction to the initial entry 26 await SpecialPowers.spawn(browser, [], () => { 27 content.document.notifyUserGestureActivation(); 28 }); 29 30 assertBackForwardState(false, false); 31 32 await followLink(TEST_PAGE + "?entry=1"); 33 34 assertBackForwardState(true, false); 35 36 await followLink(TEST_PAGE + "?entry=2"); 37 38 assertBackForwardState(true, false); 39 40 await followLink(TEST_PAGE + "?entry=3"); 41 42 assertBackForwardState(true, false); 43 44 // Entry 4 will be added through a user action in browser chrome, 45 // giving user interaction to entry 3. Entry 4 should not gain automatic 46 // user interaction. 47 await privilegedLoad(TEST_PAGE + "?entry=4"); 48 49 assertBackForwardState(true, false); 50 51 await followLink(TEST_PAGE + "?entry=5"); 52 53 assertBackForwardState(true, false); 54 55 if (!requireUserInteraction) { 56 await goBack(TEST_PAGE + "?entry=4"); 57 } 58 await goBack(TEST_PAGE + "?entry=3"); 59 60 if (!requireUserInteraction) { 61 await goBack(TEST_PAGE + "?entry=2"); 62 await goBack(TEST_PAGE + "?entry=1"); 63 } 64 65 assertBackForwardState(true, true); 66 67 await goBack(TEST_PAGE + "?entry=0"); 68 69 assertBackForwardState(false, true); 70 71 if (!requireUserInteraction) { 72 await goForward(TEST_PAGE + "?entry=1"); 73 await goForward(TEST_PAGE + "?entry=2"); 74 } 75 76 await goForward(TEST_PAGE + "?entry=3"); 77 78 assertBackForwardState(true, true); 79 80 if (!requireUserInteraction) { 81 await goForward(TEST_PAGE + "?entry=4"); 82 } 83 84 await goForward(TEST_PAGE + "?entry=5"); 85 86 assertBackForwardState(true, false); 87 88 BrowserTestUtils.removeTab(tab); 89 } 90 91 Services.prefs.clearUserPref("browser.navigation.requireUserInteraction"); 92 } 93 94 // Test that we add a user interaction flag to the previous site when loading 95 // a new site from user interaction with privileged UI, e.g. through the 96 // URL bar. 97 add_task(async function test_urlBar() { 98 await runTest(async function (url) { 99 info(`Loading ${url} via the URL bar.`); 100 let browser = gBrowser.selectedBrowser; 101 let loaded = BrowserTestUtils.browserLoaded(browser, false, url); 102 gURLBar.focus(); 103 gURLBar.value = url; 104 gURLBar.goButton.click(); 105 await loaded; 106 }); 107 });