Backed out changeset 1d8d2deb3644
authorKyle Huey <me@kylehuey.com>
Wed, 04 Aug 2010 17:36:54 -0700
changeset 48884 ad122c354040e89e9de19514d3eae26cda6faa6c
parent 48871 1d8d2deb36442e11ebe2d601576be93caa16eb86
child 48885 1c471ec3e93a68dd0a8b8709ae10ab178150f322
push id14847
push userme@kylehuey.com
push dateThu, 05 Aug 2010 00:39:47 +0000
treeherdermozilla-central@1c471ec3e93a [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
milestone2.0b4pre
backs out1d8d2deb36442e11ebe2d601576be93caa16eb86
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Backed out changeset 1d8d2deb3644
build/automation.py.in
dom/src/geolocation/nsGeolocation.cpp
dom/src/geolocation/nsGeolocation.h
dom/tests/mochitest/chrome/test_geolocation.xul
dom/tests/mochitest/geolocation/Makefile.in
dom/tests/mochitest/geolocation/geolocation_common.js
dom/tests/mochitest/geolocation/test_allowCurrent.html
dom/tests/mochitest/geolocation/test_allowWatch.html
dom/tests/mochitest/geolocation/test_cancelCurrent.html
dom/tests/mochitest/geolocation/test_cancelWatch.html
dom/tests/mochitest/geolocation/test_clearWatch.html
dom/tests/mochitest/geolocation/test_clearWatch_invalid.html
dom/tests/mochitest/geolocation/test_garbageWatch.html
dom/tests/mochitest/geolocation/test_manyCurrentConcurrent.html
dom/tests/mochitest/geolocation/test_manyCurrentSerial.html
dom/tests/mochitest/geolocation/test_manyWatchConcurrent.html
dom/tests/mochitest/geolocation/test_manyWatchSerial.html
dom/tests/mochitest/geolocation/test_manyWindows.html
dom/tests/mochitest/geolocation/test_optional_api_params.html
dom/tests/mochitest/geolocation/test_timeoutWatch.html
dom/tests/mochitest/geolocation/test_timerRestartWatch.html
dom/tests/mochitest/geolocation/test_windowClose.html
dom/tests/mochitest/geolocation/windowTest.html
--- a/build/automation.py.in
+++ b/build/automation.py.in
@@ -325,17 +325,16 @@ user_pref("security.warn_viewing_mixed",
 // Only load extensions from the application and user profile
 // AddonManager.SCOPE_PROFILE + AddonManager.SCOPE_APPLICATION
 user_pref("extensions.enabledScopes", 5);
 
 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
 
 // Make url-classifier updates so rare that they won't affect tests
 user_pref("urlclassifier.updateinterval", 172800);
 // Point the url-classifier to the local testing server for fast failures
 user_pref("browser.safebrowsing.provider.0.gethashURL", "http://%(server)s/safebrowsing-dummy/gethash");
 user_pref("browser.safebrowsing.provider.0.keyURL", "http://%(server)s/safebrowsing-dummy/newkey");
--- a/dom/src/geolocation/nsGeolocation.cpp
+++ b/dom/src/geolocation/nsGeolocation.cpp
@@ -66,17 +66,16 @@
 #include "nsServiceManagerUtils.h"
 #include "nsContentUtils.h"
 #include "nsIURI.h"
 #include "nsIPermissionManager.h"
 #include "nsIObserverService.h"
 #include "nsIPrefService.h"
 #include "nsIPrefBranch2.h"
 #include "nsIJSContextStack.h"
-#include "nsThreadUtils.h"
 #include "mozilla/Services.h"
 #include "mozilla/unused.h"
 
 #include <math.h>
 
 #ifdef WINCE_WINDOWS_MOBILE
 #include "WinMobileLocationProvider.h"
 #endif
@@ -93,85 +92,16 @@
 #include "nsIDocument.h"
 
 // Some limit to the number of get or watch geolocation requests
 // that a window can make.
 #define MAX_GEO_REQUESTS_PER_WINDOW  1500
 
 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
 ////////////////////////////////////////////////////
 
 class nsDOMGeoPositionError : public nsIDOMGeoPositionError
 {
 public:
   NS_DECL_ISUPPORTS
@@ -234,16 +164,17 @@ nsDOMGeoPositionError::NotifyCallback(ns
 ////////////////////////////////////////////////////
 
 nsGeolocationRequest::nsGeolocationRequest(nsGeolocation* aLocator,
                                            nsIDOMGeoPositionCallback* aCallback,
                                            nsIDOMGeoPositionErrorCallback* aErrorCallback,
                                            nsIDOMGeoPositionOptions* aOptions)
   : mAllowed(PR_FALSE),
     mCleared(PR_FALSE),
+    mHasSentData(PR_FALSE),
     mCallback(aCallback),
     mErrorCallback(aErrorCallback),
     mOptions(aOptions),
     mLocator(aLocator)
 {
 }
 
 nsGeolocationRequest::~nsGeolocationRequest()
@@ -290,19 +221,21 @@ nsGeolocationRequest::NotifyError(PRInt1
 
 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
   
-  NotifyError(nsIDOMGeoPositionError::TIMEOUT);
-  // remove ourselves from the locator's callback lists.
-  mLocator->RemoveRequest(this);
+  if (!mHasSentData) {
+    NotifyError(nsIDOMGeoPositionError::TIMEOUT);
+    // remove ourselves from the locator's callback lists.
+    mLocator->RemoveRequest(this);
+  }
 
   mTimeoutTimer = nsnull;
   return NS_OK;
 }
  
 NS_IMETHODIMP
 nsGeolocationRequest::GetRequestingURI(nsIURI * *aRequestingURI)
 {
@@ -380,61 +313,46 @@ nsGeolocationRequest::Allow()
   }
 
   if (lastPosition && maximumAge > 0 &&
       ( PRTime(PR_Now() / PR_USEC_PER_MSEC) - maximumAge <=
         PRTime(cachedPositionTime) )) {
     // okay, we can return a cached position
     mAllowed = PR_TRUE;
     
-    nsCOMPtr<nsIRunnable> ev = new RequestSendLocationEvent(lastPosition, this, mLocator);
-    NS_DispatchToMainThread(ev);
+    // send the cached location
+    SendLocation(lastPosition);
   }
 
-  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) {
     
     if (timeout < 10)
       timeout = 10;
 
     mTimeoutTimer = do_CreateInstance("@mozilla.org/timer;1");
     mTimeoutTimer->InitWithCallback(this, timeout, nsITimer::TYPE_ONE_SHOT);
   }
+
+  mAllowed = PR_TRUE;
+  return NS_OK;
 }
 
 void
 nsGeolocationRequest::MarkCleared()
 {
   mCleared = PR_TRUE;
 }
 
 void
 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);
     return;
   }
 
   // Ensure that the proper context is on the stack (bug 452762)
   nsCOMPtr<nsIJSContextStack> stack(do_GetService("@mozilla.org/js/xpc/ContextStack;1"));
