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
|
"use strict";
add_task(setupPrefsAndRecentWindowBehavior);
let testcases = [
/**
* A portal is detected when there's no browser window,
* then a browser window is opened, and the portal is logged into
* and redirects to a different page. The portal tab should be added
* and focused when the window is opened, and left open after login
* since it redirected.
*/
async function test_detectedWithNoBrowserWindow_Redirect() {
await portalDetected();
let win = await focusWindowAndWaitForPortalUI();
let browser = win.gBrowser.selectedTab.linkedBrowser;
let loadPromise = BrowserTestUtils.browserLoaded(
browser,
false,
CANONICAL_URL_REDIRECTED
);
BrowserTestUtils.loadURI(browser, CANONICAL_URL_REDIRECTED);
await loadPromise;
await freePortal(true);
ensurePortalTab(win);
ensureNoPortalNotification(win);
await closeWindowAndWaitForWindowActivate(win);
},
/**
* Test the various expected behaviors of the "Show Login Page" button
* in the captive portal notification. The button should be visible for
* all tabs except the captive portal tab, and when clicked, should
* ensure a captive portal tab is open and select it.
*/
async function test_showLoginPageButton() {
let win = await openWindowAndWaitForFocus();
await portalDetected();
let notification = ensurePortalNotification(win);
testShowLoginPageButtonVisibility(notification, "visible");
function testPortalTabSelectedAndButtonNotVisible() {
is(
win.gBrowser.selectedTab,
tab,
"The captive portal tab should be selected."
);
testShowLoginPageButtonVisibility(notification, "hidden");
}
let button = notification.buttonContainer.querySelector(
"button.notification-button"
);
async function clickButtonAndExpectNewPortalTab() {
let p = BrowserTestUtils.waitForNewTab(win.gBrowser, CANONICAL_URL);
button.click();
let tab = await p;
is(
win.gBrowser.selectedTab,
tab,
"The captive portal tab should be selected."
);
return tab;
}
// Simulate clicking the button. The portal tab should be opened and
// selected and the button should hide.
let tab = await clickButtonAndExpectNewPortalTab();
testPortalTabSelectedAndButtonNotVisible();
// Close the tab. The button should become visible.
BrowserTestUtils.removeTab(tab);
ensureNoPortalTab(win);
testShowLoginPageButtonVisibility(notification, "visible");
// When the button is clicked, a new portal tab should be opened and
// selected.
tab = await clickButtonAndExpectNewPortalTab();
// Open another arbitrary tab. The button should become visible. When it's clicked,
// the portal tab should be selected.
let anotherTab = await BrowserTestUtils.openNewForegroundTab(win.gBrowser);
testShowLoginPageButtonVisibility(notification, "visible");
button.click();
is(
win.gBrowser.selectedTab,
tab,
"The captive portal tab should be selected."
);
// Close the portal tab and select the arbitrary tab. The button should become
// visible and when it's clicked, a new portal tab should be opened.
BrowserTestUtils.removeTab(tab);
win.gBrowser.selectedTab = anotherTab;
testShowLoginPageButtonVisibility(notification, "visible");
tab = await clickButtonAndExpectNewPortalTab();
BrowserTestUtils.removeTab(anotherTab);
await freePortal(true);
ensureNoPortalTab(win);
ensureNoPortalNotification(win);
await closeWindowAndWaitForWindowActivate(win);
},
];
for (let testcase of testcases) {
add_task(testcase);
}
|