summaryrefslogtreecommitdiffstats
path: root/browser/base/content/test/general/browser_identity_UI.js
blob: 5aacb2e79d159ccaedaadb52197c9265926306b8 (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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
/* Tests for correct behaviour of getEffectiveHost on identity handler */

function test() {
  waitForExplicitFinish();
  requestLongerTimeout(2);

  ok(gIdentityHandler, "gIdentityHandler should exist");

  BrowserTestUtils.openNewForegroundTab(gBrowser, "about:blank", true).then(() => {
    gBrowser.selectedBrowser.addEventListener("load", checkResult, true);
    nextTest();
  });
}

// Greek IDN for 'example.test'.
var idnDomain = "\u03C0\u03B1\u03C1\u03AC\u03B4\u03B5\u03B9\u03B3\u03BC\u03B1.\u03B4\u03BF\u03BA\u03B9\u03BC\u03AE";
var tests = [
  {
    name: "normal domain",
    location: "http://test1.example.org/",
    effectiveHost: "test1.example.org"
  },
  {
    name: "view-source",
    location: "view-source:http://example.com/",
    effectiveHost: null
  },
  {
    name: "normal HTTPS",
    location: "https://example.com/",
    effectiveHost: "example.com",
    isHTTPS: true
  },
  {
    name: "IDN subdomain",
    location: "http://sub1." + idnDomain + "/",
    effectiveHost: "sub1." + idnDomain
  },
  {
    name: "subdomain with port",
    location: "http://sub1.test1.example.org:8000/",
    effectiveHost: "sub1.test1.example.org"
  },
  {
    name: "subdomain HTTPS",
    location: "https://test1.example.com/",
    effectiveHost: "test1.example.com",
    isHTTPS: true
  },
  {
    name: "view-source HTTPS",
    location: "view-source:https://example.com/",
    effectiveHost: null,
    isHTTPS: true
  },
  {
    name: "IP address",
    location: "http://127.0.0.1:8888/",
    effectiveHost: "127.0.0.1"
  },
]

var gCurrentTest, gCurrentTestIndex = -1, gTestDesc, gPopupHidden;
// Go through the tests in both directions, to add additional coverage for
// transitions between different states.
var gForward = true;
var gCheckETLD = false;
function nextTest() {
  if (!gCheckETLD) {
    if (gForward)
      gCurrentTestIndex++;
    else
      gCurrentTestIndex--;

    if (gCurrentTestIndex == tests.length) {
      // Went too far, reverse
      gCurrentTestIndex--;
      gForward = false;
    }

    if (gCurrentTestIndex == -1) {
      gBrowser.selectedBrowser.removeEventListener("load", checkResult, true);
      gBrowser.removeCurrentTab();
      finish();
      return;
    }

    gCurrentTest = tests[gCurrentTestIndex];
    gTestDesc = "#" + gCurrentTestIndex + " (" + gCurrentTest.name + ")";
    if (!gForward)
      gTestDesc += " (second time)";
    if (gCurrentTest.isHTTPS) {
      gCheckETLD = true;
    }

    // Navigate to the next page, which will cause checkResult to fire.
    let spec = gBrowser.selectedBrowser.currentURI.spec;
    if (spec == "about:blank" || spec == gCurrentTest.location) {
      BrowserTestUtils.loadURI(gBrowser.selectedBrowser, gCurrentTest.location);
    } else {
      // Open the Control Center and make sure it closes after nav (Bug 1207542).
      let popupShown = promisePopupShown(gIdentityHandler._identityPopup);
      gPopupHidden = promisePopupHidden(gIdentityHandler._identityPopup);
      gIdentityHandler._identityBox.click();
      info("Waiting for the Control Center to be shown");
      popupShown.then(() => {
        is_element_visible(gIdentityHandler._identityPopup, "Control Center is visible");
        // Show the subview, which is an easy way in automation to reproduce
        // Bug 1207542, where the CC wouldn't close on navigation.
        gBrowser.ownerDocument.querySelector("#identity-popup-security-expander").click();
        BrowserTestUtils.loadURI(gBrowser.selectedBrowser, gCurrentTest.location);
      });
    }
  } else {
    gCheckETLD = false;
    gTestDesc = "#" + gCurrentTestIndex + " (" + gCurrentTest.name + " without eTLD in identity icon label)";
    if (!gForward)
      gTestDesc += " (second time)";
    gBrowser.selectedBrowser.reloadWithFlags(Ci.nsIWebNavigation.LOAD_FLAGS_BYPASS_CACHE |
                                             Ci.nsIWebNavigation.LOAD_FLAGS_BYPASS_PROXY);
  }
}

function checkResult() {
  // Sanity check other values, and the value of gIdentityHandler.getEffectiveHost()
  is(gIdentityHandler._uri.spec, gCurrentTest.location, "location matches for test " + gTestDesc);
  // getEffectiveHost can't be called for all modes
  if (gCurrentTest.effectiveHost === null) {
    let identityBox = document.getElementById("identity-box");
    ok(identityBox.className == "unknownIdentity" ||
       identityBox.className == "chromeUI", "mode matched");
  } else {
    is(gIdentityHandler.getEffectiveHost(), gCurrentTest.effectiveHost, "effectiveHost matches for test " + gTestDesc);
  }

  if (gPopupHidden) {
    info("Waiting for the Control Center to hide");
    gPopupHidden.then(() => {
      gPopupHidden = null;
      is_element_hidden(gIdentityHandler._identityPopup, "control center is hidden");
      executeSoon(nextTest);
    });
  } else {
    executeSoon(nextTest);
  }
}