зеркало из https://github.com/mozilla/pjs.git
Bug 489813 - Fire timeout error if provider fails to response after initial response. Also cleans up test. r=smaug a=jst
This commit is contained in:
Родитель
2fc02a5b23
Коммит
ab58de8c89
|
@ -363,6 +363,7 @@ user_pref("extensions.testpilot.runStudies", false);
|
|||
|
||||
user_pref("geo.wifi.uri", "http://%(server)s/tests/dom/tests/mochitest/geolocation/network_geolocation.sjs");
|
||||
user_pref("geo.wifi.testing", true);
|
||||
user_pref("geo.ignore.location_filter", true);
|
||||
|
||||
user_pref("camino.warn_when_closing", false); // Camino-only, harmless to others
|
||||
|
||||
|
|
|
@ -71,6 +71,7 @@
|
|||
#include "nsIPrefService.h"
|
||||
#include "nsIPrefBranch2.h"
|
||||
#include "nsIJSContextStack.h"
|
||||
#include "nsThreadUtils.h"
|
||||
#include "mozilla/Services.h"
|
||||
#include "mozilla/unused.h"
|
||||
|
||||
|
@ -98,6 +99,75 @@
|
|||
using mozilla::unused; // <snicker>
|
||||
using namespace mozilla::dom;
|
||||
|
||||
class RequestPromptEvent : public nsRunnable
|
||||
{
|
||||
public:
|
||||
RequestPromptEvent(nsGeolocationRequest* request)
|
||||
: mRequest(request)
|
||||
{
|
||||
}
|
||||
|
||||
NS_IMETHOD Run() {
|
||||
nsCOMPtr<nsIGeolocationPrompt> prompt = do_GetService(NS_GEOLOCATION_PROMPT_CONTRACTID);
|
||||
NS_ASSERTION(prompt, "null geolocation prompt");
|
||||
if (prompt)
|
||||
prompt->Prompt(mRequest);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
private:
|
||||
nsRefPtr<nsGeolocationRequest> mRequest;
|
||||
};
|
||||
|
||||
class RequestAllowEvent : public nsRunnable
|
||||
{
|
||||
public:
|
||||
RequestAllowEvent(int allow, nsGeolocationRequest* request)
|
||||
: mAllow(allow),
|
||||
mRequest(request)
|
||||
{
|
||||
}
|
||||
|
||||
NS_IMETHOD Run() {
|
||||
if (mAllow)
|
||||
mRequest->Allow();
|
||||
else
|
||||
mRequest->Cancel();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
private:
|
||||
PRBool mAllow;
|
||||
nsRefPtr<nsGeolocationRequest> mRequest;
|
||||
};
|
||||
|
||||
class RequestSendLocationEvent : public nsRunnable
|
||||
{
|
||||
public:
|
||||
// a bit funky. if locator is passed, that means this
|
||||
// event should remove the request from it. If we ever
|
||||
// have to do more, then we can change this around.
|
||||
RequestSendLocationEvent(nsIDOMGeoPosition* aPosition, nsGeolocationRequest* aRequest, nsGeolocation* aLocator = nsnull)
|
||||
: mPosition(aPosition),
|
||||
mRequest(aRequest),
|
||||
mLocator(aLocator)
|
||||
{
|
||||
}
|
||||
|
||||
NS_IMETHOD Run() {
|
||||
mRequest->SendLocation(mPosition);
|
||||
if (mLocator)
|
||||
mLocator->RemoveRequest(mRequest);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
private:
|
||||
nsCOMPtr<nsIDOMGeoPosition> mPosition;
|
||||
nsRefPtr<nsGeolocationRequest> mRequest;
|
||||
|
||||
nsRefPtr<nsGeolocation> mLocator;
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////
|
||||
// nsDOMGeoPositionError
|
||||
////////////////////////////////////////////////////
|
||||
|
@ -170,7 +240,6 @@ nsGeolocationRequest::nsGeolocationRequest(nsGeolocation* aLocator,
|
|||
nsIDOMGeoPositionOptions* aOptions)
|
||||
: mAllowed(PR_FALSE),
|
||||
mCleared(PR_FALSE),
|
||||
mHasSentData(PR_FALSE),
|
||||
mCallback(aCallback),
|
||||
mErrorCallback(aErrorCallback),
|
||||
mOptions(aOptions),
|
||||
|
@ -227,11 +296,9 @@ nsGeolocationRequest::Notify(nsITimer* aTimer)
|
|||
// provider yet, cancel the request. Same logic as
|
||||
// ::Cancel, just a different error
|
||||
|
||||
if (!mHasSentData) {
|
||||
NotifyError(nsIDOMGeoPositionError::TIMEOUT);
|
||||
// remove ourselves from the locator's callback lists.
|
||||
mLocator->RemoveRequest(this);
|
||||
}
|
||||
NotifyError(nsIDOMGeoPositionError::TIMEOUT);
|
||||
// remove ourselves from the locator's callback lists.
|
||||
mLocator->RemoveRequest(this);
|
||||
|
||||
mTimeoutTimer = nsnull;
|
||||
return NS_OK;
|
||||
|
@ -319,10 +386,23 @@ nsGeolocationRequest::Allow()
|
|||
// okay, we can return a cached position
|
||||
mAllowed = PR_TRUE;
|
||||
|
||||
// send the cached location
|
||||
SendLocation(lastPosition);
|
||||
nsCOMPtr<nsIRunnable> ev = new RequestSendLocationEvent(lastPosition, this, mLocator);
|
||||
NS_DispatchToMainThread(ev);
|
||||
}
|
||||
|
||||
SetTimeoutTimer();
|
||||
|
||||
mAllowed = PR_TRUE;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
void
|
||||
nsGeolocationRequest::SetTimeoutTimer()
|
||||
{
|
||||
if (mTimeoutTimer) {
|
||||
mTimeoutTimer->Cancel();
|
||||
mTimeoutTimer = nsnull;
|
||||
}
|
||||
PRInt32 timeout;
|
||||
if (mOptions && NS_SUCCEEDED(mOptions->GetTimeout(&timeout)) && timeout > 0) {
|
||||
|
||||
|
@ -332,9 +412,6 @@ nsGeolocationRequest::Allow()
|
|||
mTimeoutTimer = do_CreateInstance("@mozilla.org/timer;1");
|
||||
mTimeoutTimer->InitWithCallback(this, timeout, nsITimer::TYPE_ONE_SHOT);
|
||||
}
|
||||
|
||||
mAllowed = PR_TRUE;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -349,6 +426,11 @@ nsGeolocationRequest::SendLocation(nsIDOMGeoPosition* aPosition)
|
|||
if (mCleared || !mAllowed)
|
||||
return;
|
||||
|
||||
if (mTimeoutTimer) {
|
||||
mTimeoutTimer->Cancel();
|
||||
mTimeoutTimer = nsnull;
|
||||
}
|
||||
|
||||
// we should not pass null back to the DOM.
|
||||
if (!aPosition) {
|
||||
NotifyError(nsIDOMGeoPositionError::POSITION_UNAVAILABLE);
|
||||
|
@ -366,7 +448,7 @@ nsGeolocationRequest::SendLocation(nsIDOMGeoPosition* aPosition)
|
|||
JSContext* cx;
|
||||
stack->Pop(&cx);
|
||||
|
||||
mHasSentData = PR_TRUE;
|
||||
SetTimeoutTimer();
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -401,6 +483,8 @@ NS_IMPL_THREADSAFE_RELEASE(nsGeolocationService)
|
|||
|
||||
|
||||
static PRBool sGeoEnabled = PR_TRUE;
|
||||
static PRBool sGeoIgnoreLocationFilter = PR_FALSE;
|
||||
|
||||
static int
|
||||
GeoEnabledChangedCallback(const char *aPrefName, void *aClosure)
|
||||
{
|
||||
|
@ -408,10 +492,26 @@ GeoEnabledChangedCallback(const char *aPrefName, void *aClosure)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
GeoIgnoreLocationFilterChangedCallback(const char *aPrefName, void *aClosure)
|
||||
{
|
||||
sGeoIgnoreLocationFilter = nsContentUtils::GetBoolPref("geo.ignore.location_filter",
|
||||
PR_TRUE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
nsresult nsGeolocationService::Init()
|
||||
{
|
||||
mTimeout = nsContentUtils::GetIntPref("geo.timeout", 6000);
|
||||
|
||||
nsContentUtils::RegisterPrefCallback("geo.ignore.location_filter",
|
||||
GeoIgnoreLocationFilterChangedCallback,
|
||||
nsnull);
|
||||
|
||||
GeoIgnoreLocationFilterChangedCallback("geo.ignore.location_filter", nsnull);
|
||||
|
||||
|
||||
nsContentUtils::RegisterPrefCallback("geo.enabled",
|
||||
GeoEnabledChangedCallback,
|
||||
nsnull);
|
||||
|
@ -771,7 +871,6 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(nsGeolocation)
|
|||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
|
||||
|
||||
nsGeolocation::nsGeolocation()
|
||||
: mUpdateInProgress(PR_FALSE)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -859,33 +958,21 @@ nsGeolocation::RemoveRequest(nsGeolocationRequest* aRequest)
|
|||
void
|
||||
nsGeolocation::Update(nsIDOMGeoPosition *aSomewhere)
|
||||
{
|
||||
// This method calls out to objects which may spin and
|
||||
// event loop which may add new location objects into
|
||||
// mPendingCallbacks, and mWatchingCallbacks. Since this
|
||||
// function can only be called on the primary thread, we
|
||||
// can lock this method with a member var.
|
||||
|
||||
if (mUpdateInProgress)
|
||||
return;
|
||||
|
||||
mUpdateInProgress = PR_TRUE;
|
||||
|
||||
if (!WindowOwnerStillExists())
|
||||
{
|
||||
Shutdown();
|
||||
return;
|
||||
}
|
||||
return Shutdown();
|
||||
|
||||
// notify anyone that has been waiting
|
||||
for (PRUint32 i = 0; i< mPendingCallbacks.Length(); i++)
|
||||
mPendingCallbacks[i]->SendLocation(aSomewhere);
|
||||
for (PRUint32 i = 0; i< mPendingCallbacks.Length(); i++) {
|
||||
nsCOMPtr<nsIRunnable> ev = new RequestSendLocationEvent(aSomewhere,
|
||||
mPendingCallbacks[i]);
|
||||
NS_DispatchToMainThread(ev);
|
||||
}
|
||||
mPendingCallbacks.Clear();
|
||||
|
||||
// notify everyone that is watching
|
||||
for (PRUint32 i = 0; i< mWatchingCallbacks.Length(); i++)
|
||||
mWatchingCallbacks[i]->SendLocation(aSomewhere);
|
||||
|
||||
mUpdateInProgress = PR_FALSE;
|
||||
for (PRUint32 i = 0; i< mWatchingCallbacks.Length(); i++) {
|
||||
nsCOMPtr<nsIRunnable> ev = new RequestSendLocationEvent(aSomewhere, mWatchingCallbacks[i]);
|
||||
NS_DispatchToMainThread(ev);
|
||||
}
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
|
@ -911,17 +998,17 @@ nsGeolocation::GetCurrentPosition(nsIDOMGeoPositionCallback *callback,
|
|||
if (mOwner) {
|
||||
RegisterRequestWithPrompt(request);
|
||||
mPendingCallbacks.AppendElement(request);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
if (!nsContentUtils::IsCallerChrome())
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
request->Allow();
|
||||
|
||||
mPendingCallbacks.AppendElement(request);
|
||||
|
||||
nsCOMPtr<nsIRunnable> ev = new RequestAllowEvent(true, request);
|
||||
NS_DispatchToMainThread(ev);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
@ -1030,10 +1117,15 @@ nsGeolocation::RegisterRequestWithPrompt(nsGeolocationRequest* request)
|
|||
}
|
||||
#endif
|
||||
|
||||
nsCOMPtr<nsIGeolocationPrompt> prompt = do_GetService(NS_GEOLOCATION_PROMPT_CONTRACTID);
|
||||
NS_ASSERTION(prompt, "null geolocation prompt. geolocation will not work without one.");
|
||||
if (prompt)
|
||||
prompt->Prompt(request);
|
||||
if (nsContentUtils::GetBoolPref("geo.prompt.testing", PR_FALSE))
|
||||
{
|
||||
nsCOMPtr<nsIRunnable> ev = new RequestAllowEvent(nsContentUtils::GetBoolPref("geo.prompt.testing.allow", PR_FALSE), request);
|
||||
NS_DispatchToMainThread(ev);
|
||||
return;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIRunnable> ev = new RequestPromptEvent(request);
|
||||
NS_DispatchToMainThread(ev);
|
||||
}
|
||||
|
||||
#if !defined(WINCE_WINDOWS_MOBILE) && !defined(MOZ_MAEMO_LIBLOCATION) && !defined(ANDROID)
|
||||
|
|
|
@ -94,6 +94,7 @@ class nsGeolocationRequest
|
|||
void SendLocation(nsIDOMGeoPosition* location);
|
||||
void MarkCleared();
|
||||
PRBool Allowed() {return mAllowed;}
|
||||
void SetTimeoutTimer();
|
||||
|
||||
~nsGeolocationRequest();
|
||||
|
||||
|
@ -106,7 +107,6 @@ class nsGeolocationRequest
|
|||
void NotifyError(PRInt16 errorCode);
|
||||
PRPackedBool mAllowed;
|
||||
PRPackedBool mCleared;
|
||||
PRPackedBool mHasSentData;
|
||||
|
||||
nsCOMPtr<nsITimer> mTimeoutTimer;
|
||||
nsCOMPtr<nsIDOMGeoPositionCallback> mCallback;
|
||||
|
@ -232,8 +232,6 @@ private:
|
|||
nsTArray<nsRefPtr<nsGeolocationRequest> > mPendingCallbacks;
|
||||
nsTArray<nsRefPtr<nsGeolocationRequest> > mWatchingCallbacks;
|
||||
|
||||
PRBool mUpdateInProgress;
|
||||
|
||||
// window that this was created for. Weak reference.
|
||||
nsWeakPtr mOwner;
|
||||
|
||||
|
|
|
@ -177,16 +177,17 @@ GPSDProvider.prototype = {
|
|||
|
||||
watch: function(c) {
|
||||
LOG("watch called\n");
|
||||
try {
|
||||
// Turn GPSD buffer on, results in smoother data points which I think we want.
|
||||
// Required due to the way that different data arrives in different NMEA sentences.
|
||||
var bufferOption = "J=1\n";
|
||||
this.outputStream.write(bufferOption, bufferOption.length);
|
||||
|
||||
// Go into "watcher" mode
|
||||
var mode = "w\n";
|
||||
this.outputStream.write(mode, mode.length);
|
||||
} catch (e) { return; }
|
||||
|
||||
// Turn GPSD buffer on, results in smoother data points which I think we want.
|
||||
// Required due to the way that different data arrives in different NMEA sentences.
|
||||
var bufferOption = "J=1\n";
|
||||
this.outputStream.write(bufferOption, bufferOption.length);
|
||||
|
||||
// Go into "watcher" mode
|
||||
var mode = "w\n";
|
||||
this.outputStream.write(mode, mode.length);
|
||||
|
||||
var dataListener = {
|
||||
onStartRequest: function(request, context) {},
|
||||
onStopRequest: function(request, context, status) {},
|
||||
|
|
|
@ -14,7 +14,7 @@ function nowInSeconds()
|
|||
function LOG(aMsg) {
|
||||
if (gLoggingEnabled)
|
||||
{
|
||||
aMsg = ("*** WIFI GEO: " + aMsg);
|
||||
aMsg = "*** WIFI GEO: " + aMsg + "\n";
|
||||
Cc["@mozilla.org/consoleservice;1"].getService(Ci.nsIConsoleService).logStringMessage(aMsg);
|
||||
dump(aMsg);
|
||||
}
|
||||
|
@ -227,25 +227,18 @@ WifiGeoPositionProvider.prototype = {
|
|||
Ci.nsITimerCallback]),
|
||||
|
||||
prefService: null,
|
||||
|
||||
provider_url: null,
|
||||
wifi_service: null,
|
||||
timer: null,
|
||||
protocol: null,
|
||||
hasSeenWiFi: false,
|
||||
started: false,
|
||||
|
||||
startup: function() {
|
||||
LOG("startup called");
|
||||
if (this.started == true)
|
||||
return;
|
||||
|
||||
this.provider_url = this.prefService.getCharPref("geo.wifi.uri");
|
||||
LOG("provider url = " + this.provider_url);
|
||||
this.started = true;
|
||||
|
||||
try {
|
||||
this.protocol = this.prefService.getIntPref("geo.wifi.protocol");
|
||||
LOG("protocol = " + this.protocol);
|
||||
} catch (e) {
|
||||
this.protocol = 0;
|
||||
}
|
||||
LOG("startup called. testing mode is" + gTestingEnabled);
|
||||
// if we don't see anything in 5 seconds, kick of one IP geo lookup.
|
||||
// if we are testing, just hammer this callback so that we are more or less
|
||||
// always sending data. It doesn't matter if we have an access point or not.
|
||||
|
@ -284,6 +277,8 @@ WifiGeoPositionProvider.prototype = {
|
|||
let prefBranch = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefBranch);
|
||||
if (prefBranch.getIntPref("network.cookie.lifetimePolicy") != 0)
|
||||
prefBranch.deleteBranch("geo.wifi.access_token.");
|
||||
|
||||
this.started = false;
|
||||
},
|
||||
|
||||
getAccessTokenForURL: function(url)
|
||||
|
@ -308,7 +303,6 @@ WifiGeoPositionProvider.prototype = {
|
|||
}
|
||||
catch (e) {
|
||||
accessToken = "";
|
||||
LOG("Error: "+ e);
|
||||
}
|
||||
return accessToken;
|
||||
},
|
||||
|
@ -318,16 +312,22 @@ WifiGeoPositionProvider.prototype = {
|
|||
LOG("onChange called");
|
||||
this.hasSeenWiFi = true;
|
||||
|
||||
// Cache the preferred protocol for use inside the XHR callback
|
||||
var protocol = this.protocol;
|
||||
|
||||
// send our request to a wifi geolocation network provider:
|
||||
var xhr = Components.classes["@mozilla.org/xmlextras/xmlhttprequest;1"].createInstance(Ci.nsIXMLHttpRequest);
|
||||
var xhr = Components.classes["@mozilla.org/xmlextras/xmlhttprequest;1"]
|
||||
.createInstance(Ci.nsIXMLHttpRequest);
|
||||
|
||||
// This is a background load
|
||||
xhr.mozBackgroundRequest = true;
|
||||
|
||||
xhr.open("POST", this.provider_url, false);
|
||||
var provider_url = this.prefService.getCharPref("geo.wifi.uri");
|
||||
var provider_protocol = 0;
|
||||
try {
|
||||
provider_protocol = this.prefService.getIntPref("geo.wifi.protocol");
|
||||
} catch (e) {}
|
||||
|
||||
LOG("provider url = " + provider_url);
|
||||
|
||||
xhr.open("POST", provider_url, false);
|
||||
|
||||
// set something so that we can strip cookies
|
||||
xhr.channel.loadFlags = Ci.nsIChannel.LOAD_ANONYMOUS;
|
||||
|
@ -340,17 +340,22 @@ WifiGeoPositionProvider.prototype = {
|
|||
|
||||
LOG("xhr onload...");
|
||||
|
||||
// if we get a bad response, we will throw and never report a location
|
||||
var response;
|
||||
switch (protocol) {
|
||||
case 1:
|
||||
LOG("service returned: " + req.target.responseXML);
|
||||
response = HELD.decode(req.target.responseXML);
|
||||
break;
|
||||
case 0:
|
||||
default:
|
||||
LOG("service returned: " + req.target.responseText);
|
||||
response = JSON.parse(req.target.responseText);
|
||||
try {
|
||||
// if we get a bad response, we will throw and never report a location
|
||||
var response;
|
||||
switch (provider_protocol) {
|
||||
case 1:
|
||||
LOG("service returned: " + req.target.responseXML);
|
||||
response = HELD.decode(req.target.responseXML);
|
||||
break;
|
||||
case 0:
|
||||
default:
|
||||
LOG("service returned: " + req.target.responseText);
|
||||
response = JSON.parse(req.target.responseText);
|
||||
}
|
||||
} catch (e) {
|
||||
LOG("Parse failed");
|
||||
return;
|
||||
}
|
||||
|
||||
// response looks something like:
|
||||
|
@ -393,7 +398,7 @@ WifiGeoPositionProvider.prototype = {
|
|||
update.update(newLocation);
|
||||
};
|
||||
|
||||
var accessToken = this.getAccessTokenForURL(this.provider_url);
|
||||
var accessToken = this.getAccessTokenForURL(provider_url);
|
||||
|
||||
var request = {
|
||||
version: "1.1.0",
|
||||
|
@ -414,7 +419,7 @@ WifiGeoPositionProvider.prototype = {
|
|||
}
|
||||
|
||||
var requestString;
|
||||
switch (protocol) {
|
||||
switch (provider_protocol) {
|
||||
case 1:
|
||||
requestString = HELD.encode(request);
|
||||
break;
|
||||
|
@ -434,9 +439,14 @@ WifiGeoPositionProvider.prototype = {
|
|||
},
|
||||
|
||||
notify: function (timer) {
|
||||
if (this.hasSeenWiFi == false)
|
||||
this.onChange(null);
|
||||
this.timer = null;
|
||||
if (!gTestingEnabled) {
|
||||
if (this.hasSeenWiFi == false)
|
||||
this.onChange(null);
|
||||
this.timer = null;
|
||||
return;
|
||||
}
|
||||
// if we are testing, we need to hammer this.
|
||||
this.onChange(null);
|
||||
},
|
||||
|
||||
};
|
||||
|
|
|
@ -24,13 +24,11 @@ function error(error)
|
|||
{
|
||||
ok(0, "error occured trying to get geolocation from chrome");
|
||||
SimpleTest.finish();
|
||||
newwindow.close();
|
||||
}
|
||||
function done(position)
|
||||
{
|
||||
ok(position, "geolocation was found from chrome");
|
||||
SimpleTest.finish();
|
||||
newwindow.close();
|
||||
}
|
||||
</script>
|
||||
|
||||
|
|
|
@ -45,31 +45,26 @@ include $(DEPTH)/config/autoconf.mk
|
|||
include $(topsrcdir)/config/rules.mk
|
||||
|
||||
_TEST_FILES = \
|
||||
test_manyCurrentSerial.html \
|
||||
test_allowCurrent.html \
|
||||
test_allowWatch.html \
|
||||
test_cancelCurrent.html \
|
||||
test_cancelWatch.html \
|
||||
test_clearWatch.html \
|
||||
test_clearWatch_invalid.html \
|
||||
test_manyCurrentConcurrent.html \
|
||||
test_garbageWatch.html \
|
||||
test_manyCurrentSerial.html \
|
||||
test_manyWatchConcurrent.html \
|
||||
test_manyWatchSerial.html \
|
||||
test_manyWindows.html \
|
||||
test_allowCurrent.html \
|
||||
test_allowWatch.html \
|
||||
test_clearWatch.html \
|
||||
test_clearWatch_invalid.html \
|
||||
test_timeoutWatch.html \
|
||||
test_windowClose.html \
|
||||
windowTest.html \
|
||||
geolocation_common.js \
|
||||
geolocation.html \
|
||||
test_optional_api_params.html \
|
||||
test_windowClose.html \
|
||||
test_timerRestartWatch.html \
|
||||
geolocation.html \
|
||||
geolocation_common.js \
|
||||
network_geolocation.sjs \
|
||||
windowTest.html \
|
||||
$(NULL)
|
||||
|
||||
ifndef MOZ_PHOENIX
|
||||
_TEST_FILES += test_cancelCurrent.html \
|
||||
test_cancelWatch.html \
|
||||
$(NULL)
|
||||
endif
|
||||
|
||||
libs:: $(_TEST_FILES)
|
||||
$(INSTALL) $(foreach f,$^,"$f") $(DEPTH)/_tests/testing/mochitest/tests/$(relativesrcdir)
|
||||
|
||||
|
|
|
@ -1,10 +1,33 @@
|
|||
|
||||
function sleep(delay)
|
||||
{
|
||||
var start = Date.now();
|
||||
while (Date.now() < start + delay);
|
||||
}
|
||||
|
||||
function force_prompt(allow) {
|
||||
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
|
||||
var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
|
||||
prefs.setBoolPref("geo.prompt.testing", true);
|
||||
prefs.setBoolPref("geo.prompt.testing.allow", allow);
|
||||
}
|
||||
|
||||
function reset_prompt() {
|
||||
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
|
||||
var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
|
||||
prefs.setBoolPref("geo.prompt.testing", false);
|
||||
prefs.setBoolPref("geo.prompt.testing.allow", false);
|
||||
}
|
||||
|
||||
|
||||
function start_sending_garbage()
|
||||
{
|
||||
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
|
||||
var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
|
||||
prefs.setCharPref("geo.wifi.uri", "http://mochi.test:8888/tests/dom/tests/mochitest/geolocation/network_geolocation.sjs?action=respond-garbage");
|
||||
|
||||
// we need to be sure that all location data has been purged/set.
|
||||
sleep(1000);
|
||||
}
|
||||
|
||||
function stop_sending_garbage()
|
||||
|
@ -12,6 +35,9 @@ function stop_sending_garbage()
|
|||
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
|
||||
var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
|
||||
prefs.setCharPref("geo.wifi.uri", "http://mochi.test:8888/tests/dom/tests/mochitest/geolocation/network_geolocation.sjs");
|
||||
|
||||
// we need to be sure that all location data has been purged/set.
|
||||
sleep(1000);
|
||||
}
|
||||
|
||||
function stop_geolocationProvider()
|
||||
|
@ -19,6 +45,9 @@ function stop_geolocationProvider()
|
|||
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
|
||||
var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
|
||||
prefs.setCharPref("geo.wifi.uri", "http://mochi.test:8888/tests/dom/tests/mochitest/geolocation/network_geolocation.sjs?action=stop-responding");
|
||||
|
||||
// we need to be sure that all location data has been purged/set.
|
||||
sleep(1000);
|
||||
}
|
||||
|
||||
function resume_geolocationProvider()
|
||||
|
@ -52,60 +81,4 @@ function check_geolocation(location) {
|
|||
ok (location.coords.longitude == -122.08769, "lon matches known value");
|
||||
ok(location.coords.altitude == 42, "alt matches known value");
|
||||
ok(location.coords.altitudeAccuracy == 42, "alt acc matches known value");
|
||||
|
||||
}
|
||||
|
||||
|
||||
function getChromeWindow()
|
||||
{
|
||||
const Ci = Components.interfaces;
|
||||
var chromeWin = window.top
|
||||
.QueryInterface(Ci.nsIInterfaceRequestor)
|
||||
.getInterface(Ci.nsIWebNavigation)
|
||||
.QueryInterface(Ci.nsIDocShellTreeItem)
|
||||
.rootTreeItem
|
||||
.QueryInterface(Ci.nsIInterfaceRequestor)
|
||||
.getInterface(Ci.nsIDOMWindow)
|
||||
.QueryInterface(Ci.nsIDOMChromeWindow);
|
||||
return chromeWin;
|
||||
}
|
||||
|
||||
function getNotificationBox()
|
||||
{
|
||||
var chromeWin = getChromeWindow();
|
||||
var notifyBox = chromeWin.getNotificationBox(window.top);
|
||||
|
||||
return notifyBox;
|
||||
}
|
||||
|
||||
function clickNotificationButton(aButtonIndex) {
|
||||
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
|
||||
|
||||
// First, check for new-style Firefox notifications
|
||||
var chromeWin = getChromeWindow();
|
||||
if (chromeWin.PopupNotifications) {
|
||||
var panel = chromeWin.PopupNotifications.panel;
|
||||
var notificationEl = panel.getElementsByAttribute("id", "geolocation-notification")[0];
|
||||
if (aButtonIndex == kAcceptButton)
|
||||
notificationEl.button.doCommand();
|
||||
else if (aButtonIndex == kDenyButton)
|
||||
throw "clickNotificationButton(kDenyButton) isn't supported in Firefox";
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// Otherwise, fall back to looking for a notificationbox
|
||||
// This is a bit of a hack. The notification doesn't have an API to
|
||||
// trigger buttons, so we dive down into the implementation and twiddle
|
||||
// the buttons directly.
|
||||
var box = getNotificationBox();
|
||||
ok(box, "Got notification box");
|
||||
var bar = box.getNotificationWithValue("geolocation");
|
||||
ok(bar, "Got geolocation notification");
|
||||
var button = bar.getElementsByTagName("button").item(aButtonIndex);
|
||||
ok(button, "Got button");
|
||||
button.doCommand();
|
||||
}
|
||||
|
||||
const kAcceptButton = 0;
|
||||
const kDenyButton = 1;
|
||||
|
|
|
@ -20,29 +20,17 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=478911
|
|||
<pre id="test">
|
||||
<script class="testbody" type="text/javascript">
|
||||
|
||||
var hasAccepted = false;
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
resume_geolocationProvider();
|
||||
force_prompt(true);
|
||||
|
||||
function successCallback(position) {
|
||||
ok(hasAccepted, "Ensure that accept was pressed");
|
||||
check_geolocation(position);
|
||||
reset_prompt();
|
||||
SimpleTest.finish();
|
||||
}
|
||||
|
||||
function accept() {
|
||||
hasAccepted = true;
|
||||
clickNotificationButton(kAcceptButton);
|
||||
}
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
var options = {
|
||||
maximumAge: 0,
|
||||
};
|
||||
|
||||
// one-shot position requests
|
||||
navigator.geolocation.getCurrentPosition(successCallback, null, options);
|
||||
|
||||
setTimeout(accept, 50);
|
||||
navigator.geolocation.getCurrentPosition(successCallback);
|
||||
|
||||
</script>
|
||||
</pre>
|
||||
|
|
|
@ -20,31 +20,21 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=478911
|
|||
<pre id="test">
|
||||
<script class="testbody" type="text/javascript">
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
resume_geolocationProvider();
|
||||
force_prompt(true);
|
||||
|
||||
var watchID;
|
||||
var hasAccepted = false;
|
||||
|
||||
function successCallback(position) {
|
||||
ok(hasAccepted, "Ensure that accept was pressed");
|
||||
check_geolocation(position);
|
||||
|
||||
navigator.geolocation.clearWatch(watchID);
|
||||
|
||||
reset_prompt();
|
||||
SimpleTest.finish();
|
||||
}
|
||||
|
||||
function accept() {
|
||||
hasAccepted = true;
|
||||
clickNotificationButton(kAcceptButton);
|
||||
}
|
||||
|
||||
/** Test for Bug **/
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
watchID = navigator.geolocation.watchPosition(successCallback, null, null);
|
||||
|
||||
setTimeout(accept, 50);
|
||||
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
|
|
|
@ -20,25 +20,24 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=478911
|
|||
<pre id="test">
|
||||
<script class="testbody" type="text/javascript">
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
resume_geolocationProvider();
|
||||
force_prompt(false);
|
||||
|
||||
function failureCallback(error) {
|
||||
ok(error.code == error.PERMISSION_DENIED, "Ensure that the error was PERMISSION_DENIED");
|
||||
reset_prompt();
|
||||
SimpleTest.finish();
|
||||
}
|
||||
|
||||
function successCallback(position){
|
||||
ok(0, "Success was called when it shouldn't have been. major problem");
|
||||
reset_prompt();
|
||||
SimpleTest.finish();
|
||||
}
|
||||
|
||||
/** Test for Bug **/
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
navigator.geolocation.getCurrentPosition(successCallback, failureCallback, null);
|
||||
|
||||
// click deny
|
||||
setTimeout(clickNotificationButton, 50, kDenyButton);
|
||||
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
|
|
|
@ -20,27 +20,26 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=478911
|
|||
<pre id="test">
|
||||
<script class="testbody" type="text/javascript">
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
resume_geolocationProvider();
|
||||
force_prompt(false);
|
||||
|
||||
var watchID;
|
||||
|
||||
function failureCallback(error) {
|
||||
ok(error.code == error.PERMISSION_DENIED, "Ensure that the error was PERMISSION_DENIED");
|
||||
reset_prompt();
|
||||
SimpleTest.finish();
|
||||
}
|
||||
|
||||
function successCallback(position){
|
||||
ok(0, "Success was called when it shouldn't have been. major problem");
|
||||
reset_prompt();
|
||||
SimpleTest.finish();
|
||||
}
|
||||
|
||||
/** Test for Bug **/
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
watchID = navigator.geolocation.watchPosition(successCallback, failureCallback, null);
|
||||
|
||||
// click deny
|
||||
setTimeout(clickNotificationButton, 50, kDenyButton);
|
||||
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
|
|
|
@ -20,8 +20,13 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=478911
|
|||
<pre id="test">
|
||||
<script class="testbody" type="text/javascript">
|
||||
|
||||
var watchID;
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
resume_geolocationProvider();
|
||||
force_prompt(true)
|
||||
|
||||
var hasBeenCleared = false;
|
||||
var successWasCalledAfterClear = false;
|
||||
|
||||
function failureCallback(error)
|
||||
{
|
||||
ok(0, "we should not be seeing failures from this watchPosition");
|
||||
|
@ -29,8 +34,7 @@ function failureCallback(error)
|
|||
|
||||
function successCallback(position) {
|
||||
if (hasBeenCleared == true) {
|
||||
// we should not be called here
|
||||
ok(0, "successCallback was called after clear");
|
||||
successWasCalledAfterClear = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -40,22 +44,17 @@ function clearWatch() {
|
|||
}
|
||||
|
||||
function testAccepted() {
|
||||
ok(!successWasCalledAfterClear, "The successCallback should not be called after clear");
|
||||
reset_prompt();
|
||||
SimpleTest.finish();
|
||||
}
|
||||
|
||||
|
||||
/** Test for Bug **/
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
watchID = navigator.geolocation.watchPosition(successCallback, failureCallback, null);
|
||||
|
||||
setTimeout(clickNotificationButton, 10, kAcceptButton);
|
||||
setTimeout(clearWatch, 250);
|
||||
|
||||
setTimeout(clearWatch, 50);
|
||||
|
||||
// wait for position changes
|
||||
setTimeout(testAccepted, 1000);
|
||||
setTimeout(testAccepted, 2000);
|
||||
|
||||
</script>
|
||||
</pre>
|
||||
|
|
|
@ -19,8 +19,6 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=463039
|
|||
<pre id="test">
|
||||
<script class="testbody" type="text/javascript">
|
||||
|
||||
/** Test for Bug 463039 **/
|
||||
|
||||
// there are no watches, so this should always throw
|
||||
for (x=-10; x<10; x++) {
|
||||
navigator.geolocation.clearWatch(x);
|
||||
|
|
|
@ -22,18 +22,22 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=482260
|
|||
/** Test for Bug **/
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
resume_geolocationProvider();
|
||||
force_prompt(true);
|
||||
|
||||
start_sending_garbage();
|
||||
|
||||
function successCallback(pos){
|
||||
ok(false, "success should have never been called.");
|
||||
stop_sending_garbage();
|
||||
reset_prompt();
|
||||
SimpleTest.finish();
|
||||
}
|
||||
|
||||
function errorCallback(err) {
|
||||
ok(err.code == err.TIMEOUT, "ensure error is a timeout.");
|
||||
stop_sending_garbage();
|
||||
reset_prompt();
|
||||
SimpleTest.finish();
|
||||
}
|
||||
|
||||
|
@ -47,8 +51,6 @@ navigator.geolocation.watchPosition(successCallback,
|
|||
errorCallback,
|
||||
options);
|
||||
|
||||
setTimeout(clickNotificationButton, 10, kAcceptButton);
|
||||
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
|
|
|
@ -20,40 +20,25 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=482260
|
|||
<pre id="test">
|
||||
<script class="testbody" type="text/javascript">
|
||||
|
||||
var completeCount = 100;
|
||||
|
||||
var hasAccepted = false;
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
resume_geolocationProvider();
|
||||
force_prompt(true);
|
||||
|
||||
var successCallbackCalled = false;
|
||||
|
||||
function successCallback(position) {
|
||||
check_geolocation(position);
|
||||
successCallbackCalled = true;
|
||||
}
|
||||
|
||||
function accept() {
|
||||
hasAccepted = true;
|
||||
clickNotificationButton(kAcceptButton);
|
||||
}
|
||||
for (var x = 0; x < 100; x++)
|
||||
navigator.geolocation.getCurrentPosition(successCallback);
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
// one-shot position requests
|
||||
|
||||
var options = {
|
||||
maximumAge: 0,
|
||||
};
|
||||
|
||||
var y = completeCount;
|
||||
for (var x=0; x< y; x++)
|
||||
navigator.geolocation.getCurrentPosition(successCallback, null, options);
|
||||
|
||||
setTimeout(accept, 50);
|
||||
setTimeout(done, 1000);
|
||||
|
||||
function done() {
|
||||
completeCount--;
|
||||
ok(1, "Saw all successCallbacks");
|
||||
function testPassed() {
|
||||
ok(successCallbackCalled, "if nothing crashed, all okay");
|
||||
reset_prompt();
|
||||
SimpleTest.finish();
|
||||
}
|
||||
setTimeout(testPassed, 1000);
|
||||
|
||||
</script>
|
||||
</pre>
|
||||
|
|
|
@ -20,33 +20,25 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=482260
|
|||
<pre id="test">
|
||||
<script class="testbody" type="text/javascript">
|
||||
|
||||
var completeCount = 1000;
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
var hasAccepted = false;
|
||||
resume_geolocationProvider();
|
||||
force_prompt(true)
|
||||
|
||||
var keepGoing = 10;
|
||||
|
||||
function successCallback(position) {
|
||||
check_geolocation(position);
|
||||
completeCount--;
|
||||
if (completeCount > 0)
|
||||
navigator.geolocation.getCurrentPosition(successCallback, null, null);
|
||||
if (keepGoing-- > 0) {
|
||||
setTimeout(function() {navigator.geolocation.getCurrentPosition(successCallback);}, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
ok(1, "100 successful calls");
|
||||
reset_prompt();
|
||||
SimpleTest.finish();
|
||||
}
|
||||
|
||||
function accept() {
|
||||
hasAccepted = true;
|
||||
clickNotificationButton(kAcceptButton);
|
||||
}
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
var options = {
|
||||
maximumAge: 0,
|
||||
};
|
||||
|
||||
// one-shot position requests
|
||||
navigator.geolocation.getCurrentPosition(successCallback, null, options);
|
||||
|
||||
setTimeout(accept, 50);
|
||||
navigator.geolocation.getCurrentPosition(successCallback);
|
||||
|
||||
</script>
|
||||
</pre>
|
||||
|
|
|
@ -20,40 +20,25 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=482260
|
|||
<pre id="test">
|
||||
<script class="testbody" type="text/javascript">
|
||||
|
||||
var completeCount = 100;
|
||||
|
||||
var hasAccepted = false;
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
resume_geolocationProvider();
|
||||
force_prompt(true);
|
||||
|
||||
var successCallbackCalled = false;
|
||||
|
||||
function successCallback(position) {
|
||||
check_geolocation(position);
|
||||
successCallbackCalled = true;
|
||||
}
|
||||
|
||||
function accept() {
|
||||
hasAccepted = true;
|
||||
clickNotificationButton(kAcceptButton);
|
||||
}
|
||||
for (var x = 0; x < 100; x++)
|
||||
navigator.geolocation.watchPosition(successCallback);
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
// one-shot position requests
|
||||
|
||||
var options = {
|
||||
maximumAge: 0,
|
||||
};
|
||||
|
||||
var y = completeCount;
|
||||
for (var x=0; x< y; x++)
|
||||
navigator.geolocation.watchPosition(successCallback, null, options);
|
||||
|
||||
setTimeout(accept, 50);
|
||||
setTimeout(done, 1000);
|
||||
|
||||
function done() {
|
||||
completeCount--;
|
||||
ok(1, "Saw all successCallbacks");
|
||||
function testPassed() {
|
||||
ok(successCallbackCalled, "if nothing crashed, all okay");
|
||||
reset_prompt();
|
||||
SimpleTest.finish();
|
||||
}
|
||||
setTimeout(testPassed, 1000);
|
||||
|
||||
</script>
|
||||
</pre>
|
||||
|
|
|
@ -20,16 +20,15 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=482260
|
|||
<pre id="test">
|
||||
<script class="testbody" type="text/javascript">
|
||||
|
||||
var hasAccepted = false;
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
resume_geolocationProvider();
|
||||
force_prompt(true);
|
||||
|
||||
var watchID = 0;
|
||||
var completeCount = 10;
|
||||
|
||||
var options = {
|
||||
maximumAge: 0,
|
||||
};
|
||||
|
||||
function successCallback(position) {
|
||||
check_geolocation(position);
|
||||
|
||||
navigator.geolocation.clearWatch(watchID);
|
||||
|
||||
|
@ -37,23 +36,15 @@ function successCallback(position) {
|
|||
|
||||
if (completeCount==0) {
|
||||
ok(1, "all watchPosition successCallbacks called");
|
||||
reset_prompt();
|
||||
SimpleTest.finish();
|
||||
} else {
|
||||
watchID = navigator.geolocation.watchPosition(successCallback, null, options);
|
||||
setTimeout(accept, 50);
|
||||
return;
|
||||
}
|
||||
|
||||
watchID = navigator.geolocation.watchPosition(successCallback);
|
||||
}
|
||||
|
||||
function accept() {
|
||||
hasAccepted = true;
|
||||
clickNotificationButton(kAcceptButton);
|
||||
}
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
// one-shot position requests
|
||||
watchID = navigator.geolocation.watchPosition(successCallback, null, options);
|
||||
setTimeout(accept, 50);
|
||||
watchID = navigator.geolocation.watchPosition(successCallback);
|
||||
|
||||
</script>
|
||||
</pre>
|
||||
|
|
|
@ -21,6 +21,10 @@ href="https://bugzilla.mozilla.org/show_bug.cgi?id=478911">Crash in Multiple Win
|
|||
<pre id="test">
|
||||
<script class="testbody" type="text/javascript">
|
||||
|
||||
// ensure we are using the right testing provider
|
||||
resume_geolocationProvider();
|
||||
force_prompt(true);
|
||||
|
||||
/** Test for Bug **/
|
||||
|
||||
var numberOfWindows = 5; // 20 seems to be the default max popups during the mochitest run
|
||||
|
@ -48,6 +52,7 @@ function checkDone()
|
|||
{
|
||||
ok(navigator.geolocation, "Opened a bunch of windows and didn't crash.");
|
||||
clearInterval(timer);
|
||||
reset_prompt();
|
||||
SimpleTest.finish();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,6 +19,10 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=452566
|
|||
<pre id="test">
|
||||
<script class="testbody" type="text/javascript">
|
||||
|
||||
// ensure we are using the right testing provider
|
||||
resume_geolocationProvider();
|
||||
force_prompt(true)
|
||||
|
||||
/** Test for Bug 452566 **/
|
||||
|
||||
const NOT_ENOUGH_ARGS = 2153185281;
|
||||
|
@ -105,9 +109,8 @@ try {
|
|||
}
|
||||
ok(!exception, exception);
|
||||
|
||||
// Successful calls trigger a geolocation notification,
|
||||
// so clean up ready for the next test.
|
||||
clickNotificationButton(kAcceptButton);
|
||||
reset_prompt();
|
||||
|
||||
</script>
|
||||
</pre>
|
||||
|
|
|
@ -21,6 +21,10 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=455327
|
|||
<script class="testbody" type="text/javascript">
|
||||
/** Test for Bug **/
|
||||
|
||||
// ensure we are using the right testing provider
|
||||
resume_geolocationProvider();
|
||||
force_prompt(true);
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
stop_geolocationProvider();
|
||||
|
@ -28,6 +32,7 @@ stop_geolocationProvider();
|
|||
function successCallback(pos){
|
||||
ok(false, "success should have never been called.");
|
||||
resume_geolocationProvider();
|
||||
reset_prompt()
|
||||
SimpleTest.finish();
|
||||
}
|
||||
|
||||
|
@ -37,6 +42,7 @@ function errorCallback(err) {
|
|||
else
|
||||
ok(err.code == err.TIMEOUT, "ensure error is a timeout.");
|
||||
resume_geolocationProvider();
|
||||
reset_prompt()
|
||||
SimpleTest.finish();
|
||||
}
|
||||
|
||||
|
@ -49,9 +55,6 @@ var options = {
|
|||
navigator.geolocation.watchPosition(successCallback,
|
||||
errorCallback,
|
||||
options);
|
||||
|
||||
setTimeout(clickNotificationButton, 10, kAcceptButton);
|
||||
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
|
|
|
@ -0,0 +1,55 @@
|
|||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=526326
|
||||
-->
|
||||
<head>
|
||||
<title>Test for watchPosition </title>
|
||||
<script type="text/javascript" src="/MochiKit/packed.js"></script>
|
||||
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<script type="text/javascript" src="geolocation_common.js"></script>
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
|
||||
</head>
|
||||
<body>
|
||||
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=526326">Mozilla Bug 526326</a>
|
||||
<p id="display"></p>
|
||||
<div id="content" style="display: none">
|
||||
|
||||
</div>
|
||||
<pre id="test">
|
||||
<script class="testbody" type="text/javascript">
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
// ensure we are using the right testing provider
|
||||
resume_geolocationProvider();
|
||||
force_prompt(true);
|
||||
|
||||
var watchID;
|
||||
|
||||
function errorCallback(err) {
|
||||
ok(err.code == err.TIMEOUT, "ensure error is a timeout.");
|
||||
resume_geolocationProvider();
|
||||
reset_prompt();
|
||||
SimpleTest.finish();
|
||||
}
|
||||
|
||||
function successCallback(position) {
|
||||
// Now that we got a success callback, lets try to ensure
|
||||
// that we get a timeout error.
|
||||
stop_geolocationProvider();
|
||||
}
|
||||
|
||||
var options = {
|
||||
maximumAge: 0,
|
||||
timeout: 1000
|
||||
};
|
||||
|
||||
watchID = navigator.geolocation.watchPosition(successCallback, errorCallback, options);
|
||||
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -21,10 +21,13 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=493615
|
|||
<script class="testbody" type="text/javascript">
|
||||
|
||||
function done() {
|
||||
ok(1, "no crash, so pass.");
|
||||
SimpleTest.finish();
|
||||
reset_prompt();
|
||||
}
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
force_prompt(true);
|
||||
|
||||
window.open("windowTest.html");
|
||||
|
||||
|
|
|
@ -26,13 +26,7 @@ function successCallback(position) {
|
|||
opener.done();
|
||||
}
|
||||
|
||||
function accept() {
|
||||
clickNotificationButton(kAcceptButton);
|
||||
}
|
||||
|
||||
navigator.geolocation.watchPosition(successCallback, null, null);
|
||||
setTimeout(accept, 50);
|
||||
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
|
|
Загрузка…
Ссылка в новой задаче