browser_uriFixupIntegration.js (3056B)
1 /* Any copyright is dedicated to the Public Domain. 2 * http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 "use strict"; 5 6 const { UrlbarTestUtils } = ChromeUtils.importESModule( 7 "resource://testing-common/UrlbarTestUtils.sys.mjs" 8 ); 9 const { SearchTestUtils } = ChromeUtils.importESModule( 10 "resource://testing-common/SearchTestUtils.sys.mjs" 11 ); 12 13 SearchTestUtils.init(this); 14 15 const kSearchEngineID = "browser_urifixup_search_engine"; 16 const kSearchEngineURL = "https://example.com/?search={searchTerms}"; 17 const kPrivateSearchEngineID = "browser_urifixup_search_engine_private"; 18 const kPrivateSearchEngineURL = "https://example.com/?private={searchTerms}"; 19 20 add_setup(async function () { 21 await SpecialPowers.pushPrefEnv({ 22 set: [ 23 ["browser.search.separatePrivateDefault.ui.enabled", true], 24 ["browser.search.separatePrivateDefault", true], 25 ], 26 }); 27 28 // Add new fake search engines. 29 await SearchTestUtils.installSearchExtension( 30 { 31 name: kSearchEngineID, 32 search_url: "https://example.com/", 33 search_url_get_params: "search={searchTerms}", 34 }, 35 { setAsDefault: true } 36 ); 37 38 await SearchTestUtils.installSearchExtension( 39 { 40 name: kPrivateSearchEngineID, 41 search_url: "https://example.com/", 42 search_url_get_params: "private={searchTerms}", 43 }, 44 { setAsDefaultPrivate: true } 45 ); 46 }); 47 48 add_task(async function test() { 49 // Test both directly setting a value and pressing enter, or setting the 50 // value through input events, like the user would do. 51 const setValueFns = [ 52 (value, win) => { 53 win.gURLBar.value = value; 54 }, 55 (value, win) => { 56 return UrlbarTestUtils.promiseAutocompleteResultPopup({ 57 window: win, 58 waitForFocus: SimpleTest.waitForFocus, 59 value, 60 }); 61 }, 62 ]; 63 64 for (let value of ["foo bar", "brokenprotocol:somethingelse"]) { 65 for (let setValueFn of setValueFns) { 66 for (let inPrivateWindow of [false, true]) { 67 await do_test(value, setValueFn, inPrivateWindow); 68 } 69 } 70 } 71 }); 72 73 async function do_test(value, setValueFn, inPrivateWindow) { 74 info(`Search ${value} in a ${inPrivateWindow ? "private" : "normal"} window`); 75 let win = await BrowserTestUtils.openNewBrowserWindow({ 76 private: inPrivateWindow, 77 }); 78 // Enter search terms and start a search. 79 win.gURLBar.focus(); 80 await setValueFn(value, win); 81 82 EventUtils.synthesizeKey("KEY_Enter", {}, win); 83 84 // Check that we load the correct URL. 85 let escapedValue = encodeURIComponent(value).replace("%20", "+"); 86 let searchEngineUrl = inPrivateWindow 87 ? kPrivateSearchEngineURL 88 : kSearchEngineURL; 89 let expectedURL = searchEngineUrl.replace("{searchTerms}", escapedValue); 90 await BrowserTestUtils.browserLoaded( 91 win.gBrowser.selectedBrowser, 92 false, 93 expectedURL 94 ); 95 // There should be at least one test. 96 Assert.equal( 97 win.gBrowser.selectedBrowser.currentURI.spec, 98 expectedURL, 99 "New tab should have loaded with expected url." 100 ); 101 102 // Cleanup. 103 await BrowserTestUtils.closeWindow(win); 104 }