123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- /* 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";
- this.EXPORTED_SYMBOLS = ["RecentWindow"];
- const Cu = Components.utils;
- Cu.import("resource://gre/modules/Services.jsm");
- Cu.import("resource://gre/modules/PrivateBrowsingUtils.jsm");
- #ifndef XP_WIN
- #define BROKEN_WM_Z_ORDER
- #endif
- this.RecentWindow = {
- /*
- * Get the most recent browser window.
- *
- * @param aOptions an object accepting the arguments for the search.
- * * private: true to restrict the search to private windows
- * only, false to restrict the search to non-private only.
- * Omit the property to search in both groups.
- * * allowPopups: true if popup windows are permissable.
- */
- getMostRecentBrowserWindow: function(aOptions) {
- let checkPrivacy = typeof aOptions == "object" &&
- "private" in aOptions;
- let allowPopups = typeof aOptions == "object" && !!aOptions.allowPopups;
- function isSuitableBrowserWindow(win) {
- return (!win.closed &&
- (allowPopups || win.toolbar.visible) &&
- (!checkPrivacy ||
- PrivateBrowsingUtils.permanentPrivateBrowsing ||
- PrivateBrowsingUtils.isWindowPrivate(win) == aOptions.private));
- }
- #ifdef BROKEN_WM_Z_ORDER
- let win = Services.wm.getMostRecentWindow("navigator:browser");
- // if we're lucky, this isn't a popup, and we can just return this
- if (win && !isSuitableBrowserWindow(win)) {
- win = null;
- let windowList = Services.wm.getEnumerator("navigator:browser");
- // this is oldest to newest, so this gets a bit ugly
- while (windowList.hasMoreElements()) {
- let nextWin = windowList.getNext();
- if (isSuitableBrowserWindow(nextWin))
- win = nextWin;
- }
- }
- return win;
- #else
- let windowList = Services.wm.getZOrderDOMWindowEnumerator("navigator:browser", true);
- while (windowList.hasMoreElements()) {
- let win = windowList.getNext();
- if (isSuitableBrowserWindow(win))
- return win;
- }
- return null;
- #endif
- }
- };
|