1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
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);
});
|