|
1 /* This Source Code Form is subject to the terms of the Mozilla Public |
|
2 * License, v. 2.0. If a copy of the MPL was not distributed with this |
|
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
|
4 |
|
5 function test() { |
|
6 waitForExplicitFinish(); |
|
7 |
|
8 let manifest = { // normal provider |
|
9 name: "provider 1", |
|
10 origin: "https://example.com", |
|
11 sidebarURL: "https://example.com/browser/browser/base/content/test/social/social_sidebar.html", |
|
12 workerURL: "https://example.com/browser/browser/base/content/test/social/social_worker.js", |
|
13 iconURL: "https://example.com/browser/browser/base/content/test/general/moz.png" |
|
14 }; |
|
15 runSocialTestWithProvider(manifest, function (finishcb) { |
|
16 SocialSidebar.show(); |
|
17 runSocialTests(tests, undefined, undefined, finishcb); |
|
18 }); |
|
19 } |
|
20 |
|
21 var tests = { |
|
22 testOpenCloseFlyout: function(next) { |
|
23 let panel = document.getElementById("social-flyout-panel"); |
|
24 panel.addEventListener("popupshowing", function onShowing() { |
|
25 panel.removeEventListener("popupshowing", onShowing); |
|
26 is(panel.firstChild.contentDocument.readyState, "complete", "panel is loaded prior to showing"); |
|
27 }); |
|
28 let port = SocialSidebar.provider.getWorkerPort(); |
|
29 ok(port, "provider has a port"); |
|
30 port.onmessage = function (e) { |
|
31 let topic = e.data.topic; |
|
32 switch (topic) { |
|
33 case "got-sidebar-message": |
|
34 port.postMessage({topic: "test-flyout-open"}); |
|
35 break; |
|
36 case "got-flyout-visibility": |
|
37 if (e.data.result == "hidden") { |
|
38 ok(true, "flyout visibility is 'hidden'"); |
|
39 is(panel.state, "closed", "panel really is closed"); |
|
40 port.close(); |
|
41 next(); |
|
42 } else if (e.data.result == "shown") { |
|
43 ok(true, "flyout visibility is 'shown"); |
|
44 port.postMessage({topic: "test-flyout-close"}); |
|
45 } |
|
46 break; |
|
47 case "got-flyout-message": |
|
48 ok(e.data.result == "ok", "got flyout message"); |
|
49 break; |
|
50 } |
|
51 } |
|
52 port.postMessage({topic: "test-init"}); |
|
53 }, |
|
54 |
|
55 testResizeFlyout: function(next) { |
|
56 let panel = document.getElementById("social-flyout-panel"); |
|
57 let port = SocialSidebar.provider.getWorkerPort(); |
|
58 ok(port, "provider has a port"); |
|
59 port.onmessage = function (e) { |
|
60 let topic = e.data.topic; |
|
61 switch (topic) { |
|
62 case "test-init-done": |
|
63 port.postMessage({topic: "test-flyout-open"}); |
|
64 break; |
|
65 case "got-flyout-visibility": |
|
66 if (e.data.result != "shown") |
|
67 return; |
|
68 // The width of the flyout should be 400px initially |
|
69 let iframe = panel.firstChild; |
|
70 let body = iframe.contentDocument.body; |
|
71 let cs = iframe.contentWindow.getComputedStyle(body); |
|
72 |
|
73 is(cs.width, "400px", "should be 400px wide"); |
|
74 is(iframe.boxObject.width, 400, "iframe should now be 400px wide"); |
|
75 is(cs.height, "400px", "should be 400px high"); |
|
76 is(iframe.boxObject.height, 400, "iframe should now be 400px high"); |
|
77 |
|
78 iframe.contentWindow.addEventListener("resize", function _doneHandler() { |
|
79 iframe.contentWindow.removeEventListener("resize", _doneHandler, false); |
|
80 cs = iframe.contentWindow.getComputedStyle(body); |
|
81 |
|
82 is(cs.width, "500px", "should now be 500px wide"); |
|
83 is(iframe.boxObject.width, 500, "iframe should now be 500px wide"); |
|
84 is(cs.height, "500px", "should now be 500px high"); |
|
85 is(iframe.boxObject.height, 500, "iframe should now be 500px high"); |
|
86 panel.hidePopup(); |
|
87 port.close(); |
|
88 next(); |
|
89 }, false); |
|
90 SocialFlyout.dispatchPanelEvent("socialTest-MakeWider"); |
|
91 break; |
|
92 } |
|
93 } |
|
94 port.postMessage({topic: "test-init"}); |
|
95 }, |
|
96 |
|
97 testCloseSelf: function(next) { |
|
98 // window.close is affected by the pref dom.allow_scripts_to_close_windows, |
|
99 // which defaults to false, but is set to true by the test harness. |
|
100 // so temporarily set it back. |
|
101 const ALLOW_SCRIPTS_TO_CLOSE_PREF = "dom.allow_scripts_to_close_windows"; |
|
102 // note clearUserPref doesn't do what we expect, as the test harness itself |
|
103 // changes the pref value - so clearUserPref resets it to false rather than |
|
104 // the true setup by the test harness. |
|
105 let oldAllowScriptsToClose = Services.prefs.getBoolPref(ALLOW_SCRIPTS_TO_CLOSE_PREF); |
|
106 Services.prefs.setBoolPref(ALLOW_SCRIPTS_TO_CLOSE_PREF, false); |
|
107 let panel = document.getElementById("social-flyout-panel"); |
|
108 let port = SocialSidebar.provider.getWorkerPort(); |
|
109 ok(port, "provider has a port"); |
|
110 port.onmessage = function (e) { |
|
111 let topic = e.data.topic; |
|
112 switch (topic) { |
|
113 case "test-init-done": |
|
114 port.postMessage({topic: "test-flyout-open"}); |
|
115 break; |
|
116 case "got-flyout-visibility": |
|
117 if (e.data.result != "shown") |
|
118 return; |
|
119 let iframe = panel.firstChild; |
|
120 iframe.contentDocument.addEventListener("SocialTest-DoneCloseSelf", function _doneHandler() { |
|
121 iframe.contentDocument.removeEventListener("SocialTest-DoneCloseSelf", _doneHandler, false); |
|
122 port.close(); |
|
123 is(panel.state, "closed", "flyout should have closed itself"); |
|
124 Services.prefs.setBoolPref(ALLOW_SCRIPTS_TO_CLOSE_PREF, oldAllowScriptsToClose); |
|
125 next(); |
|
126 }, false); |
|
127 is(panel.state, "open", "flyout should be open"); |
|
128 SocialFlyout.dispatchPanelEvent("socialTest-CloseSelf"); |
|
129 break; |
|
130 } |
|
131 } |
|
132 port.postMessage({topic: "test-init"}); |
|
133 }, |
|
134 |
|
135 testCloseOnLinkTraversal: function(next) { |
|
136 |
|
137 function onTabOpen(event) { |
|
138 gBrowser.tabContainer.removeEventListener("TabOpen", onTabOpen, true); |
|
139 waitForCondition(function() { return panel.state == "closed" }, function() { |
|
140 gBrowser.removeTab(event.target); |
|
141 next(); |
|
142 }, "panel should close after tab open"); |
|
143 } |
|
144 |
|
145 let panel = document.getElementById("social-flyout-panel"); |
|
146 let port = SocialSidebar.provider.getWorkerPort(); |
|
147 ok(port, "provider has a port"); |
|
148 port.onmessage = function (e) { |
|
149 let topic = e.data.topic; |
|
150 switch (topic) { |
|
151 case "test-init-done": |
|
152 port.postMessage({topic: "test-flyout-open"}); |
|
153 break; |
|
154 case "got-flyout-visibility": |
|
155 if (e.data.result == "shown") { |
|
156 // click on our test link |
|
157 is(panel.state, "open", "flyout should be open"); |
|
158 gBrowser.tabContainer.addEventListener("TabOpen", onTabOpen, true); |
|
159 let iframe = panel.firstChild; |
|
160 iframe.contentDocument.getElementById('traversal').click(); |
|
161 } |
|
162 break; |
|
163 } |
|
164 } |
|
165 port.postMessage({topic: "test-init"}); |
|
166 } |
|
167 } |