forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			64 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
	
		
			1.6 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 = ["Utils"];
 | |
| 
 | |
| const Cu = Components.utils;
 | |
| const Cc = Components.classes;
 | |
| const Ci = Components.interfaces;
 | |
| 
 | |
| Cu.import("resource://gre/modules/Services.jsm", this);
 | |
| 
 | |
| this.Utils = Object.freeze({
 | |
|   makeURI: function (url) {
 | |
|     return Services.io.newURI(url, null, null);
 | |
|   },
 | |
| 
 | |
|   makeInputStream: function (aString) {
 | |
|     let stream = Cc["@mozilla.org/io/string-input-stream;1"].
 | |
|                  createInstance(Ci.nsISupportsCString);
 | |
|     stream.data = aString;
 | |
|     return stream; // XPConnect will QI this to nsIInputStream for us.
 | |
|   },
 | |
| 
 | |
|   /**
 | |
|    * Returns true if the |url| passed in is part of the given root |domain|.
 | |
|    * For example, if |url| is "www.mozilla.org", and we pass in |domain| as
 | |
|    * "mozilla.org", this will return true. It would return false the other way
 | |
|    * around.
 | |
|    */
 | |
|   hasRootDomain: function (url, domain) {
 | |
|     let host;
 | |
| 
 | |
|     try {
 | |
|       host = this.makeURI(url).host;
 | |
|     } catch (e) {
 | |
|       // The given URL probably doesn't have a host.
 | |
|       return false;
 | |
|     }
 | |
| 
 | |
|     let index = host.indexOf(domain);
 | |
|     if (index == -1)
 | |
|       return false;
 | |
| 
 | |
|     if (host == domain)
 | |
|       return true;
 | |
| 
 | |
|     let prevChar = host[index - 1];
 | |
|     return (index == (host.length - domain.length)) &&
 | |
|            (prevChar == "." || prevChar == "/");
 | |
|   },
 | |
| 
 | |
|   shallowCopy: function (obj) {
 | |
|     let retval = {};
 | |
| 
 | |
|     for (let key of Object.keys(obj)) {
 | |
|       retval[key] = obj[key];
 | |
|     }
 | |
| 
 | |
|     return retval;
 | |
|   }
 | |
| });
 | 
