Home | History | Annotate | Download | only in network_test_ext
      1 // Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 // chromeTesting.Networking provides wrappers around chrome.networking.onc
      6 // functions. The result of each asynchronous call can be accessed through
      7 // chromeTesting.networking.callStatus, which is a dictionary of the form:
      8 //    {
      9 //      <function name>: {
     10 //        "status": <STATUS_PENDING|STATUS_SUCCESS|STATUS_FAILURE>,
     11 //        "result": <Return value or null>,
     12 //        "error": <Error message or null>,
     13 //      },
     14 //      ...
     15 //    }
     16 
     17 function Networking() {
     18   this.callStatus = {};
     19 }
     20 
     21 // Returns false if a call |function_name| is pending, otherwise sets up
     22 // the function dictionary and sets the status to STATUS_PENDING.
     23 Networking.prototype._setupFunctionCall = function(function_name) {
     24   if (this.callStatus[function_name] == null)
     25     this.callStatus[function_name] = {};
     26   if (this.callStatus[function_name].status == chromeTesting.STATUS_PENDING)
     27     return false;
     28   this.callStatus[function_name].status = chromeTesting.STATUS_PENDING;
     29   return true;
     30 };
     31 
     32 Networking.prototype._setResult = function(function_name, result_value) {
     33   var error = chrome.runtime.lastError;
     34   if (error) {
     35     this.callStatus[function_name].status = chromeTesting.STATUS_FAILURE;
     36     this.callStatus[function_name].result = null;
     37     this.callStatus[function_name].error = error.message;
     38   } else {
     39     this.callStatus[function_name].status = chromeTesting.STATUS_SUCCESS;
     40     this.callStatus[function_name].result = result_value;
     41     this.callStatus[function_name].error = null;
     42   }
     43 };
     44 
     45 Networking.prototype.getEnabledNetworkDevices = function() {
     46   if (!this._setupFunctionCall("getEnabledNetworkDevices"))
     47     return;
     48   var self = this;
     49   chrome.networking.onc.getDeviceStates(function(deviceState) {
     50     // De-dupe network types by using a dictionary.
     51     // TODO(stevenjb): remove the de-dupe logic here after crbug.com/679945 is
     52     // fixed.
     53     var networkTypes = {};
     54     deviceState.forEach(function(device) {
     55       if (device.State == 'Enabled')
     56         networkTypes[device.Type] = true;
     57     });
     58     self._setResult("getEnabledNetworkDevices", Object.keys(networkTypes));
     59   });
     60 };
     61 
     62 Networking.prototype.enableNetworkDevice = function(type) {
     63   if (!this._setupFunctionCall("enableNetworkDevice"))
     64     return;
     65   var self = this;
     66   chrome.networking.onc.enableNetworkType(type);
     67 };
     68 
     69 Networking.prototype.disableNetworkDevice = function(type) {
     70   if (!this._setupFunctionCall("disableNetworkDevice"))
     71     return;
     72   var self = this;
     73   chrome.networking.onc.disableNetworkType(type);
     74 };
     75 
     76 Networking.prototype.requestNetworkScan = function() {
     77   if (!this._setupFunctionCall("requestNetworkScan"))
     78     return;
     79   var self = this;
     80   chrome.networking.onc.requestNetworkScan();
     81 };
     82 
     83 Networking.prototype.createNetwork = function(shared, properties) {
     84   if (!this._setupFunctionCall("createNetwork"))
     85     return;
     86   var self = this;
     87   chrome.networking.onc.createNetwork(shared, properties, function(guid) {
     88     self._setResult("createNetwork", guid);
     89   });
     90 };
     91 
     92 Networking.prototype.setProperties = function(guid, properties) {
     93   if (!this._setupFunctionCall("setProperties"))
     94     return;
     95   var self = this;
     96   chrome.networking.onc.setProperties(guid, properties, function() {
     97     self._setResult("setProperties", null);
     98   });
     99 };
    100 
    101 Networking.prototype.findNetworks = function(type) {
    102   if (!this._setupFunctionCall("findNetworks"))
    103     return;
    104   var self = this;
    105   chrome.networking.onc.getNetworks({
    106     visible: true,
    107     networkType: type
    108   }, function(networks) {
    109     self._setResult("findNetworks", networks);
    110   });
    111 };
    112 
    113 Networking.prototype.getNetworks = function(properties) {
    114   if (!this._setupFunctionCall("getNetworks"))
    115     return;
    116   var self = this;
    117   chrome.networking.onc.getNetworks(properties, function(networkList) {
    118     self._setResult("getNetworks", networkList);
    119   });
    120 };
    121 
    122 Networking.prototype.getNetworkInfo = function(networkId) {
    123   if (!this._setupFunctionCall("getNetworkInfo"))
    124     return;
    125   var self = this;
    126   chrome.networking.onc.getProperties(networkId, function(networkInfo) {
    127     self._setResult("getNetworkInfo", networkInfo);
    128   });
    129 };
    130 
    131 Networking.prototype.connectToNetwork = function(networkId) {
    132   if (!this._setupFunctionCall("connectToNetwork"))
    133     return;
    134   var self = this;
    135   chrome.networking.onc.startConnect(networkId, function() {
    136     self._setResult("connectToNetwork", null);
    137   });
    138 };
    139 
    140 Networking.prototype.disconnectFromNetwork = function(networkId) {
    141   if (!this._setupFunctionCall("disconnectFromNetwork"))
    142     return;
    143   var self = this;
    144   chrome.networking.onc.startDisconnect(networkId, function() {
    145     self._setResult("disconnectFromNetwork", null);
    146   });
    147 };
    148 
    149 Networking.prototype.setWifiTDLSEnabledState = function(ip_or_mac, enable) {
    150   if (!this._setupFunctionCall("setWifiTDLSEnabledState"))
    151     return;
    152   var self = this;
    153   chrome.networking.onc.setWifiTDLSEnabledState(
    154       ip_or_mac, enable, function(result) {
    155     self._setResult("setWifiTDLSEnabledState", result);
    156   });
    157 };
    158 
    159 Networking.prototype.getWifiTDLSStatus = function(ip_or_mac) {
    160   if (!this._setupFunctionCall("getWifiTDLSStatus"))
    161     return;
    162   var self = this;
    163   chrome.networking.onc.getWifiTDLSStatus(ip_or_mac,
    164       function(TDLSStatus) {
    165     self._setResult("getWifiTDLSStatus", TDLSStatus);
    166   });
    167 };
    168 
    169 Networking.prototype.getCaptivePortalStatus = function(networkPath) {
    170   if (!this._setupFunctionCall("getCaptivePortalStatus"))
    171     return;
    172   var self = this;
    173   chrome.networking.onc.getCaptivePortalStatus(networkPath,
    174       function(CaptivePortalStatus) {
    175     self._setResult("getCaptivePortalStatus", CaptivePortalStatus);
    176   });
    177 };
    178 
    179 
    180 Networking.prototype.onNetworkListChanged = function() {
    181   if (!this._setupFunctionCall("onNetworkListChanged"))
    182     return;
    183   var self = this;
    184   chrome.networking.onc.onNetworkListChanged.addListener(
    185       function(changes) {
    186     self._setResult("onNetworkListChanged", changes);
    187   });
    188 };
    189 
    190 Networking.prototype.onPortalDetectionCompleted = function() {
    191   if (!this._setupFunctionCall("onPortalDetectionCompleted"))
    192     return;
    193   var self = this;
    194   chrome.networking.onc.onPortalDetectionCompleted.addListener(
    195       function(networkPath, state) {
    196     self._setResult("onPortalDetectionCompleted", networkPath);
    197   });
    198 };
    199 
    200 var chromeTesting = {
    201   STATUS_PENDING: "chrome-test-call-status-pending",
    202   STATUS_SUCCESS: "chrome-test-call-status-success",
    203   STATUS_FAILURE: "chrome-test-call-status-failure",
    204   networking: new Networking()
    205 };
    206