Bug 489813 - Fire timeout error if provider fails to response after initial response. Also cleans up test. r=olli

--HG--
extra : rebase_source : 00aa6024b9e3e998801cf548b8ade5c532a6965d
This commit is contained in:
Doug Turner 2010-08-04 13:58:15 -07:00
parent cc491d47e3
commit 3123a8d709
23 changed files with 341 additions and 282 deletions

View File

@ -330,6 +330,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

View File

@ -71,6 +71,7 @@
#include "nsIPrefService.h"
#include "nsIPrefBranch2.h"
#include "nsIJSContextStack.h"
#include "nsThreadUtils.h"
#include "mozilla/Services.h"
#include "mozilla/unused.h"
@ -97,6 +98,75 @@
using mozilla::unused; // <snicker>
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
////////////////////////////////////////////////////
@ -169,7 +239,6 @@ nsGeolocationRequest::nsGeolocationRequest(nsGeolocation* aLocator,
nsIDOMGeoPositionOptions* aOptions)
: mAllowed(PR_FALSE),
mCleared(PR_FALSE),
mHasSentData(PR_FALSE),
mCallback(aCallback),
mErrorCallback(aErrorCallback),
mOptions(aOptions),
@ -226,11 +295,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;
@ -318,10 +385,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) {
@ -331,9 +411,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
@ -348,6 +425,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);
@ -365,7 +447,7 @@ nsGeolocationRequest::SendLocation(nsIDOMGeoPosition* aPosition)
JSContext* cx;
stack->Pop(&cx);
mHasSentData = PR_TRUE;
SetTimeoutTimer();
}
void
@ -400,6 +482,8 @@ NS_IMPL_THREADSAFE_RELEASE(nsGeolocationService)
static PRBool sGeoEnabled = PR_TRUE;
static PRBool sGeoIgnoreLocationFilter = PR_FALSE;
static int
GeoEnabledChangedCallback(const char *aPrefName, void *aClosure)
{
@ -407,10 +491,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);
@ -770,7 +870,6 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(nsGeolocation)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
nsGeolocation::nsGeolocation()
: mUpdateInProgress(PR_FALSE)
{
}
@ -858,33 +957,26 @@ 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();
printf("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= nsGeolocation::Update called and there are %d / %d pending\n", mPendingCallbacks.Length(), mWatchingCallbacks.Length());
// 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);
for (PRUint32 i = 0; i< mWatchingCallbacks.Length(); i++) {
nsCOMPtr<nsIRunnable> ev = new RequestSendLocationEvent(aSomewhere, mWatchingCallbacks[i]);
NS_DispatchToMainThread(ev);
}
printf("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= nsGeolocation::Update DONE\n");
mUpdateInProgress = PR_FALSE;
}
NS_IMETHODIMP
@ -910,17 +1002,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;
}
@ -1041,10 +1133,16 @@ 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))
{
printf("************** Geolocation Prompt is in test mode.\n");
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)

View File

@ -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;

View File

@ -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>

View File

@ -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)

View File

@ -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")[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;

View File

@ -20,29 +20,19 @@ 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");
dump("aaaaaaaaaaaaaa!!!\n");
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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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);

View File

@ -22,18 +22,23 @@ 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.");
dump("success callback sent: " + pos + "\n");
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 +52,6 @@ navigator.geolocation.watchPosition(successCallback,
errorCallback,
options);
setTimeout(clickNotificationButton, 10, kAcceptButton);
</script>
</pre>
</body>

View File

@ -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>

View File

@ -20,33 +20,27 @@ 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);
dump("----------> "+ keepGoing +"\n");
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>

View File

@ -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>

View File

@ -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>

View File

@ -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();
}
}

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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");

View File

@ -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>