@@ -442,17 +360,17 @@ nsGeolocationRequest::SendLocation(nsIDO
     return; // silently fail
   
   mCallback->HandleEvent(aPosition);
 
   // remove the stack
   JSContext* cx;
   stack->Pop(&cx);
 
-  SetTimeoutTimer();
+  mHasSentData = PR_TRUE;
 }
 
 void
 nsGeolocationRequest::Shutdown()
 {
   mCleared = PR_TRUE;
   mCallback = nsnull;
   mErrorCallback = nsnull;
@@ -477,45 +395,27 @@ NS_INTERFACE_MAP_BEGIN(nsGeolocationServ
   NS_INTERFACE_MAP_ENTRY(nsIObserver)
 NS_INTERFACE_MAP_END
 
 NS_IMPL_THREADSAFE_ADDREF(nsGeolocationService)
 NS_IMPL_THREADSAFE_RELEASE(nsGeolocationService)
 
 
 static PRBool sGeoEnabled = PR_TRUE;
-static PRBool sGeoIgnoreLocationFilter = PR_FALSE;
-
 static int
 GeoEnabledChangedCallback(const char *aPrefName, void *aClosure)
 {
   sGeoEnabled = nsContentUtils::GetBoolPref("geo.enabled", PR_TRUE);
   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);
 
   GeoEnabledChangedCallback("geo.enabled", nsnull);
 
   if (!sGeoEnabled)
     return NS_ERROR_FAILURE;
@@ -865,16 +765,17 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(
   for (i = 0; i < tmp->mPendingCallbacks.Length(); ++i)
     NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR_AMBIGUOUS(mPendingCallbacks[i], nsIGeolocationRequest)
 
   for (i = 0; i < tmp->mWatchingCallbacks.Length(); ++i)
     NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR_AMBIGUOUS(mWatchingCallbacks[i], nsIGeolocationRequest)
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
 
 nsGeolocation::nsGeolocation() 
+: mUpdateInProgress(PR_FALSE)
 {
 }
 
 nsGeolocation::~nsGeolocation()
 {
   if (mService)
     Shutdown();
 }
@@ -952,36 +853,43 @@ nsGeolocation::RemoveRequest(nsGeolocati
   // mark the request as "cleared".
 
   aRequest->MarkCleared();
 }
 
 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())
-    return Shutdown();
-
-  printf("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= nsGeolocation::Update called and there are %d / %d  pending\n", mPendingCallbacks.Length(), mWatchingCallbacks.Length());
+  {
+    Shutdown();
+    return;
+  }
 
   // notify anyone that has been waiting
-  for (PRUint32 i = 0; i< mPendingCallbacks.Length(); i++) {
-    nsCOMPtr<nsIRunnable> ev  = new RequestSendLocationEvent(aSomewhere, mPendingCallbacks[i]);
-    NS_DispatchToMainThread(ev);
-  }
+  for (PRUint32 i = 0; i< mPendingCallbacks.Length(); i++)
+    mPendingCallbacks[i]->SendLocation(aSomewhere);
   mPendingCallbacks.Clear();
 
   // notify everyone that is watching
-  for (PRUint32 i = 0; i< mWatchingCallbacks.Length(); i++) {
-    nsCOMPtr<nsIRunnable> ev  = new RequestSendLocationEvent(aSomewhere, mWatchingCallbacks[i]);
-    NS_DispatchToMainThread(ev);
-  }
+  for (PRUint32 i = 0; i< mWatchingCallbacks.Length(); i++)
+    mWatchingCallbacks[i]->SendLocation(aSomewhere);
 
-  printf("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= nsGeolocation::Update DONE\n");
-
+  mUpdateInProgress = PR_FALSE;
 }
 
 NS_IMETHODIMP
 nsGeolocation::GetCurrentPosition(nsIDOMGeoPositionCallback *callback,
                                   nsIDOMGeoPositionErrorCallback *errorCallback,
                                   nsIDOMGeoPositionOptions *options)
 {
   NS_ENSURE_ARG_POINTER(callback);
@@ -997,26 +905,26 @@ nsGeolocation::GetCurrentPosition(nsIDOM
     return NS_ERROR_OUT_OF_MEMORY;
 
   if (NS_FAILED(request->Init()))
     return NS_ERROR_FAILURE; // this as OKAY.  not sure why we wouldn't throw. xxx dft
 
   if (mOwner) {
     RegisterRequestWithPrompt(request);
     mPendingCallbacks.AppendElement(request);
+
     return NS_OK;
   }
 
   if (!nsContentUtils::IsCallerChrome())
     return NS_ERROR_FAILURE;
 
-  mPendingCallbacks.AppendElement(request);
+  request->Allow();
 
-  nsCOMPtr<nsIRunnable> ev = new RequestAllowEvent(true, request);
-  NS_DispatchToMainThread(ev);
+  mPendingCallbacks.AppendElement(request);
 
   return NS_OK;
 }
 
 NS_IMETHODIMP
 nsGeolocation::WatchPosition(nsIDOMGeoPositionCallback *callback,
                              nsIDOMGeoPositionErrorCallback *errorCallback,
                              nsIDOMGeoPositionOptions *options,
@@ -1128,26 +1036,20 @@ nsGeolocation::RegisterRequestWithPrompt
     mozilla::dom::PGeolocationRequestChild* a = 
       child->SendPGeolocationRequestConstructor(request, IPC::URI(mURI));
 
     (void) a->Sendprompt();
     return;
   }
 #endif
 
-  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);
+  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 !defined(WINCE_WINDOWS_MOBILE) && !defined(MOZ_MAEMO_LIBLOCATION) && !defined(ANDROID)
 DOMCI_DATA(GeoPositionCoords, void)
 DOMCI_DATA(GeoPosition, void)
 #endif
 
 #ifdef MOZ_IPC
--- a/dom/src/geolocation/nsGeolocation.h
+++ b/dom/src/geolocation/nsGeolocation.h
@@ -89,29 +89,29 @@ class nsGeolocationRequest
                        nsIDOMGeoPositionErrorCallback* errorCallback,
                        nsIDOMGeoPositionOptions* options);
   nsresult Init();
   void Shutdown();
 
   void SendLocation(nsIDOMGeoPosition* location);
   void MarkCleared();
   PRBool Allowed() {return mAllowed;}
