Bumping gaia.json for 2 gaia revision(s) a=gaia-bump
[gecko.git] / dom / tethering / TetheringManager.js
blob88d1707f3259586d94af9a0d9a7be20887e8b690
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
3  * You can obtain one at http://mozilla.org/MPL/2.0/. */
5 "use strict";
7 const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
9 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
10 Cu.import("resource://gre/modules/Services.jsm");
11 Cu.import("resource://gre/modules/DOMRequestHelper.jsm");
13 XPCOMUtils.defineLazyServiceGetter(this, "cpmm",
14                                    "@mozilla.org/childprocessmessagemanager;1",
15                                    "nsIMessageSender");
17 const DEBUG = false;
19 const TETHERING_TYPE_WIFI       = "wifi";
20 const TETHERING_TYPE_BLUETOOTH  = "bt";
21 const TETHERING_TYPE_USB        = "usb";
23 function TetheringManager() {
26 TetheringManager.prototype = {
27   __proto__: DOMRequestIpcHelper.prototype,
29   classDescription: "TetheringManager",
30   classID: Components.ID("{bd8a831c-d8ec-4f00-8803-606e50781097}"),
31   contractID: "@mozilla.org/dom/tetheringmanager;1",
33   QueryInterface: XPCOMUtils.generateQI([Ci.nsIDOMGlobalPropertyInitializer,
34                                          Ci.nsISupportsWeakReference,
35                                          Ci.nsIObserver]),
37   init: function(aWindow) {
38     const messages = ["WifiManager:setWifiTethering:Return:OK",
39                       "WifiManager:setWifiTethering:Return:NO"];
40     this.initDOMRequestHelper(aWindow, messages);
41   },
43   _getPromise: function(aCallback) {
44     let self = this;
46     return this.createPromise(function(aResolve, aReject) {
47       let resolverId = self.getPromiseResolverId({
48         resolve: aResolve,
49         reject: aReject
50       });
52       aCallback(resolverId);
53     });
54   },
56   // TODO : aMessage format may be different after supporting bt/usb.
57   //        for now, use wifi format first.
58   receiveMessage: function(aMessage) {
59     let data = aMessage.data.data;
61     let resolver = this.takePromiseResolver(data.resolverId);
62     if (!resolver) {
63       return;
64     }
66     switch (aMessage.name) {
67       case "WifiManager:setWifiTethering:Return:OK":
68         resolver.resolve(data);
69         break;
70       case "WifiManager:setWifiTethering:Return:NO":
71         resolver.reject(data.reason);
72         break;
73     }
74   },
76   setTetheringEnabled: function setTetheringEnabled(aEnabled, aType, aConfig) {
77     let self = this;
78     switch (aType) {
79       case TETHERING_TYPE_WIFI:
80         return this._getPromise(function(aResolverId) {
81           let data = { resolverId: aResolverId, enabled: aEnabled, config: aConfig };
82           cpmm.sendAsyncMessage("WifiManager:setWifiTethering", { data: data});
83         });
84       case TETHERING_TYPE_BLUETOOTH:
85       case TETHERING_TYPE_USB:
86       default:
87         debug("tethering type(" + aType + ") doesn't support");
88         return this._getPromise(function(aResolverId) {
89           self.takePromiseResolver(aResolverId).reject();
90         });
91     }
92   },
95 this.NSGetFactory =
96   XPCOMUtils.generateNSGetFactory([TetheringManager]);
98 let debug;
99 if (DEBUG) {
100   debug = function (s) {
101     dump("-*- TetheringManager component: " + s + "\n");
102   };
103 } else {
104   debug = function (s) {};