dom/wifi/DOMWifiP2pManager.js

Sat, 03 Jan 2015 20:18:00 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Sat, 03 Jan 2015 20:18:00 +0100
branch
TOR_BUG_3246
changeset 7
129ffea94266
permissions
-rw-r--r--

Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.

     1 /* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
     2 /* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
     3 /* This Source Code Form is subject to the terms of the Mozilla Public
     4  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
     5  * You can obtain one at http://mozilla.org/MPL/2.0/. */
     7 "use strict";
     9 const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
    11 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
    12 Cu.import("resource://gre/modules/Services.jsm");
    13 Cu.import("resource://gre/modules/DOMRequestHelper.jsm");
    15 const DEBUG = false;
    17 // interface MozWifiP2pGroupOwner implementation.
    19 function MozWifiP2pGroupOwner(aGo) {
    20   this.groupName = aGo.groupName;
    21   this.macAddress = aGo.macAddress;
    22   this.ipAddress = aGo.ipAddress;
    23   this.passphrase = aGo.passphrase;
    24   this.ssid = aGo.ssid;
    25   this.wpsCapabilities = aGo.wpsCapabilities;
    26   this.freq = aGo.freq;
    27   this.isLocal = aGo.isLocal;
    28 }
    30 MozWifiP2pGroupOwner.prototype = {
    31   classID: Components.ID("{a9b81450-349d-11e3-aa6e-0800200c9a66}"),
    32   contractID: "@mozilla.org/wifip2pgroupowner;1",
    33   QueryInterface: XPCOMUtils.generateQI([Ci.nsISupports])
    34 };
    36 // interface MozWifiP2pManager implementation.
    38 const MOZ_WIFIP2PMANAGER_CONTRACTID = "@mozilla.org/wifip2pmanager;1";
    39 const MOZ_WIFIP2PMANAGER_CID        = Components.ID("{8d9125a0-3498-11e3-aa6e-0800200c9a66}");
    41 function MozWifiP2pManager() {
    42   this.defineEventHandlerGetterSetter("onstatuschange");
    43   this.defineEventHandlerGetterSetter("onpeerinfoupdate");
    44   this.defineEventHandlerGetterSetter("onenabled");
    45   this.defineEventHandlerGetterSetter("ondisabled");
    47   this.currentPeer = null;
    48   this.enabled = false;
    49   this.groupOwner = null;
    50 }
    52 // For smaller, read-only APIs, we expose any property that doesn't begin with
    53 // an underscore.
    54 function exposeReadOnly(obj) {
    55   let exposedProps = {};
    56   for (let i in obj) {
    57     if (i[0] === "_") {
    58       continue;
    59     }
    60     exposedProps[i] = "r";
    61   }
    63   obj.__exposedProps__ = exposedProps;
    64   return obj;
    65 }
    67 function debug(msg) {
    68   if (DEBUG) {
    69     dump('-------------- MozWifiP2pManager: ' + msg);
    70   }
    71 }
    73 MozWifiP2pManager.prototype = {
    74   __proto__: DOMRequestIpcHelper.prototype,
    76   classID:        MOZ_WIFIP2PMANAGER_CID,
    77   contractID:     MOZ_WIFIP2PMANAGER_CONTRACTID,
    78   QueryInterface: XPCOMUtils.generateQI([Ci.nsIDOMGlobalPropertyInitializer,
    79                                          Ci.nsISupportsWeakReference,
    80                                          Ci.nsIObserver,
    81                                          Ci.nsISupports]),
    83   //
    84   // nsIDOMGlobalPropertyInitializer implementation.
    85   //
    87   init: function(aWindow) {
    88     const messages = ["WifiP2pManager:setScanEnabled:Return:OK",
    89                       "WifiP2pManager:setScanEnabled:Return:NO",
    90                       "WifiP2pManager:getPeerList:Return:OK",
    91                       "WifiP2pManager:getPeerList:Return:NO",
    92                       "WifiP2pManager:connect:Return:OK",
    93                       "WifiP2pManager:connect:Return:NO",
    94                       "WifiP2pManager:disconnect:Return:OK",
    95                       "WifiP2pManager:disconnect:Return:NO",
    96                       "WifiP2pManager:setPairingConfirmation:Return",
    97                       "WifiP2pManager:setDeviceName:Return:OK",
    98                       "WifiP2pManager:setDeviceName:Return:NO",
   100                       "WifiP2pManager:p2pDown",
   101                       "WifiP2pManager:p2pUp",
   102                       "WifiP2pManager:onconnecting",
   103                       "WifiP2pManager:onconnected",
   104                       "WifiP2pManager:ondisconnected",
   105                       "WifiP2pManager:ongroupnstop",
   106                       "WifiP2pManager:onconnectingfailed",
   107                       "WifiP2pManager:onwpstimeout",
   108                       "WifiP2pManager:onwpsfail",
   109                       "WifiP2pManager:onpeerinfoupdate",
   110                       ];
   112     this.initDOMRequestHelper(aWindow, messages);
   113     this._mm = Cc["@mozilla.org/childprocessmessagemanager;1"].getService(Ci.nsISyncMessageSender);
   115     // Notify the internal a new DOM mananger is created.
   116     let state = this._mm.sendSyncMessage("WifiP2pManager:getState")[0];
   117     if (state) {
   118       debug('State: ' + JSON.stringify(state));
   119     } else {
   120       debug('Failed to get state');
   121     }
   122   },
   124   uninit: function() {
   125   },
   127   _sendMessageForRequest: function(name, data, request) {
   128     let id = this.getRequestId(request);
   129     this._mm.sendAsyncMessage(name, { data: data, rid: id, mid: this._id });
   130   },
   132   receiveMessage: function(aMessage) {
   133     let msg = aMessage.json;
   134     if (msg.mid && msg.mid !== this._id) {
   135       return;
   136     }
   138     let request;
   139     switch (aMessage.name) {
   140      case "WifiP2pManager:setScanEnabled:Return:OK":
   141         request = this.takeRequest(msg.rid);
   142         Services.DOMRequest.fireSuccess(request, exposeReadOnly(msg.data));
   143         break;
   145       case "WifiP2pManager:setScanEnabled:Return:NO":
   146         request = this.takeRequest(msg.rid);
   147         Services.DOMRequest.fireError(request, "Unable to enable/disable Wifi P2P peer discovery.");
   148         break;
   150      case "WifiP2pManager:getPeerList:Return:OK":
   151         request = this.takeRequest(msg.rid);
   152         Services.DOMRequest.fireSuccess(request, msg.data);
   153         break;
   155       case "WifiP2pManager:getPeerList:Return:NO":
   156         request = this.takeRequest(msg.rid);
   157         Services.DOMRequest.fireError(request, "Unable to disable Wifi P2P peer discovery.");
   158         break;
   160       case "WifiP2pManager:connect:Return:OK":
   161         request = this.takeRequest(msg.rid);
   162         Services.DOMRequest.fireSuccess(request, exposeReadOnly(msg.data));
   163         break;
   165       case "WifiP2pManager:connect:Return:NO":
   166         request = this.takeRequest(msg.rid);
   167         Services.DOMRequest.fireError(request, "Unable to connect to Wifi P2P peer.");
   168         break;
   170       case "WifiP2pManager:disconnect:Return:OK":
   171         request = this.takeRequest(msg.rid);
   172         Services.DOMRequest.fireSuccess(request, exposeReadOnly(msg.data));
   173         break;
   175       case "WifiP2pManager:disconnect:Return:NO":
   176         request = this.takeRequest(msg.rid);
   177         Services.DOMRequest.fireError(request, "Unable to disconnect to Wifi P2P peer.");
   178         break;
   180       case "WifiP2pManager:setDeviceName:Return:OK":
   181         request = this.takeRequest(msg.rid);
   182         Services.DOMRequest.fireSuccess(request, exposeReadOnly(msg.data));
   183         break;
   185       case "WifiP2pManager:setDeviceName:Return:NO":
   186         request = this.takeRequest(msg.rid);
   187         Services.DOMRequest.fireError(request, "Unable to set device name.");
   188         break;
   190       case "WifiP2pManager:p2pDown":
   191         this.enabled = false;
   192         this.currentPeer = null;
   193         this._fireEnabledOrDisabled(false);
   194         break;
   196       case "WifiP2pManager:p2pUp":
   197         this.enabled = true;
   198         this._fireEnabledOrDisabled(true);
   199         break;
   201       case "WifiP2pManager:onconnecting":
   202         debug('onconnecting with peer: ' + JSON.stringify(msg.peer));
   203         this.currentPeer = msg.peer;
   204         this._fireStatusChangeEvent(msg.peer.address);
   205         break;
   207       case "WifiP2pManager:onconnected":
   208         debug('onconnected with peer: ' + JSON.stringify(msg.peer));
   209         this.currentPeer = msg.peer;
   210         this.groupOwner = new MozWifiP2pGroupOwner(msg.groupOwner);
   211         this._fireStatusChangeEvent(msg.peer.address);
   212         break;
   214       case "WifiP2pManager:ondisconnected":
   215         debug('ondisconnected with peer: ' + JSON.stringify(msg.peer));
   216         this.currentPeer = null;
   217         this.groupOwner = null;
   218         this._fireStatusChangeEvent(msg.peer.address);
   219         break;
   221       case "WifiP2pManager:onconnectingfailed":
   222         this._fireStatusChangeEvent(null);
   223         break;
   225       case "WifiP2pManager:onwpstimeout":
   226         this._fireStatusChangeEvent(null);
   227         break;
   229       case "WifiP2pManager:onwpsfail":
   230         this._fireStatusChangeEvent(null);
   231         break;
   233       case "WifiP2pManager:onpeerinfoupdate":
   234         this._firePeerInfoUpdateEvent();
   235         break;
   236     }
   237   },
   239   _firePeerInfoUpdateEvent: function PeerInfoUpdate() {
   240     let evt = new this._window.Event("peerinfoupdate");
   241     this.__DOM_IMPL__.dispatchEvent(evt);
   242   },
   244   _fireStatusChangeEvent: function WifiP2pStatusChange(peerAddress) {
   245     let evt = new this._window.MozWifiP2pStatusChangeEvent("statuschange",
   246                                                            { peerAddress: peerAddress });
   247     this.__DOM_IMPL__.dispatchEvent(evt);
   248   },
   250   _fireEnabledOrDisabled: function enabledDisabled(enabled) {
   251     let evt = new this._window.Event(enabled ? "enabled" : "disabled");
   252     this.__DOM_IMPL__.dispatchEvent(evt);
   253   },
   255   //
   256   // WifiP2pManager.webidl implementation.
   257   //
   259   enableScan: function () {
   260     let request = this.createRequest();
   261     this._sendMessageForRequest("WifiP2pManager:enableScan", null, request);
   262     return request;
   263   },
   265   disableScan: function () {
   266     let request = this.createRequest();
   267     this._sendMessageForRequest("WifiP2pManager:disableScan", null, request);
   268     return request;
   269   },
   271   setScanEnabled: function(enabled) {
   272     let request = this.createRequest();
   273     this._sendMessageForRequest("WifiP2pManager:setScanEnabled", enabled, request);
   274     return request;
   275   },
   277   connect: function (address, wpsMethod, goIntent) {
   278     let request = this.createRequest();
   279     let connectionInfo = { address: address, wpsMethod: wpsMethod, goIntent: goIntent };
   280     this._sendMessageForRequest("WifiP2pManager:connect", connectionInfo, request);
   281     return request;
   282   },
   284   disconnect: function (address) {
   285     let request = this.createRequest();
   286     this._sendMessageForRequest("WifiP2pManager:disconnect", address, request);
   287     return request;
   288   },
   290   getPeerList: function () {
   291     let request = this.createRequest();
   292     this._sendMessageForRequest("WifiP2pManager:getPeerList", null, request);
   293     return request;
   294   },
   296   setPairingConfirmation: function (accepted, pin) {
   297     let request = this.createRequest();
   298     let result = { accepted: accepted, pin: pin };
   299     this._sendMessageForRequest("WifiP2pManager:setPairingConfirmation", result, request);
   300     return request;
   301   },
   303   setDeviceName: function(newDeviceName) {
   304     let request = this.createRequest();
   305     this._sendMessageForRequest("WifiP2pManager:setDeviceName", newDeviceName, request);
   306     return request;
   307   },
   309   // Helpers.
   310   defineEventHandlerGetterSetter: function(event) {
   311     Object.defineProperty(this, event, {
   312       get: function() {
   313         return this.__DOM_IMPL__.getEventHandler(event);
   314       },
   316       set: function(handler) {
   317         this.__DOM_IMPL__.setEventHandler(event, handler);
   318       }
   319     });
   320   },
   321 };
   323 this.NSGetFactory = XPCOMUtils.generateNSGetFactory([MozWifiP2pManager, MozWifiP2pGroupOwner]);

mercurial