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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
/* 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);
|