-  void SetTimeoutTimer();
 
   ~nsGeolocationRequest();
 
 #ifdef MOZ_IPC
   bool Recv__delete__(const bool& allow);
 #endif
 
  private:
 
   void NotifyError(PRInt16 errorCode);
   PRPackedBool mAllowed;
   PRPackedBool mCleared;
+  PRPackedBool mHasSentData;
 
   nsCOMPtr<nsITimer> mTimeoutTimer;
   nsCOMPtr<nsIDOMGeoPositionCallback> mCallback;
   nsCOMPtr<nsIDOMGeoPositionErrorCallback> mErrorCallback;
   nsCOMPtr<nsIDOMGeoPositionOptions> mOptions;
 
   nsRefPtr<nsGeolocation> mLocator;
 };
@@ -227,16 +227,18 @@ private:
   // Two callback arrays.  The first |mPendingCallbacks| holds objects for only
   // one callback and then they are released/removed from the array.  The second
   // |mWatchingCallbacks| holds objects until the object is explictly removed or
   // there is a page change.
 
   nsTArray<nsRefPtr<nsGeolocationRequest> > mPendingCallbacks;
   nsTArray<nsRefPtr<nsGeolocationRequest> > mWatchingCallbacks;
 
+  PRBool mUpdateInProgress;
+
   // window that this was created for.  Weak reference.
   nsWeakPtr mOwner;
 
   // where the content was loaded from
   nsCOMPtr<nsIURI> mURI;
 
   // owning back pointer.
   nsRefPtr<nsGeolocationService> mService;
