mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1018379 - Use wifi scanner as the sole the heartbeat that drives location updates, shorten the wifi scanner wait to 5s to ensure this (also stop and restart the scanner on WifiGeoPositionProvider.startup() to ensure this). r=jdm
This commit is contained in:
parent
55ab8f380d
commit
07f106eb4e
@ -14,14 +14,10 @@ const SETTING_CHANGED_TOPIC = "mozsettings-changed";
|
||||
|
||||
let gLoggingEnabled = false;
|
||||
|
||||
// if we don't see any wifi responses in 5 seconds, send the request.
|
||||
let gTimeToWaitBeforeSending = 5000; //ms
|
||||
let gLocationRequestTimeout = 5000;
|
||||
|
||||
let gWifiScanningEnabled = true;
|
||||
let gWifiResults;
|
||||
|
||||
let gCellScanningEnabled = false;
|
||||
let gCellResults;
|
||||
|
||||
function LOG(aMsg) {
|
||||
if (gLoggingEnabled) {
|
||||
@ -59,7 +55,7 @@ function WifiGeoPositionProvider() {
|
||||
} catch (e) {}
|
||||
|
||||
try {
|
||||
gTimeToWaitBeforeSending = Services.prefs.getIntPref("geo.wifi.timeToWaitBeforeSending");
|
||||
gLocationRequestTimeout = Services.prefs.getIntPref("geo.wifi.timeToWaitBeforeSending");
|
||||
} catch (e) {}
|
||||
|
||||
try {
|
||||
@ -123,12 +119,16 @@ WifiGeoPositionProvider.prototype = {
|
||||
}
|
||||
|
||||
if (gWifiScanningEnabled && Cc["@mozilla.org/wifi/monitor;1"]) {
|
||||
this.wifiService = Cc["@mozilla.org/wifi/monitor;1"].getService(Components.interfaces.nsIWifiMonitor);
|
||||
if (this.wifiService) {
|
||||
this.wifiService.stopWatching(this);
|
||||
}
|
||||
this.wifiService = Cc["@mozilla.org/wifi/monitor;1"].getService(Ci.nsIWifiMonitor);
|
||||
this.wifiService.startWatching(this);
|
||||
}
|
||||
// wifi thread triggers WifiGeoPositionProvider to proceed, with no wifi, do manual timeout
|
||||
this.timeoutTimer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
|
||||
this.timeoutTimer.initWithCallback(this,
|
||||
gTimeToWaitBeforeSending,
|
||||
gLocationRequestTimeout,
|
||||
this.timeoutTimer.TYPE_REPEATING_SLACK);
|
||||
LOG("startup called.");
|
||||
},
|
||||
@ -163,7 +163,6 @@ WifiGeoPositionProvider.prototype = {
|
||||
},
|
||||
|
||||
onChange: function(accessPoints) {
|
||||
|
||||
function isPublic(ap) {
|
||||
let mask = "_nomap"
|
||||
let result = ap.ssid.indexOf(mask, ap.ssid.length - mask.length);
|
||||
@ -181,18 +180,19 @@ WifiGeoPositionProvider.prototype = {
|
||||
return { 'macAddress': ap.mac, 'signalStrength': ap.signal };
|
||||
};
|
||||
|
||||
let wifiData = null;
|
||||
if (accessPoints) {
|
||||
gWifiResults = accessPoints.filter(isPublic).sort(sort).map(encode);
|
||||
} else {
|
||||
gWifiResults = null;
|
||||
wifiData = accessPoints.filter(isPublic).sort(sort).map(encode);
|
||||
}
|
||||
this.sendLocationRequest(wifiData);
|
||||
},
|
||||
|
||||
onError: function (code) {
|
||||
LOG("wifi error: " + code);
|
||||
this.sendLocationRequest(null);
|
||||
},
|
||||
|
||||
updateMobileInfo: function() {
|
||||
getMobileInfo: function() {
|
||||
LOG("updateMobileInfo called");
|
||||
try {
|
||||
let radioService = Cc["@mozilla.org/ril;1"]
|
||||
@ -216,11 +216,20 @@ WifiGeoPositionProvider.prototype = {
|
||||
}
|
||||
return result;
|
||||
} catch (e) {
|
||||
gCellResults = null;
|
||||
return null;
|
||||
}
|
||||
},
|
||||
|
||||
notify: function (timeoutTimer) {
|
||||
// If Wifi scanning is disabled, then we can not depend on that for the
|
||||
// heartbeat that drives location updates. Instead, just use a timer which
|
||||
// will drive the update.
|
||||
if (gWifiScanningEnabled == false) {
|
||||
this.sendLocationRequest(null);
|
||||
}
|
||||
},
|
||||
|
||||
sendLocationRequest: function (wifiData) {
|
||||
let url = Services.urlFormatter.formatURLPref("geo.wifi.uri");
|
||||
let listener = this.listener;
|
||||
LOG("Sending request: " + url + "\n");
|
||||
@ -258,19 +267,19 @@ WifiGeoPositionProvider.prototype = {
|
||||
listener.update(newLocation);
|
||||
};
|
||||
|
||||
if (gCellScanningEnabled) {
|
||||
this.updateMobileInfo();
|
||||
let data = {};
|
||||
if (wifiData) {
|
||||
data.wifiAccessPoints = wifiData;
|
||||
}
|
||||
|
||||
let data = {};
|
||||
if (gWifiResults) {
|
||||
data.wifiAccessPoints = gWifiResults;
|
||||
}
|
||||
if (gCellResults) {
|
||||
data.cellTowers = gCellResults;
|
||||
if (gCellScanningEnabled) {
|
||||
let cellData = this.getMobileInfo();
|
||||
if (cellData) {
|
||||
data.cellTowers = cellData;
|
||||
}
|
||||
}
|
||||
|
||||
data = JSON.stringify(data);
|
||||
gWifiResults = gCellResults = null;
|
||||
LOG("sending " + data);
|
||||
xhr.send(data);
|
||||
},
|
||||
|
@ -21,6 +21,7 @@ nsWifiAccessPoint::nsWifiAccessPoint()
|
||||
mMac[0] = '\0';
|
||||
mSsid[0] = '\0';
|
||||
mSsidLen = 0;
|
||||
mSignal = -1000;
|
||||
}
|
||||
|
||||
nsWifiAccessPoint::~nsWifiAccessPoint()
|
||||
@ -70,7 +71,8 @@ bool AccessPointsEqual(nsCOMArray<nsWifiAccessPoint>& a, nsCOMArray<nsWifiAccess
|
||||
for (int32_t j = 0; j < b.Count(); j++) {
|
||||
LOG((" %s->%s | %s->%s\n", a[i]->mSsid, b[j]->mSsid, a[i]->mMac, b[j]->mMac));
|
||||
if (!strcmp(a[i]->mSsid, b[j]->mSsid) &&
|
||||
!strcmp(a[i]->mMac, b[j]->mMac)) {
|
||||
!strcmp(a[i]->mMac, b[j]->mMac) &&
|
||||
a[i]->mSignal == b[j]->mSignal) {
|
||||
found = true;
|
||||
}
|
||||
}
|
||||
|
@ -28,6 +28,8 @@ extern PRLogModuleInfo *gWifiMonitorLog;
|
||||
|
||||
class nsWifiAccessPoint;
|
||||
|
||||
#define kDefaultWifiScanInterval 5 /* seconds */
|
||||
|
||||
class nsWifiListener
|
||||
{
|
||||
public:
|
||||
|
@ -332,7 +332,7 @@ nsWifiMonitor::DoScan()
|
||||
|
||||
LOG(("waiting on monitor\n"));
|
||||
mozilla::ReentrantMonitorAutoEnter mon(mReentrantMonitor);
|
||||
mon.Wait(PR_SecondsToInterval(60));
|
||||
mon.Wait(PR_SecondsToInterval(kDefaultWifiScanInterval));
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
|
@ -159,7 +159,7 @@ nsWifiMonitor::DoScan()
|
||||
LOG(("waiting on monitor\n"));
|
||||
|
||||
ReentrantMonitorAutoEnter mon(mReentrantMonitor);
|
||||
mon.Wait(PR_SecondsToInterval(60));
|
||||
mon.Wait(PR_SecondsToInterval(kDefaultWifiScanInterval));
|
||||
}
|
||||
while (mKeepGoing);
|
||||
|
||||
|
@ -47,7 +47,7 @@ nsWifiMonitor::DoScan()
|
||||
LOG(("waiting on monitor\n"));
|
||||
|
||||
ReentrantMonitorAutoEnter mon(mReentrantMonitor);
|
||||
mon.Wait(PR_SecondsToInterval(60));
|
||||
mon.Wait(PR_SecondsToInterval(kDefaultWifiScanInterval));
|
||||
}
|
||||
while (mKeepGoing);
|
||||
|
||||
|
@ -142,7 +142,7 @@ nsWifiMonitor::DoScan()
|
||||
LOG(("waiting on monitor\n"));
|
||||
|
||||
ReentrantMonitorAutoEnter mon(mReentrantMonitor);
|
||||
mon.Wait(PR_SecondsToInterval(60));
|
||||
mon.Wait(PR_SecondsToInterval(kDefaultWifiScanInterval));
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
|
@ -123,7 +123,7 @@ nsWifiMonitor::DoScan()
|
||||
LOG(("waiting on monitor\n"));
|
||||
|
||||
ReentrantMonitorAutoEnter mon(mReentrantMonitor);
|
||||
mon.Wait(PR_SecondsToInterval(60));
|
||||
mon.Wait(PR_SecondsToInterval(kDefaultWifiScanInterval));
|
||||
}
|
||||
while (mKeepGoing);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user