summaryrefslogtreecommitdiffstats
path: root/dom/tethering/TetheringManager.js
diff options
context:
space:
mode:
Diffstat (limited to 'dom/tethering/TetheringManager.js')
-rw-r--r--dom/tethering/TetheringManager.js92
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) {};
+}