michael@0: function test() { michael@0: waitForExplicitFinish(); michael@0: michael@0: // Pinned: Link to the same domain should not open a new tab michael@0: // Tests link to http://example.com/browser/browser/base/content/test/general/dummy_page.html michael@0: testLink(0, true, false, function() { michael@0: // Pinned: Link to a different subdomain should open a new tab michael@0: // Tests link to http://test1.example.com/browser/browser/base/content/test/general/dummy_page.html michael@0: testLink(1, true, true, function() { michael@0: // Pinned: Link to a different domain should open a new tab michael@0: // Tests link to http://example.org/browser/browser/base/content/test/general/dummy_page.html michael@0: testLink(2, true, true, function() { michael@0: // Not Pinned: Link to a different domain should not open a new tab michael@0: // Tests link to http://example.org/browser/browser/base/content/test/general/dummy_page.html michael@0: testLink(2, false, false, function() { michael@0: // Pinned: Targetted link should open a new tab michael@0: // Tests link to http://example.org/browser/browser/base/content/test/general/dummy_page.html with target="foo" michael@0: testLink(3, true, true, function() { michael@0: // Pinned: Link in a subframe should not open a new tab michael@0: // Tests link to http://example.org/browser/browser/base/content/test/general/dummy_page.html in subframe michael@0: testLink(0, true, false, function() { michael@0: // Pinned: Link to the same domain (with www prefix) should not open a new tab michael@0: // Tests link to http://www.example.com/browser/browser/base/content/test/general/dummy_page.html michael@0: testLink(4, true, false, function() { michael@0: // Pinned: Link to a data: URI should not open a new tab michael@0: // Tests link to data:text/html,Another Page michael@0: testLink(5, true, false, function() { michael@0: // Pinned: Link to an about: URI should not open a new tab michael@0: // Tests link to about:mozilla michael@0: testLink(6, true, false, finish); michael@0: }); michael@0: }); michael@0: }, true); michael@0: }); michael@0: }); michael@0: }); michael@0: }); michael@0: }); michael@0: } michael@0: michael@0: function testLink(aLinkIndex, pinTab, expectNewTab, nextTest, testSubFrame) { michael@0: let appTab = gBrowser.addTab("http://example.com/browser/browser/base/content/test/general/app_bug575561.html", {skipAnimation: true}); michael@0: if (pinTab) michael@0: gBrowser.pinTab(appTab); michael@0: gBrowser.selectedTab = appTab; michael@0: appTab.linkedBrowser.addEventListener("load", onLoad, true); michael@0: michael@0: let loadCount = 0; michael@0: function onLoad() { michael@0: loadCount++; michael@0: if (loadCount < 2) michael@0: return; michael@0: michael@0: appTab.linkedBrowser.removeEventListener("load", onLoad, true); michael@0: michael@0: let browser = gBrowser.getBrowserForTab(appTab); michael@0: if (testSubFrame) michael@0: browser = browser.contentDocument.getElementsByTagName("iframe")[0]; michael@0: michael@0: let links = browser.contentDocument.getElementsByTagName("a"); michael@0: michael@0: if (expectNewTab) michael@0: gBrowser.tabContainer.addEventListener("TabOpen", onTabOpen, true); michael@0: else michael@0: browser.addEventListener("load", onPageLoad, true); michael@0: michael@0: info("Clicking " + links[aLinkIndex].textContent); michael@0: EventUtils.sendMouseEvent({type:"click"}, links[aLinkIndex], browser.contentWindow); michael@0: let linkLocation = links[aLinkIndex].href; michael@0: michael@0: function onPageLoad() { michael@0: browser.removeEventListener("load", onPageLoad, true); michael@0: is(browser.contentDocument.location.href, linkLocation, "Link should not open in a new tab"); michael@0: executeSoon(function(){ michael@0: gBrowser.removeTab(appTab); michael@0: nextTest(); michael@0: }); michael@0: } michael@0: michael@0: function onTabOpen(event) { michael@0: gBrowser.tabContainer.removeEventListener("TabOpen", onTabOpen, true); michael@0: ok(true, "Link should open a new tab"); michael@0: executeSoon(function(){ michael@0: gBrowser.removeTab(appTab); michael@0: gBrowser.removeCurrentTab(); michael@0: nextTest(); michael@0: }); michael@0: } michael@0: } michael@0: }