forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			110 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			110 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
 | |
| 
 | |
| XPCOMUtils.defineLazyModuleGetter(this, "Promise",
 | |
|   "resource://gre/modules/Promise.jsm");
 | |
| XPCOMUtils.defineLazyModuleGetter(this, "Task",
 | |
|   "resource://gre/modules/Task.jsm");
 | |
| XPCOMUtils.defineLazyModuleGetter(this, "PlacesUtils",
 | |
|   "resource://gre/modules/PlacesUtils.jsm");
 | |
| 
 | |
| function whenDelayedStartupFinished(aWindow, aCallback) {
 | |
|   Services.obs.addObserver(function observer(aSubject, aTopic) {
 | |
|     if (aWindow == aSubject) {
 | |
|       Services.obs.removeObserver(observer, aTopic);
 | |
|       executeSoon(aCallback);
 | |
|     }
 | |
|   }, "browser-delayed-startup-finished", false);
 | |
| }
 | |
| 
 | |
| function findChromeWindowByURI(aURI) {
 | |
|   let windows = Services.wm.getEnumerator(null);
 | |
|   while (windows.hasMoreElements()) {
 | |
|     let win = windows.getNext();
 | |
|     if (win.location.href == aURI)
 | |
|       return win;
 | |
|   }
 | |
|   return null;
 | |
| }
 | |
| 
 | |
| function waitForCondition(condition, nextTest, errorMsg) {
 | |
|   var tries = 0;
 | |
|   var interval = setInterval(function() {
 | |
|     if (tries >= 30) {
 | |
|       ok(false, errorMsg);
 | |
|       moveOn();
 | |
|     }
 | |
|     var conditionPassed;
 | |
|     try {
 | |
|       conditionPassed = condition();
 | |
|     } catch (e) {
 | |
|       ok(false, e + "\n" + e.stack);
 | |
|       conditionPassed = false;
 | |
|     }
 | |
|     if (conditionPassed) {
 | |
|       moveOn();
 | |
|     }
 | |
|     tries++;
 | |
|   }, 100);
 | |
|   var moveOn = function() { clearInterval(interval); nextTest(); };
 | |
| }
 | |
| 
 | |
| function getTestPlugin(aName) {
 | |
|   var pluginName = aName || "Test Plug-in";
 | |
|   var ph = Cc["@mozilla.org/plugin/host;1"].getService(Ci.nsIPluginHost);
 | |
|   var tags = ph.getPluginTags();
 | |
| 
 | |
|   // Find the test plugin
 | |
|   for (var i = 0; i < tags.length; i++) {
 | |
|     if (tags[i].name == pluginName)
 | |
|       return tags[i];
 | |
|   }
 | |
|   ok(false, "Unable to find plugin");
 | |
|   return null;
 | |
| }
 | |
| 
 | |
| // call this to set the test plugin(s) initially expected enabled state.
 | |
| // it will automatically be reset to it's previous value after the test
 | |
| // ends
 | |
| function setTestPluginEnabledState(newEnabledState, pluginName) {
 | |
|   var plugin = getTestPlugin(pluginName);
 | |
|   var oldEnabledState = plugin.enabledState;
 | |
|   plugin.enabledState = newEnabledState;
 | |
|   SimpleTest.registerCleanupFunction(function() {
 | |
|     getTestPlugin(pluginName).enabledState = oldEnabledState;
 | |
|   });
 | |
| }
 | |
| 
 | |
| // after a test is done using the plugin doorhanger, we should just clear
 | |
| // any permissions that may have crept in
 | |
| function clearAllPluginPermissions() {
 | |
|   let perms = Services.perms.enumerator;
 | |
|   while (perms.hasMoreElements()) {
 | |
|     let perm = perms.getNext();
 | |
|     if (perm.type.startsWith('plugin')) {
 | |
|       Services.perms.remove(perm.host, perm.type);
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| function updateBlocklist(aCallback) {
 | |
|   var blocklistNotifier = Cc["@mozilla.org/extensions/blocklist;1"]
 | |
|                           .getService(Ci.nsITimerCallback);
 | |
|   var observer = function() {
 | |
|     Services.obs.removeObserver(observer, "blocklist-updated");
 | |
|     SimpleTest.executeSoon(aCallback);
 | |
|   };
 | |
|   Services.obs.addObserver(observer, "blocklist-updated", false);
 | |
|   blocklistNotifier.notify(null);
 | |
| }
 | |
| 
 | |
| var _originalTestBlocklistURL = null;
 | |
| function setAndUpdateBlocklist(aURL, aCallback) {
 | |
|   if (!_originalTestBlocklistURL)
 | |
|     _originalTestBlocklistURL = Services.prefs.getCharPref("extensions.blocklist.url");
 | |
|   Services.prefs.setCharPref("extensions.blocklist.url", aURL);
 | |
|   updateBlocklist(aCallback);
 | |
| }
 | |
| 
 | |
| function resetBlocklist() {
 | |
|   Services.prefs.setCharPref("extensions.blocklist.url", _originalTestBlocklistURL);
 | |
| }
 | 
