mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
117 lines
3.5 KiB
JavaScript
117 lines
3.5 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";
|
|
|
|
const DEBUG = false;
|
|
|
|
function debug(s) {
|
|
dump("-*- KillSwitch.js: " + s + "\n");
|
|
}
|
|
|
|
const {interfaces: Ci, utils: Cu} = Components;
|
|
|
|
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
|
Cu.import("resource://gre/modules/DOMRequestHelper.jsm");
|
|
|
|
XPCOMUtils.defineLazyModuleGetter(this, "Services",
|
|
"resource://gre/modules/Services.jsm");
|
|
|
|
XPCOMUtils.defineLazyServiceGetter(this, "cpmm",
|
|
"@mozilla.org/childprocessmessagemanager;1",
|
|
"nsIMessageSender");
|
|
|
|
const KILLSWITCH_CID = "{b6eae5c6-971c-4772-89e5-5df626bf3f09}";
|
|
const KILLSWITCH_CONTRACTID = "@mozilla.org/moz-kill-switch;1";
|
|
|
|
const kEnableKillSwitch = "KillSwitch:Enable";
|
|
const kEnableKillSwitchOK = "KillSwitch:Enable:OK";
|
|
const kEnableKillSwitchKO = "KillSwitch:Enable:KO";
|
|
|
|
const kDisableKillSwitch = "KillSwitch:Disable";
|
|
const kDisableKillSwitchOK = "KillSwitch:Disable:OK";
|
|
const kDisableKillSwitchKO = "KillSwitch:Disable:KO";
|
|
|
|
function KillSwitch() {
|
|
this._window = null;
|
|
}
|
|
|
|
KillSwitch.prototype = {
|
|
|
|
__proto__: DOMRequestIpcHelper.prototype,
|
|
|
|
init: function(aWindow) {
|
|
DEBUG && debug("init");
|
|
this._window = aWindow;
|
|
this.initDOMRequestHelper(this._window);
|
|
},
|
|
|
|
enable: function() {
|
|
DEBUG && debug("KillSwitch: enable");
|
|
|
|
cpmm.addMessageListener(kEnableKillSwitchOK, this);
|
|
cpmm.addMessageListener(kEnableKillSwitchKO, this);
|
|
return this.createPromise((aResolve, aReject) => {
|
|
cpmm.sendAsyncMessage(kEnableKillSwitch, {
|
|
requestID: this.getPromiseResolverId({
|
|
resolve: aResolve,
|
|
reject: aReject
|
|
})
|
|
});
|
|
});
|
|
},
|
|
|
|
disable: function() {
|
|
DEBUG && debug("KillSwitch: disable");
|
|
|
|
cpmm.addMessageListener(kDisableKillSwitchOK, this);
|
|
cpmm.addMessageListener(kDisableKillSwitchKO, this);
|
|
return this.createPromise((aResolve, aReject) => {
|
|
cpmm.sendAsyncMessage(kDisableKillSwitch, {
|
|
requestID: this.getPromiseResolverId({
|
|
resolve: aResolve,
|
|
reject: aReject
|
|
})
|
|
});
|
|
});
|
|
},
|
|
|
|
receiveMessage: function(message) {
|
|
DEBUG && debug("Received: " + message.name);
|
|
|
|
cpmm.removeMessageListener(kEnableKillSwitchOK, this);
|
|
cpmm.removeMessageListener(kEnableKillSwitchKO, this);
|
|
cpmm.removeMessageListener(kDisableKillSwitchOK, this);
|
|
cpmm.removeMessageListener(kDisableKillSwitchKO, this);
|
|
|
|
let req = this.takePromiseResolver(message.data.requestID);
|
|
|
|
switch (message.name) {
|
|
case kEnableKillSwitchKO:
|
|
case kDisableKillSwitchKO:
|
|
req.reject(false);
|
|
break;
|
|
|
|
case kEnableKillSwitchOK:
|
|
case kDisableKillSwitchOK:
|
|
req.resolve(true);
|
|
break;
|
|
|
|
default:
|
|
DEBUG && debug("Unrecognized message: " + message.name);
|
|
break;
|
|
}
|
|
},
|
|
|
|
classID : Components.ID(KILLSWITCH_CID),
|
|
contractID : KILLSWITCH_CONTRACTID,
|
|
QueryInterface: XPCOMUtils.generateQI([Ci.nsIKillSwitch,
|
|
Ci.nsIDOMGlobalPropertyInitializer,
|
|
Ci.nsIObserver,
|
|
Ci.nsIMessageListener,
|
|
Ci.nsISupportsWeakReference]),
|
|
};
|
|
|
|
this.NSGetFactory = XPCOMUtils.generateNSGetFactory([KillSwitch]);
|