addon-sdk/source/test/test-browser-events.js

branch
TOR_BUG_3246
changeset 7
129ffea94266
equal deleted inserted replaced
-1:000000000000 0:091acfb87d62
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 "use strict";
6
7 module.metadata = {
8 engines: {
9 "Firefox": "*"
10 }
11 };
12
13 const { Loader } = require("sdk/test/loader");
14 const { open, getMostRecentBrowserWindow, getOuterId } = require("sdk/window/utils");
15 const { setTimeout } = require("sdk/timers");
16
17 exports["test browser events"] = function(assert, done) {
18 let loader = Loader(module);
19 let { events } = loader.require("sdk/browser/events");
20 let { on, off } = loader.require("sdk/event/core");
21 let actual = [];
22
23 on(events, "data", function handler(e) {
24 actual.push(e);
25 if (e.type === "load") window.close();
26 if (e.type === "close") {
27 // Unload the module so that all listeners set by observer are removed.
28
29 let [ ready, load, close ] = actual;
30
31 assert.equal(ready.type, "DOMContentLoaded");
32 assert.equal(ready.target, window, "window ready");
33
34 assert.equal(load.type, "load");
35 assert.equal(load.target, window, "window load");
36
37 assert.equal(close.type, "close");
38 assert.equal(close.target, window, "window load");
39
40 // Note: If window is closed right after this GC won't have time
41 // to claim loader and there for this listener, there for it's safer
42 // to remove listener.
43 off(events, "data", handler);
44 loader.unload();
45 done();
46 }
47 });
48
49 // Open window and close it to trigger observers.
50 let window = open();
51 };
52
53 exports["test browser events ignore other wins"] = function(assert, done) {
54 let loader = Loader(module);
55 let { events: windowEvents } = loader.require("sdk/window/events");
56 let { events: browserEvents } = loader.require("sdk/browser/events");
57 let { on, off } = loader.require("sdk/event/core");
58 let actualBrowser = [];
59 let actualWindow = [];
60
61 function browserEventHandler(e) actualBrowser.push(e)
62 on(browserEvents, "data", browserEventHandler);
63 on(windowEvents, "data", function handler(e) {
64 actualWindow.push(e);
65 // Delay close so that if "load" is also emitted on `browserEvents`
66 // `browserEventHandler` will be invoked.
67 if (e.type === "load") setTimeout(window.close);
68 if (e.type === "close") {
69 assert.deepEqual(actualBrowser, [], "browser events were not triggered");
70 let [ open, ready, load, close ] = actualWindow;
71
72 assert.equal(open.type, "open");
73 assert.equal(open.target, window, "window is open");
74
75
76
77 assert.equal(ready.type, "DOMContentLoaded");
78 assert.equal(ready.target, window, "window ready");
79
80 assert.equal(load.type, "load");
81 assert.equal(load.target, window, "window load");
82
83 assert.equal(close.type, "close");
84 assert.equal(close.target, window, "window load");
85
86
87 // Note: If window is closed right after this GC won't have time
88 // to claim loader and there for this listener, there for it's safer
89 // to remove listener.
90 off(windowEvents, "data", handler);
91 off(browserEvents, "data", browserEventHandler);
92 loader.unload();
93 done();
94 }
95 });
96
97 // Open window and close it to trigger observers.
98 let window = open("data:text/html,not a browser");
99 };
100
101 require("test").run(exports);

mercurial