summaryrefslogtreecommitdiffstats
path: root/browser/base/content/test/plugins/BlocklistTestProxy.jsm
diff options
context:
space:
mode:
Diffstat (limited to 'browser/base/content/test/plugins/BlocklistTestProxy.jsm')
-rw-r--r--browser/base/content/test/plugins/BlocklistTestProxy.jsm88
1 files changed, 88 insertions, 0 deletions
diff --git a/browser/base/content/test/plugins/BlocklistTestProxy.jsm b/browser/base/content/test/plugins/BlocklistTestProxy.jsm
new file mode 100644
index 0000000000..cd13352f4a
--- /dev/null
+++ b/browser/base/content/test/plugins/BlocklistTestProxy.jsm
@@ -0,0 +1,88 @@
+var EXPORTED_SYMBOLS = ["BlocklistTestProxyChild"];
+
+var Cm = Components.manager;
+
+const kBlocklistServiceUUID = "{66354bc9-7ed1-4692-ae1d-8da97d6b205e}";
+const kBlocklistServiceContractID = "@mozilla.org/extensions/blocklist;1";
+
+let existingBlocklistFactory = null;
+try {
+ existingBlocklistFactory = Cm.getClassObject(
+ Cc[kBlocklistServiceContractID],
+ Ci.nsIFactory
+ );
+} catch (ex) {}
+
+const { setTimeout } = ChromeUtils.import("resource://gre/modules/Timer.jsm");
+
+/*
+ * A lightweight blocklist proxy for testing purposes.
+ */
+var BlocklistProxy = {
+ _uuid: null,
+
+ QueryInterface: ChromeUtils.generateQI([
+ "nsIObserver",
+ "nsIBlocklistService",
+ "nsITimerCallback",
+ ]),
+
+ init() {
+ if (!this._uuid) {
+ this._uuid = Cc["@mozilla.org/uuid-generator;1"]
+ .getService(Ci.nsIUUIDGenerator)
+ .generateUUID();
+ Cm.nsIComponentRegistrar.registerFactory(
+ this._uuid,
+ "",
+ "@mozilla.org/extensions/blocklist;1",
+ this
+ );
+ }
+ },
+
+ uninit() {
+ if (this._uuid) {
+ Cm.nsIComponentRegistrar.unregisterFactory(this._uuid, this);
+ if (existingBlocklistFactory) {
+ Cm.nsIComponentRegistrar.registerFactory(
+ Components.ID(kBlocklistServiceUUID),
+ "Blocklist Service",
+ "@mozilla.org/extensions/blocklist;1",
+ existingBlocklistFactory
+ );
+ }
+ this._uuid = null;
+ }
+ },
+
+ notify(aTimer) {},
+
+ async getAddonBlocklistState(aAddon, aAppVersion, aToolkitVersion) {
+ await new Promise(r => setTimeout(r, 150));
+ return 0; // STATE_NOT_BLOCKED
+ },
+
+ async getPluginBlocklistState(aPluginTag, aAppVersion, aToolkitVersion) {
+ await new Promise(r => setTimeout(r, 150));
+ return 0; // STATE_NOT_BLOCKED
+ },
+
+ async getPluginBlockURL(aPluginTag) {
+ await new Promise(r => setTimeout(r, 150));
+ return "";
+ },
+};
+
+class BlocklistTestProxyChild extends JSProcessActorChild {
+ constructor() {
+ super();
+ BlocklistProxy.init();
+ }
+
+ receiveMessage(message) {
+ if (message.name == "unload") {
+ BlocklistProxy.uninit();
+ }
+ }
+}