browser_393716.js (2755B)
1 /* Any copyright is dedicated to the Public Domain. 2 * http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 "use strict"; 5 6 const URL = "about:config"; 7 8 add_setup(async function () { 9 // Make sure that the field of which we restore the state is visible on load. 10 await SpecialPowers.pushPrefEnv({ 11 set: [["browser.aboutConfig.showWarning", false]], 12 }); 13 }); 14 15 /** 16 * Bug 393716 - Basic tests for getTabState(), setTabState(), and duplicateTab(). 17 */ 18 add_task(async function test_set_tabstate() { 19 let key = "Unique key: " + Date.now(); 20 let value = "Unique value: " + Math.random(); 21 22 // create a new tab 23 let tab = BrowserTestUtils.addTab(gBrowser, URL); 24 ss.setCustomTabValue(tab, key, value); 25 await promiseBrowserLoaded(tab.linkedBrowser); 26 27 // get the tab's state 28 await TabStateFlusher.flush(tab.linkedBrowser); 29 let state = ss.getTabState(tab); 30 ok(state, "get the tab's state"); 31 32 // verify the tab state's integrity 33 state = JSON.parse(state); 34 ok( 35 state instanceof Object && 36 state.entries instanceof Array && 37 !!state.entries.length, 38 "state object seems valid" 39 ); 40 ok( 41 state.entries.length == 1 && state.entries[0].url == URL, 42 "Got the expected state object (test URL)" 43 ); 44 ok( 45 state.extData && state.extData[key] == value, 46 "Got the expected state object (test manually set tab value)" 47 ); 48 49 // clean up 50 gBrowser.removeTab(tab); 51 }); 52 53 add_task(async function test_set_tabstate_and_duplicate() { 54 let key2 = "key2"; 55 let value2 = "Value " + Math.random(); 56 let value3 = "Another value: " + Date.now(); 57 let state = { 58 entries: [{ url: URL, triggeringPrincipal_base64 }], 59 extData: { key2: value2 }, 60 }; 61 62 // create a new tab 63 let tab = BrowserTestUtils.addTab(gBrowser); 64 // set the tab's state 65 ss.setTabState(tab, JSON.stringify(state)); 66 await promiseBrowserLoaded(tab.linkedBrowser); 67 68 // verify the correctness of the restored tab 69 ok( 70 ss.getCustomTabValue(tab, key2) == value2 && 71 tab.linkedBrowser.currentURI.spec == URL, 72 "the tab's state was correctly restored" 73 ); 74 75 // add text data 76 await setPropertyOfFormField( 77 tab.linkedBrowser, 78 "#about-config-search", 79 "value", 80 value3 81 ); 82 83 // duplicate the tab 84 let tab2 = ss.duplicateTab(window, tab); 85 await promiseTabRestored(tab2); 86 87 // verify the correctness of the duplicated tab 88 ok( 89 ss.getCustomTabValue(tab2, key2) == value2 && 90 tab2.linkedBrowser.currentURI.spec == URL, 91 "correctly duplicated the tab's state" 92 ); 93 let textbox = await getPropertyOfFormField( 94 tab2.linkedBrowser, 95 "#about-config-search", 96 "value" 97 ); 98 is(textbox, value3, "also duplicated text data"); 99 100 // clean up 101 gBrowser.removeTab(tab2); 102 gBrowser.removeTab(tab); 103 });