forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			92 lines
		
	
	
	
		
			2.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			92 lines
		
	
	
	
		
			2.9 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 {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) {};
 | |
| }
 | 
