forked from mirrors/gecko-dev
		
	# ignore-this-changeset Differential Revision: https://phabricator.services.mozilla.com/D36041 --HG-- extra : source : 96b3895a3b2aa2fcb064c85ec5857b7216884556
		
			
				
	
	
		
			64 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
	
		
			1.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/. */
 | 
						|
 | 
						|
/*
 | 
						|
 * "TabClose" event is possibly used for closing related tabs of the current.
 | 
						|
 * "removeTab" method should work correctly even if the number of tabs are
 | 
						|
 * changed while "TabClose" event.
 | 
						|
 */
 | 
						|
 | 
						|
var count = 0;
 | 
						|
const URIS = [
 | 
						|
  "about:config",
 | 
						|
  "about:plugins",
 | 
						|
  "about:buildconfig",
 | 
						|
  "data:text/html,<title>OK</title>",
 | 
						|
];
 | 
						|
 | 
						|
function test() {
 | 
						|
  waitForExplicitFinish();
 | 
						|
  URIS.forEach(addTab);
 | 
						|
}
 | 
						|
 | 
						|
function addTab(aURI, aIndex) {
 | 
						|
  var tab = BrowserTestUtils.addTab(gBrowser, aURI);
 | 
						|
  if (aIndex == 0) {
 | 
						|
    gBrowser.removeTab(gBrowser.tabs[0], { skipPermitUnload: true });
 | 
						|
  }
 | 
						|
 | 
						|
  BrowserTestUtils.browserLoaded(tab.linkedBrowser).then(() => {
 | 
						|
    if (++count == URIS.length) {
 | 
						|
      executeSoon(doTabsTest);
 | 
						|
    }
 | 
						|
  });
 | 
						|
}
 | 
						|
 | 
						|
function doTabsTest() {
 | 
						|
  is(gBrowser.tabs.length, URIS.length, "Correctly opened all expected tabs");
 | 
						|
 | 
						|
  // sample of "close related tabs" feature
 | 
						|
  gBrowser.tabContainer.addEventListener(
 | 
						|
    "TabClose",
 | 
						|
    function(event) {
 | 
						|
      var closedTab = event.originalTarget;
 | 
						|
      var scheme = closedTab.linkedBrowser.currentURI.scheme;
 | 
						|
      Array.from(gBrowser.tabs).forEach(function(aTab) {
 | 
						|
        if (
 | 
						|
          aTab != closedTab &&
 | 
						|
          aTab.linkedBrowser.currentURI.scheme == scheme
 | 
						|
        ) {
 | 
						|
          gBrowser.removeTab(aTab, { skipPermitUnload: true });
 | 
						|
        }
 | 
						|
      });
 | 
						|
    },
 | 
						|
    { capture: true, once: true }
 | 
						|
  );
 | 
						|
 | 
						|
  gBrowser.removeTab(gBrowser.tabs[0], { skipPermitUnload: true });
 | 
						|
  is(gBrowser.tabs.length, 1, "Related tabs are not closed unexpectedly");
 | 
						|
 | 
						|
  BrowserTestUtils.addTab(gBrowser, "about:blank");
 | 
						|
  gBrowser.removeTab(gBrowser.tabs[0], { skipPermitUnload: true });
 | 
						|
  finish();
 | 
						|
}
 |