1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- /* 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 { Class } = require('../core/heritage');
- const { BrowserWindow } = require('../window/browser');
- const { WindowTracker } = require('../deprecated/window-utils');
- const { isBrowser, getMostRecentBrowserWindow } = require('../window/utils');
- const { windowNS } = require('../window/namespace');
- const { on, off, once, emit } = require('../event/core');
- const { method } = require('../lang/functional');
- const { EventTarget } = require('../event/target');
- const { List, addListItem } = require('../util/list');
- const ERR_FENNEC_MSG = 'This method is not yet supported by Fennec, consider using require("sdk/tabs") instead';
- // NOTE: On Fennec there is only one window.
- let BrowserWindows = Class({
- implements: [ List ],
- extends: EventTarget,
- initialize: function() {
- List.prototype.initialize.apply(this);
- },
- get activeWindow() {
- let window = getMostRecentBrowserWindow();
- return window ? getBrowserWindow({window: window}) : null;
- },
- open: function open(options) {
- throw new Error(ERR_FENNEC_MSG);
- return null;
- }
- });
- const browserWindows = exports.browserWindows = BrowserWindows();
- /**
- * Gets a `BrowserWindow` for the given `chromeWindow` if previously
- * registered, `null` otherwise.
- */
- function getRegisteredWindow(chromeWindow) {
- for each (let window in browserWindows) {
- if (chromeWindow === windowNS(window).window)
- return window;
- }
- return null;
- }
- /**
- * Gets a `BrowserWindow` for the provided window options obj
- * @params {Object} options
- * Options that are passed to the the `BrowserWindowTrait`
- * @returns {BrowserWindow}
- */
- function getBrowserWindow(options) {
- let window = null;
- // if we have a BrowserWindow already then use it
- if ('window' in options)
- window = getRegisteredWindow(options.window);
- if (window)
- return window;
- // we don't have a BrowserWindow yet, so create one
- var window = BrowserWindow(options);
- addListItem(browserWindows, window);
- return window;
- }
- WindowTracker({
- onTrack: function onTrack(chromeWindow) {
- if (!isBrowser(chromeWindow)) return;
- let window = getBrowserWindow({ window: chromeWindow });
- emit(browserWindows, 'open', window);
- },
- onUntrack: function onUntrack(chromeWindow) {
- if (!isBrowser(chromeWindow)) return;
- let window = getBrowserWindow({ window: chromeWindow });
- emit(browserWindows, 'close', window);
- }
- });
|