mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-01-11 22:41:02 +00:00
Bug 989717 - Handle enabling and disabling state properly. r=vchang
This commit is contained in:
parent
b092e41e8b
commit
7a664e9511
@ -890,13 +890,13 @@ var WifiManager = (function() {
|
||||
};
|
||||
|
||||
// Public interface of the wifi service.
|
||||
manager.setWifiEnabled = function(enable, callback) {
|
||||
if (enable === manager.enabled) {
|
||||
manager.setWifiEnabled = function(enabled, callback) {
|
||||
if (enabled === manager.isWifiEnabled(manager.state)) {
|
||||
callback("no change");
|
||||
return;
|
||||
}
|
||||
|
||||
if (enable) {
|
||||
if (enabled) {
|
||||
manager.state = "INITIALIZING";
|
||||
// Register as network interface.
|
||||
WifiNetworkInterface.name = manager.ifname;
|
||||
@ -952,6 +952,10 @@ var WifiManager = (function() {
|
||||
}
|
||||
wifiCommand.closeSupplicantConnection(function () {
|
||||
manager.connectToSupplicant = false;
|
||||
// closeSupplicantConnection() will trigger onsupplicantlost
|
||||
// and set manager.state to "UNINITIALIZED", we have to
|
||||
// restore it here.
|
||||
manager.state = "INITIALIZING";
|
||||
startSupplicantInternal();
|
||||
});
|
||||
}
|
||||
@ -994,6 +998,11 @@ var WifiManager = (function() {
|
||||
|
||||
// Get wifi interface and load wifi driver when enable Ap mode.
|
||||
manager.setWifiApEnabled = function(enabled, configuration, callback) {
|
||||
if (enabled === manager.isWifiTetheringEnabled(manager.tetheringState)) {
|
||||
callback("no change");
|
||||
return;
|
||||
}
|
||||
|
||||
if (enabled) {
|
||||
manager.tetheringState = "INITIALIZING";
|
||||
loadDriver(function (status) {
|
||||
@ -1258,6 +1267,26 @@ var WifiManager = (function() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
manager.isWifiEnabled = function(state) {
|
||||
switch (state) {
|
||||
case "UNINITIALIZED":
|
||||
case "DISABLING":
|
||||
return false;
|
||||
default:
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
manager.isWifiTetheringEnabled = function(state) {
|
||||
switch (state) {
|
||||
case "UNINITIALIZED":
|
||||
return false;
|
||||
default:
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
manager.syncDebug = syncDebug;
|
||||
manager.stateOrdinal = function(state) {
|
||||
return supplicantStatesMap.indexOf(state);
|
||||
@ -1802,7 +1831,9 @@ function WifiWorker() {
|
||||
WifiManager.getMacAddress(function (mac) {
|
||||
self.macAddress = mac;
|
||||
debug("Got mac: " + mac);
|
||||
self._ignoreNextWifiEnabledSetting = true;
|
||||
self._fireEvent("wifiUp", { macAddress: mac });
|
||||
self.requestDone();
|
||||
});
|
||||
|
||||
if (WifiManager.state === "SCANNING")
|
||||
@ -1815,7 +1846,9 @@ function WifiWorker() {
|
||||
debug("Supplicant died!");
|
||||
|
||||
// Notify everybody, even if they didn't ask us to come up.
|
||||
self._ignoreNextWifiDisabledSetting = true;
|
||||
self._fireEvent("wifiDown", {});
|
||||
self.requestDone();
|
||||
};
|
||||
|
||||
WifiManager.onpasswordmaybeincorrect = function() {
|
||||
@ -2244,6 +2277,13 @@ WifiWorker.prototype = {
|
||||
|
||||
_oldWifiTetheringEnabledState: null,
|
||||
|
||||
// 930355: Workaround before bug 930355 is landed.
|
||||
// Current system app will set settings value "wifi.enabled" after receiving
|
||||
// wifi enable/disable event, this will cause infinite loop between gaia
|
||||
// and gecko, so now use this variable to cut the loop.
|
||||
_ignoreNextWifiDisabledSetting: false,
|
||||
_ignoreNextWifiEnabledSetting: false,
|
||||
|
||||
tetheringSettings: {},
|
||||
|
||||
initTetheringSettings: function initTetheringSettings() {
|
||||
@ -2689,13 +2729,16 @@ WifiWorker.prototype = {
|
||||
},
|
||||
|
||||
_setWifiEnabledCallback: function(status) {
|
||||
if (status !== 0) {
|
||||
this.requestDone();
|
||||
return;
|
||||
}
|
||||
|
||||
// If we're enabling ourselves, then wait until we've connected to the
|
||||
// supplicant to notify. If we're disabling, we take care of this in
|
||||
// supplicantlost.
|
||||
if (WifiManager.supplicantStarted)
|
||||
WifiManager.start();
|
||||
|
||||
this.requestDone();
|
||||
},
|
||||
|
||||
setWifiEnabled: function(enabled, callback) {
|
||||
@ -3107,14 +3150,11 @@ WifiWorker.prototype = {
|
||||
},
|
||||
|
||||
handleWifiEnabled: function(enabled) {
|
||||
if (WifiManager.enabled === enabled) {
|
||||
return;
|
||||
}
|
||||
// Make sure Wifi hotspot is idle before switching to Wifi mode.
|
||||
if (enabled) {
|
||||
this.queueRequest(false, function(data) {
|
||||
if (this.tetheringSettings[SETTINGS_WIFI_TETHERING_ENABLED] ||
|
||||
WifiManager.tetheringState != "UNINITIALIZED") {
|
||||
WifiManager.isWifiTetheringEnabled(WifiManager.tetheringState)) {
|
||||
this.disconnectedByWifi = true;
|
||||
this.setWifiApEnabled(false, this.notifyTetheringOff.bind(this));
|
||||
} else {
|
||||
@ -3143,7 +3183,7 @@ WifiWorker.prototype = {
|
||||
// Make sure Wifi is idle before switching to Wifi hotspot mode.
|
||||
if (enabled) {
|
||||
this.queueRequest(false, function(data) {
|
||||
if (WifiManager.enabled || WifiManager.state != "UNINITIALIZED") {
|
||||
if (WifiManager.isWifiEnabled(WifiManager.state)) {
|
||||
this.disconnectedByWifiTethering = true;
|
||||
this.setWifiEnabled(false, this._setWifiEnabledCallback.bind(this));
|
||||
} else {
|
||||
@ -3153,7 +3193,7 @@ WifiWorker.prototype = {
|
||||
}
|
||||
|
||||
this.queueRequest(enabled, function(data) {
|
||||
this.setWifiApEnabled(data, this.requestDone.bind(this));
|
||||
this.setWifiApEnabled(enabled, this.requestDone.bind(this));
|
||||
}.bind(this));
|
||||
|
||||
if (!enabled) {
|
||||
@ -3191,6 +3231,14 @@ WifiWorker.prototype = {
|
||||
handle: function handle(aName, aResult) {
|
||||
switch(aName) {
|
||||
case SETTINGS_WIFI_ENABLED:
|
||||
if (this._ignoreNextWifiEnabledSetting && aResult) {
|
||||
this._ignoreNextWifiEnabledSetting = false;
|
||||
break;
|
||||
}
|
||||
if (this._ignoreNextWifiDisabledSetting && !aResult) {
|
||||
this._ignoreNextWifiDisabledSetting = false;
|
||||
break;
|
||||
}
|
||||
this.handleWifiEnabled(aResult)
|
||||
break;
|
||||
case SETTINGS_WIFI_DEBUG_ENABLED:
|
||||
|
Loading…
x
Reference in New Issue
Block a user