123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- /* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- 'use strict';
- const { defer } = require('../core/promise');
- const events = require('../system/events');
- const { open: openWindow, onFocus, getToplevelWindow,
- isInteractive, getOuterId } = require('./utils');
- const { Ci } = require("chrome");
- function open(uri, options) {
- return promise(openWindow.apply(null, arguments), 'load');
- }
- exports.open = open;
- function close(window) {
- let deferred = defer();
- let toplevelWindow = getToplevelWindow(window);
- let outerId = getOuterId(toplevelWindow);
- events.on("outer-window-destroyed", function onclose({subject}) {
- let id = subject.QueryInterface(Ci.nsISupportsPRUint64).data;
- if (id == outerId) {
- events.off("outer-window-destroyed", onclose);
- deferred.resolve();
- }
- }, true);
- window.close();
- return deferred.promise;
- }
- exports.close = close;
- function focus(window) {
- let p = onFocus(window);
- window.focus();
- return p;
- }
- exports.focus = focus;
- function ready(window) {
- let { promise: result, resolve } = defer();
- if (isInteractive(window))
- resolve(window);
- else
- resolve(promise(window, 'DOMContentLoaded'));
- return result;
- }
- exports.ready = ready;
- function promise(target, evt, capture) {
- let deferred = defer();
- capture = !!capture;
- target.addEventListener(evt, function eventHandler() {
- target.removeEventListener(evt, eventHandler, capture);
- deferred.resolve(target);
- }, capture);
- return deferred.promise;
- }
- exports.promise = promise;
|