addon-sdk/source/lib/sdk/window/helpers.js

branch
TOR_BUG_3246
changeset 7
129ffea94266
equal deleted inserted replaced
-1:000000000000 0:2891206484c2
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 'use strict';
5
6 const { defer } = require('../core/promise');
7 const events = require('../system/events');
8 const { open: openWindow, onFocus, getToplevelWindow,
9 isInteractive, getOuterId } = require('./utils');
10 const { Ci } = require("chrome");
11
12 function open(uri, options) {
13 return promise(openWindow.apply(null, arguments), 'load');
14 }
15 exports.open = open;
16
17 function close(window) {
18 let deferred = defer();
19 let toplevelWindow = getToplevelWindow(window);
20 let outerId = getOuterId(toplevelWindow);
21 events.on("outer-window-destroyed", function onclose({subject}) {
22 let id = subject.QueryInterface(Ci.nsISupportsPRUint64).data;
23 if (id == outerId) {
24 events.off("outer-window-destroyed", onclose);
25 deferred.resolve();
26 }
27 }, true);
28 window.close();
29 return deferred.promise;
30 }
31 exports.close = close;
32
33 function focus(window) {
34 let p = onFocus(window);
35 window.focus();
36 return p;
37 }
38 exports.focus = focus;
39
40 function ready(window) {
41 let { promise: result, resolve } = defer();
42
43 if (isInteractive(window))
44 resolve(window);
45 else
46 resolve(promise(window, 'DOMContentLoaded'));
47
48 return result;
49 }
50 exports.ready = ready;
51
52 function promise(target, evt, capture) {
53 let deferred = defer();
54 capture = !!capture;
55
56 target.addEventListener(evt, function eventHandler() {
57 target.removeEventListener(evt, eventHandler, capture);
58 deferred.resolve(target);
59 }, capture);
60
61 return deferred.promise;
62 }
63 exports.promise = promise;

mercurial