summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--WebCore/page/Geolocation.cpp17
-rw-r--r--WebCore/page/Geolocation.h1
2 files changed, 13 insertions, 5 deletions
diff --git a/WebCore/page/Geolocation.cpp b/WebCore/page/Geolocation.cpp
index 978a1b0..604802f 100644
--- a/WebCore/page/Geolocation.cpp
+++ b/WebCore/page/Geolocation.cpp
@@ -136,6 +136,11 @@ void Geolocation::Watchers::remove(GeoNotifier* notifier)
m_notifierToIdMap.remove(iter);
}
+bool Geolocation::Watchers::contains(GeoNotifier* notifier) const
+{
+ return m_notifierToIdMap.contains(notifier);
+}
+
void Geolocation::Watchers::clear()
{
m_idToNotifierMap.clear();
@@ -403,11 +408,13 @@ void Geolocation::requestReturnedCachedPosition(GeoNotifier* notifier)
return;
}
- // Otherwise, start the service to get updates.
- if (m_service->startUpdating(notifier->m_options.get()))
- notifier->startTimerIfNeeded();
- else
- notifier->setFatalError(PositionError::create(PositionError::UNKNOWN_ERROR, "Failed to start Geolocation service"));
+ // Otherwise, if the watch still exists, start the service to get updates.
+ if (m_watchers.contains(notifier)) {
+ if (m_service->startUpdating(notifier->m_options.get()))
+ notifier->startTimerIfNeeded();
+ else
+ notifier->setFatalError(PositionError::create(PositionError::UNKNOWN_ERROR, "Failed to start Geolocation service"));
+ }
}
bool Geolocation::haveSuitableCachedPosition(PositionOptions* options)
diff --git a/WebCore/page/Geolocation.h b/WebCore/page/Geolocation.h
index d9b23c4..fd9d560 100644
--- a/WebCore/page/Geolocation.h
+++ b/WebCore/page/Geolocation.h
@@ -105,6 +105,7 @@ private:
void set(int id, PassRefPtr<GeoNotifier>);
void remove(int id);
void remove(GeoNotifier*);
+ bool contains(GeoNotifier*) const;
void clear();
bool isEmpty() const;
void getNotifiersVector(Vector<RefPtr<GeoNotifier> >&) const;