diff options
Diffstat (limited to 'dom/tethering/TetheringManager.js')
-rw-r--r-- | dom/tethering/TetheringManager.js | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/dom/tethering/TetheringManager.js b/dom/tethering/TetheringManager.js new file mode 100644 index 000000000..1e3d3a0ea --- /dev/null +++ b/dom/tethering/TetheringManager.js @@ -0,0 +1,92 @@ +/* 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 {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components; + +Cu.import("resource://gre/modules/XPCOMUtils.jsm"); +Cu.import("resource://gre/modules/Services.jsm"); +Cu.import("resource://gre/modules/DOMRequestHelper.jsm"); + +XPCOMUtils.defineLazyServiceGetter(this, "cpmm", + "@mozilla.org/childprocessmessagemanager;1", + "nsIMessageSender"); + +const DEBUG = false; + +const TETHERING_TYPE_WIFI = "wifi"; +const TETHERING_TYPE_BLUETOOTH = "bt"; +const TETHERING_TYPE_USB = "usb"; + +function TetheringManager() { +} + +TetheringManager.prototype = { + __proto__: DOMRequestIpcHelper.prototype, + + classDescription: "TetheringManager", + classID: Components.ID("{bd8a831c-d8ec-4f00-8803-606e50781097}"), + contractID: "@mozilla.org/dom/tetheringmanager;1", + + QueryInterface: XPCOMUtils.generateQI([Ci.nsIDOMGlobalPropertyInitializer, + Ci.nsISupportsWeakReference, + Ci.nsIObserver]), + + init: function(aWindow) { + const messages = ["WifiManager:setWifiTethering:Return:OK", + "WifiManager:setWifiTethering:Return:NO"]; + this.initDOMRequestHelper(aWindow, messages); + }, + + // TODO : aMessage format may be different after supporting bt/usb. + // for now, use wifi format first. + receiveMessage: function(aMessage) { + let data = aMessage.data.data; + + let resolver = this.takePromiseResolver(data.resolverId); + if (!resolver) { + return; + } + + switch (aMessage.name) { + case "WifiManager:setWifiTethering:Return:OK": + resolver.resolve(data); + break; + case "WifiManager:setWifiTethering:Return:NO": + resolver.reject(data.reason); + break; + } + }, + + setTetheringEnabled: function setTetheringEnabled(aEnabled, aType, aConfig) { + let self = this; + switch (aType) { + case TETHERING_TYPE_WIFI: + return this.createPromiseWithId(function(aResolverId) { + let data = { resolverId: aResolverId, enabled: aEnabled, config: aConfig }; + cpmm.sendAsyncMessage("WifiManager:setWifiTethering", { data: data}); + }); + case TETHERING_TYPE_BLUETOOTH: + case TETHERING_TYPE_USB: + default: + debug("tethering type(" + aType + ") doesn't support"); + return this.createPromiseWithId(function(aResolverId) { + self.takePromiseResolver(aResolverId).reject(); + }); + } + }, +}; + +this.NSGetFactory = + XPCOMUtils.generateNSGetFactory([TetheringManager]); + +var debug; +if (DEBUG) { + debug = function (s) { + dump("-*- TetheringManager component: " + s + "\n"); + }; +} else { + debug = function (s) {}; +} |