forked from mirrors/gecko-dev
		
	 4a06c925ac
			
		
	
	
		4a06c925ac
		
	
	
	
	
		
			
			# ignore-this-changeset Differential Revision: https://phabricator.services.mozilla.com/D36052 --HG-- extra : source : b5be5b4f4b47c256e28a29f665dc754f6407ee7f
		
			
				
	
	
		
			124 lines
		
	
	
	
		
			3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			124 lines
		
	
	
	
		
			3 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/. */
 | |
| 
 | |
| var EXPORTED_SYMBOLS = ["ContentPrefStore"];
 | |
| 
 | |
| function ContentPrefStore() {
 | |
|   this._groups = new Map();
 | |
|   this._globalNames = new Map();
 | |
| }
 | |
| 
 | |
| ContentPrefStore.prototype = {
 | |
|   set: function CPS_set(group, name, val) {
 | |
|     if (group) {
 | |
|       if (!this._groups.has(group)) {
 | |
|         this._groups.set(group, new Map());
 | |
|       }
 | |
|       this._groups.get(group).set(name, val);
 | |
|     } else {
 | |
|       this._globalNames.set(name, val);
 | |
|     }
 | |
|   },
 | |
| 
 | |
|   setWithCast: function CPS_setWithCast(group, name, val) {
 | |
|     if (typeof val == "boolean") {
 | |
|       val = val ? 1 : 0;
 | |
|     } else if (val === undefined) {
 | |
|       val = null;
 | |
|     }
 | |
|     this.set(group, name, val);
 | |
|   },
 | |
| 
 | |
|   has: function CPS_has(group, name) {
 | |
|     if (group) {
 | |
|       return this._groups.has(group) && this._groups.get(group).has(name);
 | |
|     }
 | |
|     return this._globalNames.has(name);
 | |
|   },
 | |
| 
 | |
|   get: function CPS_get(group, name) {
 | |
|     if (group && this._groups.has(group)) {
 | |
|       return this._groups.get(group).get(name);
 | |
|     }
 | |
|     return this._globalNames.get(name);
 | |
|   },
 | |
| 
 | |
|   remove: function CPS_remove(group, name) {
 | |
|     if (group) {
 | |
|       if (this._groups.has(group)) {
 | |
|         this._groups.get(group).delete(name);
 | |
|         if (this._groups.get(group).size == 0) {
 | |
|           this._groups.delete(group);
 | |
|         }
 | |
|       }
 | |
|     } else {
 | |
|       this._globalNames.delete(name);
 | |
|     }
 | |
|   },
 | |
| 
 | |
|   removeGroup: function CPS_removeGroup(group) {
 | |
|     if (group) {
 | |
|       this._groups.delete(group);
 | |
|     } else {
 | |
|       this._globalNames.clear();
 | |
|     }
 | |
|   },
 | |
| 
 | |
|   removeAllGroups: function CPS_removeAllGroups() {
 | |
|     this._groups.clear();
 | |
|   },
 | |
| 
 | |
|   removeAll: function CPS_removeAll() {
 | |
|     this.removeAllGroups();
 | |
|     this._globalNames.clear();
 | |
|   },
 | |
| 
 | |
|   groupsMatchIncludingSubdomains: function CPS_groupsMatchIncludingSubdomains(
 | |
|     group,
 | |
|     group2
 | |
|   ) {
 | |
|     let idx = group2.indexOf(group);
 | |
|     return (
 | |
|       idx == group2.length - group.length &&
 | |
|       (idx == 0 || group2[idx - 1] == ".")
 | |
|     );
 | |
|   },
 | |
| 
 | |
|   *[Symbol.iterator]() {
 | |
|     for (let [group, names] of this._groups) {
 | |
|       for (let [name, val] of names) {
 | |
|         yield [group, name, val];
 | |
|       }
 | |
|     }
 | |
|     for (let [name, val] of this._globalNames) {
 | |
|       yield [null, name, val];
 | |
|     }
 | |
|   },
 | |
| 
 | |
|   *match(group, name, includeSubdomains) {
 | |
|     for (let sgroup of this.matchGroups(group, includeSubdomains)) {
 | |
|       if (this.has(sgroup, name)) {
 | |
|         yield [sgroup, this.get(sgroup, name)];
 | |
|       }
 | |
|     }
 | |
|   },
 | |
| 
 | |
|   *matchGroups(group, includeSubdomains) {
 | |
|     if (group) {
 | |
|       if (includeSubdomains) {
 | |
|         for (let [sgroup, ,] of this) {
 | |
|           if (sgroup) {
 | |
|             if (this.groupsMatchIncludingSubdomains(group, sgroup)) {
 | |
|               yield sgroup;
 | |
|             }
 | |
|           }
 | |
|         }
 | |
|       } else if (this._groups.has(group)) {
 | |
|         yield group;
 | |
|       }
 | |
|     } else if (this._globalNames.size) {
 | |
|       yield null;
 | |
|     }
 | |
|   },
 | |
| };
 |