|
1 /* Tests for correct behaviour of getEffectiveHost on identity handler */ |
|
2 function test() { |
|
3 waitForExplicitFinish(); |
|
4 |
|
5 ok(gIdentityHandler, "gIdentityHandler should exist"); |
|
6 |
|
7 gBrowser.selectedTab = gBrowser.addTab(); |
|
8 gBrowser.selectedBrowser.addEventListener("load", checkResult, true); |
|
9 |
|
10 nextTest(); |
|
11 } |
|
12 |
|
13 // Greek IDN for 'example.test'. |
|
14 var idnDomain = "\u03C0\u03B1\u03C1\u03AC\u03B4\u03B5\u03B9\u03B3\u03BC\u03B1.\u03B4\u03BF\u03BA\u03B9\u03BC\u03AE"; |
|
15 var tests = [ |
|
16 { |
|
17 name: "normal domain", |
|
18 location: "http://test1.example.org/", |
|
19 effectiveHost: "example.org" |
|
20 }, |
|
21 { |
|
22 name: "view-source", |
|
23 location: "view-source:http://example.com/", |
|
24 effectiveHost: null |
|
25 }, |
|
26 { |
|
27 name: "normal HTTPS", |
|
28 location: "https://example.com/", |
|
29 effectiveHost: "example.com", |
|
30 isHTTPS: true |
|
31 }, |
|
32 { |
|
33 name: "IDN subdomain", |
|
34 location: "http://sub1." + idnDomain + "/", |
|
35 effectiveHost: idnDomain |
|
36 }, |
|
37 { |
|
38 name: "subdomain with port", |
|
39 location: "http://sub1.test1.example.org:8000/", |
|
40 effectiveHost: "example.org" |
|
41 }, |
|
42 { |
|
43 name: "subdomain HTTPS", |
|
44 location: "https://test1.example.com/", |
|
45 |
|
46 effectiveHost: "example.com", |
|
47 isHTTPS: true |
|
48 }, |
|
49 { |
|
50 name: "view-source HTTPS", |
|
51 location: "view-source:https://example.com/", |
|
52 effectiveHost: null, |
|
53 isHTTPS: true |
|
54 }, |
|
55 { |
|
56 name: "IP address", |
|
57 location: "http://127.0.0.1:8888/", |
|
58 effectiveHost: "127.0.0.1" |
|
59 }, |
|
60 ] |
|
61 |
|
62 let gCurrentTest, gCurrentTestIndex = -1, gTestDesc; |
|
63 // Go through the tests in both directions, to add additional coverage for |
|
64 // transitions between different states. |
|
65 let gForward = true; |
|
66 let gCheckETLD = false; |
|
67 function nextTest() { |
|
68 if (!gCheckETLD) { |
|
69 if (gForward) |
|
70 gCurrentTestIndex++; |
|
71 else |
|
72 gCurrentTestIndex--; |
|
73 |
|
74 if (gCurrentTestIndex == tests.length) { |
|
75 // Went too far, reverse |
|
76 gCurrentTestIndex--; |
|
77 gForward = false; |
|
78 } |
|
79 |
|
80 if (gCurrentTestIndex == -1) { |
|
81 gBrowser.selectedBrowser.removeEventListener("load", checkResult, true); |
|
82 gBrowser.removeCurrentTab(); |
|
83 finish(); |
|
84 return; |
|
85 } |
|
86 |
|
87 gCurrentTest = tests[gCurrentTestIndex]; |
|
88 gTestDesc = "#" + gCurrentTestIndex + " (" + gCurrentTest.name + ")"; |
|
89 if (!gForward) |
|
90 gTestDesc += " (second time)"; |
|
91 if (gCurrentTest.isHTTPS) { |
|
92 gCheckETLD = true; |
|
93 } |
|
94 content.location = gCurrentTest.location; |
|
95 } else { |
|
96 gCheckETLD = false; |
|
97 gTestDesc = "#" + gCurrentTestIndex + " (" + gCurrentTest.name + " without eTLD in identity icon label)"; |
|
98 if (!gForward) |
|
99 gTestDesc += " (second time)"; |
|
100 content.location.reload(true); |
|
101 } |
|
102 } |
|
103 |
|
104 function checkResult() { |
|
105 // Sanity check other values, and the value of gIdentityHandler.getEffectiveHost() |
|
106 is(gIdentityHandler._lastUri.spec, gCurrentTest.location, "location matches for test " + gTestDesc); |
|
107 // getEffectiveHost can't be called for all modes |
|
108 if (gCurrentTest.effectiveHost === null) |
|
109 is(gIdentityHandler._mode == gIdentityHandler.IDENTITY_MODE_UNKNOWN || gIdentityHandler._mode == gIdentityHandler.IDENTITY_MODE_CHROMEUI, true, "mode matched"); |
|
110 else |
|
111 is(gIdentityHandler.getEffectiveHost(), gCurrentTest.effectiveHost, "effectiveHost matches for test " + gTestDesc); |
|
112 |
|
113 executeSoon(nextTest); |
|
114 } |