mirror of
				https://github.com/mozilla/gecko-dev.git
				synced 2025-11-04 10:18:41 +02:00 
			
		
		
		
	This is generally pretty straightforward, and rewrites nearly all calls. It skips the ones that it can detect using frame script globals like `sendAsyncMessage`, though. Differential Revision: https://phabricator.services.mozilla.com/D53740 --HG-- extra : moz-landing-system : lando
		
			
				
	
	
		
			84 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/* This Source Code Form is subject to the terms of the Mozilla Public
 | 
						|
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 | 
						|
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 | 
						|
 | 
						|
function test() {
 | 
						|
  /** Test for Bug 447951 **/
 | 
						|
 | 
						|
  waitForExplicitFinish();
 | 
						|
  const baseURL =
 | 
						|
    "http://mochi.test:8888/browser/" +
 | 
						|
    "browser/components/sessionstore/test/browser_447951_sample.html#";
 | 
						|
 | 
						|
  // Make sure the functionality added in bug 943339 doesn't affect the results
 | 
						|
  Services.prefs.setIntPref("browser.sessionstore.max_serialize_back", -1);
 | 
						|
  Services.prefs.setIntPref("browser.sessionstore.max_serialize_forward", -1);
 | 
						|
  registerCleanupFunction(function() {
 | 
						|
    Services.prefs.clearUserPref("browser.sessionstore.max_serialize_back");
 | 
						|
    Services.prefs.clearUserPref("browser.sessionstore.max_serialize_forward");
 | 
						|
  });
 | 
						|
 | 
						|
  let tab = BrowserTestUtils.addTab(gBrowser);
 | 
						|
  promiseBrowserLoaded(tab.linkedBrowser).then(() => {
 | 
						|
    let tabState = { entries: [] };
 | 
						|
    let max_entries = Services.prefs.getIntPref(
 | 
						|
      "browser.sessionhistory.max_entries"
 | 
						|
    );
 | 
						|
    for (let i = 0; i < max_entries; i++) {
 | 
						|
      tabState.entries.push({ url: baseURL + i, triggeringPrincipal_base64 });
 | 
						|
    }
 | 
						|
 | 
						|
    promiseTabState(tab, tabState)
 | 
						|
      .then(() => {
 | 
						|
        return TabStateFlusher.flush(tab.linkedBrowser);
 | 
						|
      })
 | 
						|
      .then(() => {
 | 
						|
        tabState = JSON.parse(ss.getTabState(tab));
 | 
						|
        is(
 | 
						|
          tabState.entries.length,
 | 
						|
          max_entries,
 | 
						|
          "session history filled to the limit"
 | 
						|
        );
 | 
						|
        is(tabState.entries[0].url, baseURL + 0, "... but not more");
 | 
						|
 | 
						|
        // visit yet another anchor (appending it to session history)
 | 
						|
        SpecialPowers.spawn(tab.linkedBrowser, [], function() {
 | 
						|
          content.window.document.querySelector("a").click();
 | 
						|
        }).then(flushAndCheck);
 | 
						|
 | 
						|
        function flushAndCheck() {
 | 
						|
          TabStateFlusher.flush(tab.linkedBrowser).then(check);
 | 
						|
        }
 | 
						|
 | 
						|
        function check() {
 | 
						|
          tabState = JSON.parse(ss.getTabState(tab));
 | 
						|
          if (tab.linkedBrowser.currentURI.spec != baseURL + "end") {
 | 
						|
            // It may take a few passes through the event loop before we
 | 
						|
            // get the right URL.
 | 
						|
            executeSoon(flushAndCheck);
 | 
						|
            return;
 | 
						|
          }
 | 
						|
 | 
						|
          is(
 | 
						|
            tab.linkedBrowser.currentURI.spec,
 | 
						|
            baseURL + "end",
 | 
						|
            "the new anchor was loaded"
 | 
						|
          );
 | 
						|
          is(
 | 
						|
            tabState.entries[tabState.entries.length - 1].url,
 | 
						|
            baseURL + "end",
 | 
						|
            "... and ignored"
 | 
						|
          );
 | 
						|
          is(
 | 
						|
            tabState.entries[0].url,
 | 
						|
            baseURL + 1,
 | 
						|
            "... and the first item was removed"
 | 
						|
          );
 | 
						|
 | 
						|
          // clean up
 | 
						|
          gBrowser.removeTab(tab);
 | 
						|
          finish();
 | 
						|
        }
 | 
						|
      });
 | 
						|
  });
 | 
						|
}
 |