diff options
Diffstat (limited to 'browser/base/content/test/general/browser_bug575561.js')
-rw-r--r-- | browser/base/content/test/general/browser_bug575561.js | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/browser/base/content/test/general/browser_bug575561.js b/browser/base/content/test/general/browser_bug575561.js new file mode 100644 index 000000000..b6d17a447 --- /dev/null +++ b/browser/base/content/test/general/browser_bug575561.js @@ -0,0 +1,97 @@ +requestLongerTimeout(2); + +const TEST_URL = "http://example.com/browser/browser/base/content/test/general/app_bug575561.html"; + +add_task(function*() { + SimpleTest.requestCompleteLog(); + + // Pinned: Link to the same domain should not open a new tab + // Tests link to http://example.com/browser/browser/base/content/test/general/dummy_page.html + yield testLink(0, true, false); + // Pinned: Link to a different subdomain should open a new tab + // Tests link to http://test1.example.com/browser/browser/base/content/test/general/dummy_page.html + yield testLink(1, true, true); + + // Pinned: Link to a different domain should open a new tab + // Tests link to http://example.org/browser/browser/base/content/test/general/dummy_page.html + yield testLink(2, true, true); + + // Not Pinned: Link to a different domain should not open a new tab + // Tests link to http://example.org/browser/browser/base/content/test/general/dummy_page.html + yield testLink(2, false, false); + + // Pinned: Targetted link should open a new tab + // Tests link to http://example.org/browser/browser/base/content/test/general/dummy_page.html with target="foo" + yield testLink(3, true, true); + + // Pinned: Link in a subframe should not open a new tab + // Tests link to http://example.org/browser/browser/base/content/test/general/dummy_page.html in subframe + yield testLink(0, true, false, true); + + // Pinned: Link to the same domain (with www prefix) should not open a new tab + // Tests link to http://www.example.com/browser/browser/base/content/test/general/dummy_page.html + yield testLink(4, true, false); + + // Pinned: Link to a data: URI should not open a new tab + // Tests link to data:text/html,<!DOCTYPE html><html><body>Another Page</body></html> + yield testLink(5, true, false); + + // Pinned: Link to an about: URI should not open a new tab + // Tests link to about:logo + yield testLink(function(doc) { + let link = doc.createElement("a"); + link.textContent = "Link to Mozilla"; + link.href = "about:logo"; + doc.body.appendChild(link); + return link; + }, true, false, false, "about:robots"); +}); + +var waitForPageLoad = Task.async(function*(browser, linkLocation) { + yield waitForDocLoadComplete(); + + is(browser.contentDocument.location.href, linkLocation, "Link should not open in a new tab"); +}); + +var waitForTabOpen = Task.async(function*() { + let event = yield promiseWaitForEvent(gBrowser.tabContainer, "TabOpen", true); + ok(true, "Link should open a new tab"); + + yield waitForDocLoadComplete(event.target.linkedBrowser); + yield Promise.resolve(); + + gBrowser.removeCurrentTab(); +}); + +var testLink = Task.async(function*(aLinkIndexOrFunction, pinTab, expectNewTab, testSubFrame, aURL = TEST_URL) { + let appTab = gBrowser.addTab(aURL, {skipAnimation: true}); + if (pinTab) + gBrowser.pinTab(appTab); + gBrowser.selectedTab = appTab; + + yield waitForDocLoadComplete(); + + let browser = appTab.linkedBrowser; + if (testSubFrame) + browser = browser.contentDocument.querySelector("iframe"); + + let link; + if (typeof aLinkIndexOrFunction == "function") { + link = aLinkIndexOrFunction(browser.contentDocument); + } else { + link = browser.contentDocument.querySelectorAll("a")[aLinkIndexOrFunction]; + } + + let promise; + if (expectNewTab) + promise = waitForTabOpen(); + else + promise = waitForPageLoad(browser, link.href); + + info("Clicking " + link.textContent); + link.click(); + + yield promise; + + gBrowser.removeTab(appTab); +}); |