forked from mirrors/gecko-dev
		
	 918ed6c474
			
		
	
	
		918ed6c474
		
	
	
	
	
		
			
			This was done using the following script:
37e3803c7a/processors/chromeutils-import.jsm
MozReview-Commit-ID: 1Nc3XDu0wGl
--HG--
extra : source : 12fc4dee861c812fd2bd032c63ef17af61800c70
extra : intermediate-source : 34c999fa006bffe8705cf50c54708aa21a962e62
extra : histedit_source : b2be2c5e5d226e6c347312456a6ae339c1e634b0
		
	
			
		
			
				
	
	
		
			67 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /* 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;
 | |
| 
 | |
| ChromeUtils.import("resource://gre/modules/AppConstants.jsm");
 | |
| ChromeUtils.import("resource://gre/modules/Services.jsm");
 | |
| ChromeUtils.import("resource://gre/modules/PrivateBrowsingUtils.jsm");
 | |
| 
 | |
| 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 RW_getMostRecentBrowserWindow(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));
 | |
|     }
 | |
| 
 | |
|     let broken_wm_z_order =
 | |
|       AppConstants.platform != "macosx" && AppConstants.platform != "win";
 | |
| 
 | |
|     if (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;
 | |
|     }
 | |
|     let windowList = Services.wm.getZOrderDOMWindowEnumerator("navigator:browser", true);
 | |
|     while (windowList.hasMoreElements()) {
 | |
|       let win = windowList.getNext();
 | |
|       if (isSuitableBrowserWindow(win))
 | |
|         return win;
 | |
|     }
 | |
|     return null;
 | |
|   }
 | |
| };
 | |
| 
 |