--- a/dom/tests/mochitest/chrome/test_geolocation.xul
+++ b/dom/tests/mochitest/chrome/test_geolocation.xul
@@ -19,19 +19,21 @@ const Cc = Components.classes;
 
 var geolocation = Cc["@mozilla.org/geolocation;1"].getService(Ci.nsIDOMGeoGeolocation);
 geolocation.getCurrentPosition(done, error);
 
 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>
 
 <body xmlns="http://www.w3.org/1999/xhtml" style="height: 300px; overflow: auto;"/>
 
 </window>
--- a/dom/tests/mochitest/geolocation/Makefile.in
+++ b/dom/tests/mochitest/geolocation/Makefile.in
@@ -40,31 +40,36 @@ srcdir		= @srcdir@
 VPATH		= @srcdir@
 relativesrcdir	= dom/tests/mochitest/geolocation
 
 include $(DEPTH)/config/autoconf.mk
 
 include $(topsrcdir)/config/rules.mk
 
 _TEST_FILES	= \
-		test_allowCurrent.html \
-		test_allowWatch.html \
-		test_cancelCurrent.html \
-		test_cancelWatch.html \
-		test_clearWatch.html \
-		test_clearWatch_invalid.html \
+		test_manyCurrentSerial.html \
 		test_manyCurrentConcurrent.html \
