summaryrefslogtreecommitdiffstats
path: root/browser/base/content/test/captivePortal/browser_CaptivePortalWatcher_1.js
blob: 6c6cc5f438248730952e0e8d502c50e925eef86f (plain)
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.loadURIString(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);
}