forked from mirrors/gecko-dev
		
	MozReview-Commit-ID: DnM6PylbNv --HG-- extra : rebase_source : c5546272d80ace66d3347000cd8fd3691792ec49
		
			
				
	
	
		
			124 lines
		
	
	
	
		
			5.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			124 lines
		
	
	
	
		
			5.9 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/. */
 | 
						|
 | 
						|
add_task(function* test_ignoreFragment() {
 | 
						|
  let tabRefAboutHome =
 | 
						|
    yield BrowserTestUtils.openNewForegroundTab(gBrowser, "about:home#1");
 | 
						|
  yield BrowserTestUtils.openNewForegroundTab(gBrowser, "about:mozilla");
 | 
						|
  let numTabsAtStart = gBrowser.tabs.length;
 | 
						|
 | 
						|
  switchTab("about:home#1", true);
 | 
						|
  switchTab("about:mozilla", true);
 | 
						|
 | 
						|
  let hashChangePromise = ContentTask.spawn(tabRefAboutHome.linkedBrowser, null, function* () {
 | 
						|
    yield ContentTaskUtils.waitForEvent(this, "hashchange", false);
 | 
						|
  });
 | 
						|
  switchTab("about:home#2", true, { ignoreFragment: "whenComparingAndReplace" });
 | 
						|
  is(tabRefAboutHome, gBrowser.selectedTab, "The same about:home tab should be switched to");
 | 
						|
  yield hashChangePromise;
 | 
						|
  is(gBrowser.currentURI.ref, "2", "The ref should be updated to the new ref");
 | 
						|
  switchTab("about:mozilla", true);
 | 
						|
  switchTab("about:home#3", true, { ignoreFragment: "whenComparing" });
 | 
						|
  is(tabRefAboutHome, gBrowser.selectedTab, "The same about:home tab should be switched to");
 | 
						|
  is(gBrowser.currentURI.ref, "2", "The ref should be unchanged since the fragment is only ignored when comparing");
 | 
						|
  switchTab("about:mozilla", true);
 | 
						|
  switchTab("about:home#1", false);
 | 
						|
  isnot(tabRefAboutHome, gBrowser.selectedTab, "Selected tab should not be initial about:blank tab");
 | 
						|
  is(gBrowser.tabs.length, numTabsAtStart + 1, "Should have one new tab opened");
 | 
						|
  switchTab("about:mozilla", true);
 | 
						|
  switchTab("about:home", true, {ignoreFragment: "whenComparingAndReplace"});
 | 
						|
  yield BrowserTestUtils.waitForCondition(function() {
 | 
						|
    return tabRefAboutHome.linkedBrowser.currentURI.spec == "about:home";
 | 
						|
  });
 | 
						|
  is(tabRefAboutHome.linkedBrowser.currentURI.spec, "about:home", "about:home shouldn't have hash");
 | 
						|
  switchTab("about:about", false, { ignoreFragment: "whenComparingAndReplace" });
 | 
						|
  cleanupTestTabs();
 | 
						|
});
 | 
						|
 | 
						|
add_task(function* test_ignoreQueryString() {
 | 
						|
  let tabRefAboutHome =
 | 
						|
    yield BrowserTestUtils.openNewForegroundTab(gBrowser, "about:home?hello=firefox");
 | 
						|
  yield BrowserTestUtils.openNewForegroundTab(gBrowser, "about:mozilla");
 | 
						|
 | 
						|
  switchTab("about:home?hello=firefox", true);
 | 
						|
  switchTab("about:home?hello=firefoxos", false);
 | 
						|
  // Remove the last opened tab to test ignoreQueryString option.
 | 
						|
  gBrowser.removeCurrentTab();
 | 
						|
  switchTab("about:home?hello=firefoxos", true, { ignoreQueryString: true });
 | 
						|
  is(tabRefAboutHome, gBrowser.selectedTab, "Selected tab should be the initial about:home tab");
 | 
						|
  is(gBrowser.currentURI.spec, "about:home?hello=firefox", "The spec should NOT be updated to the new query string");
 | 
						|
  cleanupTestTabs();
 | 
						|
});
 | 
						|
 | 
						|
