diff options
author | Android (Google) Code Review <android-gerrit@google.com> | 2009-12-07 07:03:46 -0800 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2009-12-07 07:03:46 -0800 |
commit | 462daf4b80f6d97c9d1f2b446c7fd61a35c49a59 (patch) | |
tree | a830e0bded7dc19f4675b8e526c3b32b829a0de3 /WebCore | |
parent | 1d68587ce0a52acb0cb724ac362cee0a14bf1e8f (diff) | |
parent | 95e7487cbe7ec5c780e8af61f3cea2d90bb4459b (diff) | |
download | external_webkit-462daf4b80f6d97c9d1f2b446c7fd61a35c49a59.zip external_webkit-462daf4b80f6d97c9d1f2b446c7fd61a35c49a59.tar.gz external_webkit-462daf4b80f6d97c9d1f2b446c7fd61a35c49a59.tar.bz2 |
Merge change I9a5736f5 into eclair-mr2
* changes:
Fixes a Geolocation bug with cached positions.
Diffstat (limited to 'WebCore')
-rw-r--r-- | WebCore/page/Geolocation.cpp | 17 | ||||
-rw-r--r-- | WebCore/page/Geolocation.h | 1 |
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; |