forked from mirrors/gecko-dev
		
	 3f0e2f4c4f
			
		
	
	
		3f0e2f4c4f
		
	
	
	
	
		
			
			Depends on D51054 Summary of the changes here: - move DOMHelpers.jsm to dom-helpers.js - remove all unused methods - converted to a static helper to avoid instanciating DOMHelpers objects for no reason - updated call sites accordingly Differential Revision: https://phabricator.services.mozilla.com/D51065 --HG-- rename : devtools/shared/DOMHelpers.jsm => devtools/shared/dom-helpers.js extra : moz-landing-system : lando
		
			
				
	
	
		
			53 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
	
		
			1.9 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";
 | |
| 
 | |
| const Services = require("Services");
 | |
| 
 | |
| exports.DOMHelpers = {
 | |
|   /**
 | |
|    * A simple way to be notified (once) when a window becomes
 | |
|    * interactive (DOMContentLoaded).
 | |
|    *
 | |
|    * It is based on the chromeEventHandler. This is useful when
 | |
|    * chrome iframes are loaded in content docshells (in Firefox
 | |
|    * tabs for example).
 | |
|    *
 | |
|    * @param nsIDOMWindow win
 | |
|    *        The content window, owning the document to traverse.
 | |
|    * @param Function callback
 | |
|    *        The method to call when the frame is loaded.
 | |
|    * @param String targetURL
 | |
|    *        (optional) Check that the frame URL corresponds to the provided URL
 | |
|    *        before calling the callback.
 | |
|    */
 | |
|   onceDOMReady: function(win, callback, targetURL) {
 | |
|     if (!win) {
 | |
|       throw new Error("window can't be null or undefined");
 | |
|     }
 | |
|     const docShell = win.docShell;
 | |
|     const onReady = function(event) {
 | |
|       if (event.target == win.document) {
 | |
|         docShell.chromeEventHandler.removeEventListener(
 | |
|           "DOMContentLoaded",
 | |
|           onReady
 | |
|         );
 | |
|         // If in `callback` the URL of the window is changed and a listener to DOMContentLoaded
 | |
|         // is attached, the event we just received will be also be caught by the new listener.
 | |
|         // We want to avoid that so we execute the callback in the next queue.
 | |
|         Services.tm.dispatchToMainThread(callback);
 | |
|       }
 | |
|     };
 | |
|     if (
 | |
|       (win.document.readyState == "complete" ||
 | |
|         win.document.readyState == "interactive") &&
 | |
|       win.location.href == targetURL
 | |
|     ) {
 | |
|       Services.tm.dispatchToMainThread(callback);
 | |
|     } else {
 | |
|       docShell.chromeEventHandler.addEventListener("DOMContentLoaded", onReady);
 | |
|     }
 | |
|   },
 | |
| };
 |