Bug 824432 - Don't cancel request if it's a watch request. r=jdm

This commit is contained in:
Kan-Ru Chen (陳侃如) 2012-12-28 14:46:57 +08:00
parent 742e5a2607
commit 1c9bec0e39
2 changed files with 23 additions and 9 deletions

View File

@ -340,15 +340,22 @@ nsGeolocationRequest::NotifyError(int16_t errorCode)
NS_IMETHODIMP
nsGeolocationRequest::Notify(nsITimer* aTimer)
{
// If we haven't gotten an answer from the geolocation
// provider yet, cancel the request. Same logic as
// ::Cancel, just a different error
if (mCleared) {
return NS_OK;
}
// If we haven't gotten an answer from the geolocation
// provider yet, fire a TIMEOUT error and reset the timer.
if (!mIsWatchPositionRequest) {
mLocator->RemoveRequest(this);
}
// remove ourselves from the locator's callback lists.
mLocator->RemoveRequest(this);
NotifyError(nsIDOMGeoPositionError::TIMEOUT);
mTimeoutTimer = nullptr;
if (mIsWatchPositionRequest) {
SetTimeoutTimer();
}
return NS_OK;
}

View File

@ -26,12 +26,19 @@ resume_geolocationProvider();
force_prompt(true);
var watchID;
var times = 0;
function errorCallback(err) {
ok(err.code == err.TIMEOUT, "ensure error is a timeout.");
resume_geolocationProvider();
reset_prompt();
SimpleTest.finish();
times++;
// make sure we got at least 3 times errorCallback
if (times >= 3) {
navigator.geolocation.clearWatch(watchID);
resume_geolocationProvider();
reset_prompt();
SimpleTest.finish();
}
}
function successCallback(position) {