add_task(function* test_replaceQueryString() {
 | 
						|
  let tabRefAboutHome =
 | 
						|
    yield BrowserTestUtils.openNewForegroundTab(gBrowser, "about:home?hello=firefox");
 | 
						|
  yield BrowserTestUtils.openNewForegroundTab(gBrowser, "about:mozilla");
 | 
						|
 | 
						|
  switchTab("about:home", false);
 | 
						|
  switchTab("about:home?hello=firefox", true);
 | 
						|
  switchTab("about:home?hello=firefoxos", false);
 | 
						|
  // Remove the last opened tab to test replaceQueryString option.
 | 
						|
  gBrowser.removeCurrentTab();
 | 
						|
  switchTab("about:home?hello=firefoxos", true, { replaceQueryString: true });
 | 
						|
  is(tabRefAboutHome, gBrowser.selectedTab, "Selected tab should be the initial about:home tab");
 | 
						|
  // Wait for the tab to load the new URI spec.
 | 
						|
  yield BrowserTestUtils.browserLoaded(tabRefAboutHome.linkedBrowser);
 | 
						|
  is(gBrowser.currentURI.spec, "about:home?hello=firefoxos", "The spec should be updated to the new spec");
 | 
						|
  cleanupTestTabs();
 | 
						|
});
 | 
						|
 | 
						|
add_task(function* test_replaceQueryStringAndFragment() {
 | 
						|
  let tabRefAboutHome =
 | 
						|
    yield BrowserTestUtils.openNewForegroundTab(gBrowser, "about:home?hello=firefox#aaa");
 | 
						|
  let tabRefAboutMozilla =
 | 
						|
    yield BrowserTestUtils.openNewForegroundTab(gBrowser, "about:mozilla?hello=firefoxos#aaa");
 | 
						|
 | 
						|
  switchTab("about:home", false);
 | 
						|
  gBrowser.removeCurrentTab();
 | 
						|
  switchTab("about:home?hello=firefox#aaa", true);
 | 
						|
  is(tabRefAboutHome, gBrowser.selectedTab, "Selected tab should be the initial about:home tab");
 | 
						|
  switchTab("about:mozilla?hello=firefox#bbb", true, { replaceQueryString: true, ignoreFragment: "whenComparingAndReplace" });
 | 
						|
  is(tabRefAboutMozilla, gBrowser.selectedTab, "Selected tab should be the initial about:mozilla tab");
 | 
						|
  switchTab("about:home?hello=firefoxos#bbb", true, { ignoreQueryString: true, ignoreFragment: "whenComparingAndReplace" });
 | 
						|
  is(tabRefAboutHome, gBrowser.selectedTab, "Selected tab should be the initial about:home tab");
 | 
						|
  cleanupTestTabs();
 | 
						|
});
 | 
						|
 | 
						|
add_task(function* test_ignoreQueryStringIgnoresFragment() {
 | 
						|
  let tabRefAboutHome =
 | 
						|
    yield BrowserTestUtils.openNewForegroundTab(gBrowser, "about:home?hello=firefox#aaa");
 | 
						|
  yield BrowserTestUtils.openNewForegroundTab(gBrowser, "about:mozilla?hello=firefoxos#aaa");
 | 
						|
 | 
						|
  switchTab("about:home?hello=firefox#bbb", false, { ignoreQueryString: true });
 | 
						|
  gBrowser.removeCurrentTab();
 | 
						|
  switchTab("about:home?hello=firefoxos#aaa", true, { ignoreQueryString: true });
 | 
						|
  is(tabRefAboutHome, gBrowser.selectedTab, "Selected tab should be the initial about:home tab");
 | 
						|
  cleanupTestTabs();
 | 
						|
});
 | 
						|
 | 
						|
// Begin helpers
 | 
						|
 | 
						|
function cleanupTestTabs() {
 | 
						|
  while (gBrowser.tabs.length > 1)
 | 
						|
    gBrowser.removeCurrentTab();
 | 
						|
}
 | 
						|
 | 
						|
function switchTab(aURI, aShouldFindExistingTab, aOpenParams = {}) {
 | 
						|
  // Build the description before switchToTabHavingURI deletes the object properties.
 | 
						|
  let msg = `Should switch to existing ${aURI} tab if one existed, ` +
 | 
						|
        `${(aOpenParams.ignoreFragment ? "ignoring" : "including")} fragment portion, `;
 | 
						|
  if (aOpenParams.replaceQueryString) {
 | 
						|
    msg += "replacing";
 | 
						|
  } else if (aOpenParams.ignoreQueryString) {
 | 
						|
    msg += "ignoring";
 | 
						|
  } else {
 | 
						|
    msg += "including";
 | 
						|
  }
 | 
						|
  msg += " query string.";
 | 
						|
  let tabFound = switchToTabHavingURI(aURI, true, aOpenParams);
 | 
						|
  is(tabFound, aShouldFindExistingTab, msg);
 | 
						|
}
 | 
						|
 | 
						|
registerCleanupFunction(cleanupTestTabs);
 |