-		test_manyCurrentSerial.html \
+		test_garbageWatch.html \
 		test_manyWatchConcurrent.html \
 		test_manyWatchSerial.html \
 		test_manyWindows.html \
-		test_optional_api_params.html \
+		test_allowCurrent.html \
+		test_allowWatch.html \
+		test_clearWatch.html \
+		test_clearWatch_invalid.html \
+		test_timeoutWatch.html \
 		test_windowClose.html \
-	        test_timerRestartWatch.html \
+		windowTest.html \
+		geolocation_common.js  \
 		geolocation.html \
-		geolocation_common.js  \
+		test_optional_api_params.html \
 		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)
 
--- a/dom/tests/mochitest/geolocation/geolocation_common.js
+++ b/dom/tests/mochitest/geolocation/geolocation_common.js
@@ -1,58 +1,29 @@
-
-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()
 {
   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()
 {
   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()
 {
   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");
 }
@@ -76,9 +47,65 @@ function check_geolocation(location) {
 
   // optional ok("heading" in coords, "Check to see if there is a heading");
   // optional ok("speed" in coords, "Check to see if there is a speed");
 
   ok (location.coords.latitude  == 37.41857, "lat matches known value");
   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;
--- a/dom/tests/mochitest/geolocation/test_allowCurrent.html
+++ b/dom/tests/mochitest/geolocation/test_allowCurrent.html
@@ -15,27 +15,37 @@ https://bugzilla.mozilla.org/show_bug.cg
 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=478911">Mozilla Bug 478911</a>
 <p id="display"></p>
 <div id="content" style="display: none">
   
 </div>
 <pre id="test">
 <script class="testbody" type="text/javascript">
 
-SimpleTest.waitForExplicitFinish();
-resume_geolocationProvider();
-force_prompt(true);
+var hasAccepted = false;
 
 function successCallback(position) {
-
-  dump("aaaaaaaaaaaaaa!!!\n");
+  ok(hasAccepted, "Ensure that accept was pressed");
   check_geolocation(position);
-  reset_prompt();
   SimpleTest.finish();
 }
 
-navigator.geolocation.getCurrentPosition(successCallback);
+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);
 
 </script>
 </pre>
 </body>
 </html>
 
--- a/dom/tests/mochitest/geolocation/test_allowWatch.html
+++ b/dom/tests/mochitest/geolocation/test_allowWatch.html
@@ -15,28 +15,38 @@ https://bugzilla.mozilla.org/show_bug.cg
 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=478911">Mozilla Bug 478911</a>
 <p id="display"></p>
 <div id="content" style="display: none">
   
 </div>
 <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>
 </html>
 
--- a/dom/tests/mochitest/geolocation/test_cancelCurrent.html
+++ b/dom/tests/mochitest/geolocation/test_cancelCurrent.html
@@ -15,31 +15,32 @@ https://bugzilla.mozilla.org/show_bug.cg
 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=478911">Mozilla Bug 478911</a>
 <p id="display"></p>
 <div id="content" style="display: none">
   
 </div>
 <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>
 </html>
 
--- a/dom/tests/mochitest/geolocation/test_cancelWatch.html
+++ b/dom/tests/mochitest/geolocation/test_cancelWatch.html
@@ -15,35 +15,36 @@ https://bugzilla.mozilla.org/show_bug.cg
 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=478911">Mozilla Bug 478911</a>
 <p id="display"></p>
 <div id="content" style="display: none">
   
 </div>
 <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>
 </html>
 
 
 
--- a/dom/tests/mochitest/geolocation/test_clearWatch.html
+++ b/dom/tests/mochitest/geolocation/test_clearWatch.html
@@ -15,48 +15,49 @@ https://bugzilla.mozilla.org/show_bug.cg
 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=478911">Mozilla Bug 478911</a>
 <p id="display"></p>
 <div id="content" style="display: none">
   
 </div>
 <pre id="test">
 <script class="testbody" type="text/javascript">
 
-SimpleTest.waitForExplicitFinish();
-resume_geolocationProvider();
-force_prompt(true)
-
+var watchID;
 var hasBeenCleared = false;
-var successWasCalledAfterClear = false;
-
 function failureCallback(error)
 {
   ok(0, "we should not be seeing failures from this watchPosition");
 }
 
 function successCallback(position) {
   if (hasBeenCleared == true) {
-    successWasCalledAfterClear = true;
+    // we should not be called here
+    ok(0, "successCallback was called after clear");
   }
 }
 
 function clearWatch() {
   navigator.geolocation.clearWatch(watchID);
   hasBeenCleared = true;
 }
 
 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(clearWatch, 250);
+setTimeout(clickNotificationButton, 10, kAcceptButton);
 
-setTimeout(testAccepted, 2000);
+setTimeout(clearWatch, 50);
+
+// wait for position changes
+setTimeout(testAccepted, 1000);
 
 </script>
 </pre>
 </body>
 </html>
--- a/dom/tests/mochitest/geolocation/test_clearWatch_invalid.html
+++ b/dom/tests/mochitest/geolocation/test_clearWatch_invalid.html
@@ -14,16 +14,18 @@ https://bugzilla.mozilla.org/show_bug.cg
 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=463039">Mozilla Bug 463039</a>
 <p id="display"></p>
 <div id="content" style="display: none">
   
 </div>
 <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);
     ok(1, "clearWatch should not throw");
 }
 
 // lets try something huge
 navigator.geolocation.clearWatch(Number.MAX_VALUE);
