| 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);  }});
 |