| Index: lib/main.js |
| =================================================================== |
| --- a/lib/main.js |
| +++ b/lib/main.js |
| @@ -0,0 +1,98 @@ |
| +/* |
| + * This file is part of Adblock Plus <http://adblockplus.org/>, |
| + * Copyright (C) 2006-2014 Eyeo GmbH |
| + * |
| + * Adblock Plus is free software: you can redistribute it and/or modify |
| + * it under the terms of the GNU General Public License version 3 as |
| + * published by the Free Software Foundation. |
| + * |
| + * Adblock Plus is distributed in the hope that it will be useful, |
| + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| + * GNU General Public License for more details. |
| + * |
| + * You should have received a copy of the GNU General Public License |
| + * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. |
| + */ |
| + |
| +let {XPCOMUtils} = Cu.import("resource://gre/modules/XPCOMUtils.jsm", null); |
| +let {Services} = Cu.import("resource://gre/modules/Services.jsm", null); |
| + |
| +let optionsObserver = |
| +{ |
| + init: function() |
| + { |
| + Services.obs.addObserver(this, "addon-options-displayed", true); |
| + onShutdown.add(function() |
| + { |
| + Services.obs.removeObserver(this, "addon-options-displayed"); |
| + }.bind(this)); |
| + }, |
| + |
| + observe: function(subject, topic, data) |
| + { |
| + let {addonID} = require("info") |
| + if (data != addonID) |
| + return; |
| + |
| + let doc = subject.QueryInterface(Ci.nsIDOMDocument); |
| + |
| + let testList = doc.getElementById("adblockplustests-tests"); |
| + for (let test of getTests()) |
| + testList.appendItem(test, test); |
| + |
| + doc.getElementById("adblockplustests-run").addEventListener("command", doRun, false); |
| + }, |
| + |
| + QueryInterface: XPCOMUtils.generateQI([Ci.nsIObserver, Ci.nsISupportsWeakReference]) |
| +}; |
| +optionsObserver.init(); |
| + |
| +function doRun(event) |
| +{ |
| + let wnd = Services.wm.getMostRecentWindow("adblockplustests:harness"); |
| + if (wnd) |
| + { |
| + wnd.focus(); |
| + return; |
| + } |
| + |
| + let doc = event.target.ownerDocument; |
| + |
| + let params = ""; |
| + let testList = doc.getElementById("adblockplustests-tests"); |
| + if (testList.value) |
| + params = "?test=" + encodeURIComponent(testList.value); |
| + |
| + doc.defaultView.openDialog("chrome://adblockplustests/content/harness.xul" + params, "_blank", "chrome,centerscreen,resizable,dialog=no"); |
| +} |
| + |
| +function getTests() |
| +{ |
| + let result = []; |
| + |
| + let {addonRoot} = require("info"); |
| + let uri = Services.io.newURI(addonRoot, null, null).QueryInterface(Components.interfaces.nsIJARURI); |
| + let zipReader = Cc["@mozilla.org/libjar/zip-reader;1"].createInstance(Ci.nsIZipReader); |
| + zipReader.open(uri.JARFile.QueryInterface(Ci.nsIFileURL).file); |
| + |
| + try |
| + { |
| + let enumerator = zipReader.findEntries(null); |
| + let prefix = "chrome/content/tests/"; |
| + let suffix = ".js"; |
| + while (enumerator.hasMore()) |
| + { |
| + let name = enumerator.getNext(); |
| + if (name.indexOf(prefix) == 0 && name.lastIndexOf(suffix) == name.length - suffix.length) |
| + result.push(name.substring(prefix.length, name.length - suffix.length)); |
| + } |
| + } |
| + finally |
| + { |
| + zipReader.close(); |
| + } |
| + result.sort(); |
| + return result; |
| +}; |
| +exports.getTests = getTests; |