--- a/dom/tests/mochitest/geolocation/test_garbageWatch.html
+++ b/dom/tests/mochitest/geolocation/test_garbageWatch.html
@@ -17,42 +17,39 @@ https://bugzilla.mozilla.org/show_bug.cg
 <div id="content" style="display: none">
   
 </div>
 <pre id="test">
 <script class="testbody" type="text/javascript">
 /** 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();
 }
 
 
 var options = {
     maximumAge: 0,
     timeout: 1000,
 };
 
 navigator.geolocation.watchPosition(successCallback,
                                     errorCallback,
                                     options);
 
+setTimeout(clickNotificationButton, 10, kAcceptButton);
+
 </script>
 </pre>
 </body>
 </html>
--- a/dom/tests/mochitest/geolocation/test_manyCurrentConcurrent.html
+++ b/dom/tests/mochitest/geolocation/test_manyCurrentConcurrent.html
@@ -15,33 +15,48 @@ https://bugzilla.mozilla.org/show_bug.cg
 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=482260">Mozilla Bug 482260</a>
 <p id="display"></p>
 <div id="content" style="display: none">
   
 </div>
 <pre id="test">
 <script class="testbody" type="text/javascript">
 
-SimpleTest.waitForExplicitFinish();
-resume_geolocationProvider();
-force_prompt(true);
+var completeCount = 100;
 
-var successCallbackCalled = false;
+var hasAccepted = false;
+
 
 function successCallback(position) {
-  successCallbackCalled = true;
+  check_geolocation(position);
+}
+
+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,
+};
 
-function testPassed() {
-  ok(successCallbackCalled, "if nothing crashed, all okay");
-  reset_prompt();
+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");
   SimpleTest.finish();
 }
-setTimeout(testPassed, 1000);
 
 </script>
 </pre>
 </body>
 </html>
 
--- a/dom/tests/mochitest/geolocation/test_manyCurrentSerial.html
+++ b/dom/tests/mochitest/geolocation/test_manyCurrentSerial.html
@@ -15,35 +15,41 @@ https://bugzilla.mozilla.org/show_bug.cg
 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=482260">Mozilla Bug 482260</a>
 <p id="display"></p>
 <div id="content" style="display: none">
   
 </div>
 <pre id="test">
 <script class="testbody" type="text/javascript">
 
-SimpleTest.waitForExplicitFinish();
+var completeCount = 1000;
 
-resume_geolocationProvider();
-force_prompt(true)
-
-var keepGoing = 10;
+var hasAccepted = false;
 
 function successCallback(position) {
-  dump("----------> "+ keepGoing +"\n");
-
-  if (keepGoing-- > 0) {
-    setTimeout(function() {navigator.geolocation.getCurrentPosition(successCallback);}, 0);
-    return; 
-  }
-
-  ok(1, "100 successful calls");
-  reset_prompt();
+  check_geolocation(position);
+  completeCount--;
+  if (completeCount > 0)   
+    navigator.geolocation.getCurrentPosition(successCallback, null, null);
   SimpleTest.finish();
 }
 
-navigator.geolocation.getCurrentPosition(successCallback);
+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);
 
 </script>
 </pre>
 </body>
 </html>
 
--- a/dom/tests/mochitest/geolocation/test_manyWatchConcurrent.html
+++ b/dom/tests/mochitest/geolocation/test_manyWatchConcurrent.html
@@ -15,32 +15,47 @@ https://bugzilla.mozilla.org/show_bug.cg
 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=482260">Mozilla Bug 482260</a>
 <p id="display"></p>
 <div id="content" style="display: none">
   
 </div>
 <pre id="test">
 <script class="testbody" type="text/javascript">
 
-SimpleTest.waitForExplicitFinish();
-resume_geolocationProvider();
-force_prompt(true);
+var completeCount = 100;
 
-var successCallbackCalled = false;
+var hasAccepted = false;
+
 
 function successCallback(position) {
-  successCallbackCalled = true;
+  check_geolocation(position);
+}
+
+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,
+};
 
-function testPassed() {
-  ok(successCallbackCalled, "if nothing crashed, all okay");
-  reset_prompt();
+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");
   SimpleTest.finish();
 }
-setTimeout(testPassed, 1000);
 
 </script>
 </pre>
 </body>
 </html>
--- a/dom/tests/mochitest/geolocation/test_manyWatchSerial.html
+++ b/dom/tests/mochitest/geolocation/test_manyWatchSerial.html
@@ -15,39 +15,48 @@ https://bugzilla.mozilla.org/show_bug.cg
 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=482260">Mozilla Bug 482260</a>
 <p id="display"></p>
 <div id="content" style="display: none">
   
 </div>
 <pre id="test">
 <script class="testbody" type="text/javascript">
 
-SimpleTest.waitForExplicitFinish();
-resume_geolocationProvider();
-force_prompt(true);
-
+var hasAccepted = false;
 var watchID = 0;
 var completeCount = 10;
 
+var options = {
+    maximumAge: 0,
+};
 
 function successCallback(position) {
+  check_geolocation(position);
 
   navigator.geolocation.clearWatch(watchID);
 
   completeCount--;
 
   if (completeCount==0) {
     ok(1, "all watchPosition successCallbacks called");
-    reset_prompt();
     SimpleTest.finish();
-    return;
+  } else {
+    watchID = navigator.geolocation.watchPosition(successCallback, null, options);
+    setTimeout(accept, 50);
   }
-
-  watchID = navigator.geolocation.watchPosition(successCallback);
 }
 
-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);
 
 </script>
 </pre>
 </body>
 </html>
 
--- a/dom/tests/mochitest/geolocation/test_manyWindows.html
+++ b/dom/tests/mochitest/geolocation/test_manyWindows.html
@@ -16,20 +16,16 @@ https://bugzilla.mozilla.org/show_bug.cg
 href="https://bugzilla.mozilla.org/show_bug.cgi?id=478911">Crash in Multiple Windows</a>
 <p id="display"></p>
 <div id="content" style="display: none">
   
 </div>
 <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
 var totalWindows = numberOfWindows;
 
 var windows = new Array(numberOfWindows);
 
 for(var i = 0; i < numberOfWindows; i++) {
@@ -47,17 +43,16 @@ function closeWindows()
 SimpleTest.waitForExplicitFinish();
 
 function checkDone()
 {
     if (totalWindows == 0)
     {
         ok(navigator.geolocation, "Opened a bunch of windows and didn't crash.");
         clearInterval(timer);
-        reset_prompt();
         SimpleTest.finish();
     }
 }
 
 var timer = setInterval(checkDone, 1000);
 
 setTimeout(closeWindows, 5000);
 
--- a/dom/tests/mochitest/geolocation/test_optional_api_params.html
+++ b/dom/tests/mochitest/geolocation/test_optional_api_params.html
@@ -14,20 +14,16 @@ https://bugzilla.mozilla.org/show_bug.cg
 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=452566">Mozilla Bug 452566</a>
 <p id="display"></p>
 <div id="content" style="display: none">
   
 </div>
 <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;
 
 ok(navigator.geolocation, "Should have geolocation");
 
 var exception = null;
 try {
@@ -104,15 +100,16 @@ try {
   navigator.geolocation.watchPosition(function() {}, function() {}, {});
 } catch(ex) {
   if (ex.result == NOT_ENOUGH_ARGS) {
     exception = ex;
   }
 }
 ok(!exception, exception);
 
+// Successful calls trigger a geolocation notification,
 // so clean up ready for the next test.
-reset_prompt();
+clickNotificationButton(kAcceptButton);
 
 </script>
 </pre>
 </body>
 </html>
--- a/dom/tests/mochitest/geolocation/test_timeoutWatch.html
+++ b/dom/tests/mochitest/geolocation/test_timeoutWatch.html
@@ -16,46 +16,43 @@ https://bugzilla.mozilla.org/show_bug.cg
 <p id="display"></p>
 <div id="content" style="display: none">
   
 </div>
 <pre id="test">
 <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();
 
 function successCallback(pos){
   ok(false, "success should have never been called.");
   resume_geolocationProvider();
-  reset_prompt()
   SimpleTest.finish();
 }
 
 function errorCallback(err) {
   if (err.code == err.POSITION_UNAVAILABLE)
     ok(false, "nothing is hooked up to test against.");
   else
     ok(err.code == err.TIMEOUT, "ensure error is a timeout.");
   resume_geolocationProvider();
-  reset_prompt()
   SimpleTest.finish();
 }
 
 
 var options = {
     maximumAge: 0,
     timeout: 10
 };
 
 navigator.geolocation.watchPosition(successCallback,
                                     errorCallback,
                                     options);
+
+setTimeout(clickNotificationButton, 10, kAcceptButton);
+
 </script>
 </pre>
 </body>
 </html>
deleted file mode 100644
--- a/dom/tests/mochitest/geolocation/test_timerRestartWatch.html
+++ /dev/null
@@ -1,55 +0,0 @@
-<!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>
-
--- a/dom/tests/mochitest/geolocation/test_windowClose.html
+++ b/dom/tests/mochitest/geolocation/test_windowClose.html
@@ -16,23 +16,20 @@ https://bugzilla.mozilla.org/show_bug.cg
 <p id="display"></p>
 <div id="content" style="display: none">
   
 </div>
 <pre id="test">
 <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");
 
 </script>
 </pre>
 </body>
 </html>
 
--- a/dom/tests/mochitest/geolocation/windowTest.html
+++ b/dom/tests/mochitest/geolocation/windowTest.html
@@ -21,14 +21,20 @@ https://bugzilla.mozilla.org/show_bug.cg
 <script class="testbody" type="text/javascript">
 
 function successCallback(position) {
   var opener = window.opener;
   window.close();
   opener.done();
 }
 
+function accept() {
+  clickNotificationButton(kAcceptButton);
+}
+
 navigator.geolocation.watchPosition(successCallback, null, null);
+setTimeout(accept, 50);
+
 </script>
 </pre>
 </body>
 </html>