18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * Copyright (C) 2008, 2009 Apple Inc. All Rights Reserved. 38a03f7cd9e884b3db11bb5485b4d9f5095dc0bcaSteve Block * Copyright 2010, The Android Open Source Project 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met: 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer. 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * documentation and/or other materials provided with the distribution. 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef Geolocation_h 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define Geolocation_h 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 308a03f7cd9e884b3db11bb5485b4d9f5095dc0bcaSteve Block#include "GeolocationPositionCache.h" 31bc2cb6973923b5560298950bd824d9627d6ed765Steve Block#include "Geoposition.h" 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "PositionCallback.h" 330c97c982f069c9d9eee236d7f8461710d2e1d078Steve Block#include "PositionError.h" 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "PositionErrorCallback.h" 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "PositionOptions.h" 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Timer.h" 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 38545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#if !ENABLE(CLIENT_BASED_GEOLOCATION) 39545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#include "GeolocationService.h" 40545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#endif 41545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass Frame; 45bc2cb6973923b5560298950bd824d9627d6ed765Steve Block 46370b559b082915acb99b185ed8c8e317fc654db6Steve Block#if ENABLE(CLIENT_BASED_GEOLOCATION) 47370b559b082915acb99b185ed8c8e317fc654db6Steve Blockclass GeolocationPosition; 48370b559b082915acb99b185ed8c8e317fc654db6Steve Blockclass GeolocationError; 49370b559b082915acb99b185ed8c8e317fc654db6Steve Block#endif 50370b559b082915acb99b185ed8c8e317fc654db6Steve Block 51400e786798d320e3c9f4c9d82ea18ecc492a525aSteve Blockclass Geolocation : public RefCounted<Geolocation> 52dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#if !ENABLE(CLIENT_BASED_GEOLOCATION) && ENABLE(GEOLOCATION) 53370b559b082915acb99b185ed8c8e317fc654db6Steve Block , public GeolocationServiceClient 54370b559b082915acb99b185ed8c8e317fc654db6Steve Block#endif 55370b559b082915acb99b185ed8c8e317fc654db6Steve Block{ 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic: 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project static PassRefPtr<Geolocation> create(Frame* frame) { return adoptRef(new Geolocation(frame)); } 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 59dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ~Geolocation(); 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 612bde8e466a4451c7319e3a072d118917957d6554Steve Block void reset(); 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void disconnectFrame(); 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 645f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian void getCurrentPosition(PassRefPtr<PositionCallback>, PassRefPtr<PositionErrorCallback>, PassRefPtr<PositionOptions>); 655f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian int watchPosition(PassRefPtr<PositionCallback>, PassRefPtr<PositionErrorCallback>, PassRefPtr<PositionOptions>); 668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void clearWatch(int watchId); 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 685fb15a120c24faef11e5952a791c5af38c54b07eSteve Block // These methods are used by Android. 695fb15a120c24faef11e5952a791c5af38c54b07eSteve Block void suspend(); 705fb15a120c24faef11e5952a791c5af38c54b07eSteve Block void resume(); 715fb15a120c24faef11e5952a791c5af38c54b07eSteve Block 728f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void setIsAllowed(bool); 73692e5dbf12901edacf14812a6fae25462920af42Steve Block Frame* frame() const { return m_frame; } 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 75370b559b082915acb99b185ed8c8e317fc654db6Steve Block#if ENABLE(CLIENT_BASED_GEOLOCATION) 766c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen void positionChanged(); 77370b559b082915acb99b185ed8c8e317fc654db6Steve Block void setError(GeolocationError*); 78692e5dbf12901edacf14812a6fae25462920af42Steve Block#else 79692e5dbf12901edacf14812a6fae25462920af42Steve Block GeolocationService* getGeolocationService() const { return m_service.get(); } 80370b559b082915acb99b185ed8c8e317fc654db6Steve Block#endif 81370b559b082915acb99b185ed8c8e317fc654db6Steve Block 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprivate: 83dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Geoposition* lastPosition(); 84dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 85dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block bool isAllowed() const { return m_allowGeolocation == Yes; } 86dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block bool isDenied() const { return m_allowGeolocation == No; } 87dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Geolocation(Frame*); 898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 902bde8e466a4451c7319e3a072d118917957d6554Steve Block Page* page() const; 912bde8e466a4451c7319e3a072d118917957d6554Steve Block 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project class GeoNotifier : public RefCounted<GeoNotifier> { 938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project public: 940c97c982f069c9d9eee236d7f8461710d2e1d078Steve Block static PassRefPtr<GeoNotifier> create(Geolocation* geolocation, PassRefPtr<PositionCallback> positionCallback, PassRefPtr<PositionErrorCallback> positionErrorCallback, PassRefPtr<PositionOptions> options) { return adoptRef(new GeoNotifier(geolocation, positionCallback, positionErrorCallback, options)); } 958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 96466006e4a13fd557d7b35c1fe0b7a38384e5ce2eSteve Block void setFatalError(PassRefPtr<PositionError>); 97466006e4a13fd557d7b35c1fe0b7a38384e5ce2eSteve Block bool hasZeroTimeout() const; 98a8d4462216d8e009ee5662660a0621b67c6e727fSteve Block void setUseCachedPosition(); 99159531f4ce4c04455cd544a7c0f7c1644a50ccbeSteve Block void runSuccessCallback(Geoposition*); 100802cd652fedb21e935bc514406bd7f5cc83de64dSteve Block void startTimerIfNeeded(); 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void timerFired(Timer<GeoNotifier>*); 1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1030c97c982f069c9d9eee236d7f8461710d2e1d078Steve Block Geolocation* m_geolocation; 1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RefPtr<PositionCallback> m_successCallback; 1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RefPtr<PositionErrorCallback> m_errorCallback; 1065f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian RefPtr<PositionOptions> m_options; 1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Timer<GeoNotifier> m_timer; 1080c97c982f069c9d9eee236d7f8461710d2e1d078Steve Block RefPtr<PositionError> m_fatalError; 109a8d4462216d8e009ee5662660a0621b67c6e727fSteve Block bool m_useCachedPosition; 1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project private: 112466006e4a13fd557d7b35c1fe0b7a38384e5ce2eSteve Block GeoNotifier(Geolocation*, PassRefPtr<PositionCallback>, PassRefPtr<PositionErrorCallback>, PassRefPtr<PositionOptions>); 113466006e4a13fd557d7b35c1fe0b7a38384e5ce2eSteve Block }; 114466006e4a13fd557d7b35c1fe0b7a38384e5ce2eSteve Block 1156b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner typedef Vector<RefPtr<GeoNotifier> > GeoNotifierVector; 1166b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner typedef HashSet<RefPtr<GeoNotifier> > GeoNotifierSet; 1176b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 118466006e4a13fd557d7b35c1fe0b7a38384e5ce2eSteve Block class Watchers { 119466006e4a13fd557d7b35c1fe0b7a38384e5ce2eSteve Block public: 120466006e4a13fd557d7b35c1fe0b7a38384e5ce2eSteve Block void set(int id, PassRefPtr<GeoNotifier>); 121466006e4a13fd557d7b35c1fe0b7a38384e5ce2eSteve Block void remove(int id); 122466006e4a13fd557d7b35c1fe0b7a38384e5ce2eSteve Block void remove(GeoNotifier*); 12395e7487cbe7ec5c780e8af61f3cea2d90bb4459bSteve Block bool contains(GeoNotifier*) const; 124466006e4a13fd557d7b35c1fe0b7a38384e5ce2eSteve Block void clear(); 125466006e4a13fd557d7b35c1fe0b7a38384e5ce2eSteve Block bool isEmpty() const; 1266b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner void getNotifiersVector(GeoNotifierVector&) const; 127466006e4a13fd557d7b35c1fe0b7a38384e5ce2eSteve Block private: 128466006e4a13fd557d7b35c1fe0b7a38384e5ce2eSteve Block typedef HashMap<int, RefPtr<GeoNotifier> > IdToNotifierMap; 129466006e4a13fd557d7b35c1fe0b7a38384e5ce2eSteve Block typedef HashMap<RefPtr<GeoNotifier>, int> NotifierToIdMap; 130466006e4a13fd557d7b35c1fe0b7a38384e5ce2eSteve Block IdToNotifierMap m_idToNotifierMap; 131466006e4a13fd557d7b35c1fe0b7a38384e5ce2eSteve Block NotifierToIdMap m_notifierToIdMap; 1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }; 1338f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 134f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch class PositionCacheWrapper { 135f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch public: 136f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch PositionCacheWrapper() 137f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch : m_cache(GeolocationPositionCache::instance()) 138f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch { 139f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch m_cache->addUser(); 140f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } 141f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch ~PositionCacheWrapper() 142f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch { 143f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch m_cache->removeUser(); 144f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } 145f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch void setCachedPosition(Geoposition* cachedPosition) { m_cache->setCachedPosition(cachedPosition); } 146f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch Geoposition* cachedPosition() { return m_cache->cachedPosition(); } 147f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch private: 148f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch GeolocationPositionCache* m_cache; 149f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch }; 150f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool hasListeners() const { return !m_oneShots.isEmpty() || !m_watchers.isEmpty(); } 1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1536b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner void sendError(GeoNotifierVector&, PositionError*); 1546b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner void sendPosition(GeoNotifierVector&, Geoposition*); 1556c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 1564576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang static void extractNotifiersWithCachedPosition(GeoNotifierVector& notifiers, GeoNotifierVector* cached); 1574576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang static void copyToSet(const GeoNotifierVector&, GeoNotifierSet&); 1584576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang 1596b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner static void stopTimer(GeoNotifierVector&); 160802cd652fedb21e935bc514406bd7f5cc83de64dSteve Block void stopTimersForOneShots(); 161802cd652fedb21e935bc514406bd7f5cc83de64dSteve Block void stopTimersForWatchers(); 162802cd652fedb21e935bc514406bd7f5cc83de64dSteve Block void stopTimers(); 1636c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 1646b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner void cancelRequests(GeoNotifierVector&); 165f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick void cancelAllRequests(); 166f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick 1676c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen void positionChangedInternal(); 16800bd0fc337f03c8595ccae3a2d3d56c6d8e97cc9Steve Block void makeSuccessCallbacks(); 1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void handleError(PositionError*); 1708f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 1718f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void requestPermission(); 1728f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 17323c22a60ec108914d8df8cd80023582fbedfe978Steve Block bool startUpdating(GeoNotifier*); 174370b559b082915acb99b185ed8c8e317fc654db6Steve Block void stopUpdating(); 175370b559b082915acb99b185ed8c8e317fc654db6Steve Block 176f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick#if USE(PREEMPT_GEOLOCATION_PERMISSION) 177f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick void handlePendingPermissionNotifiers(); 178f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick#endif 179f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick 180dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#if !ENABLE(CLIENT_BASED_GEOLOCATION) && ENABLE(GEOLOCATION) 1818f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // GeolocationServiceClient 1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void geolocationServicePositionChanged(GeolocationService*); 1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void geolocationServiceErrorOccurred(GeolocationService*); 184370b559b082915acb99b185ed8c8e317fc654db6Steve Block#endif 1858f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 186466006e4a13fd557d7b35c1fe0b7a38384e5ce2eSteve Block PassRefPtr<GeoNotifier> startRequest(PassRefPtr<PositionCallback>, PassRefPtr<PositionErrorCallback>, PassRefPtr<PositionOptions>); 187466006e4a13fd557d7b35c1fe0b7a38384e5ce2eSteve Block 188466006e4a13fd557d7b35c1fe0b7a38384e5ce2eSteve Block void fatalErrorOccurred(GeoNotifier*); 189466006e4a13fd557d7b35c1fe0b7a38384e5ce2eSteve Block void requestTimedOut(GeoNotifier*); 190a8d4462216d8e009ee5662660a0621b67c6e727fSteve Block void requestUsesCachedPosition(GeoNotifier*); 191bc2cb6973923b5560298950bd824d9627d6ed765Steve Block bool haveSuitableCachedPosition(PositionOptions*); 192a8d4462216d8e009ee5662660a0621b67c6e727fSteve Block void makeCachedPositionCallbacks(); 1930c97c982f069c9d9eee236d7f8461710d2e1d078Steve Block 1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project GeoNotifierSet m_oneShots; 195466006e4a13fd557d7b35c1fe0b7a38384e5ce2eSteve Block Watchers m_watchers; 1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Frame* m_frame; 197370b559b082915acb99b185ed8c8e317fc654db6Steve Block#if !ENABLE(CLIENT_BASED_GEOLOCATION) 1988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project OwnPtr<GeolocationService> m_service; 199967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch#endif 200967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch#if USE(PREEMPT_GEOLOCATION_PERMISSION) 201f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick GeoNotifierSet m_pendingForPermissionNotifiers; 202370b559b082915acb99b185ed8c8e317fc654db6Steve Block#endif 203370b559b082915acb99b185ed8c8e317fc654db6Steve Block RefPtr<Geoposition> m_lastPosition; 2048f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 2058f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian enum { 2068f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian Unknown, 2078f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian InProgress, 2088f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian Yes, 2098f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian No 2108f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian } m_allowGeolocation; 211dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 212dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#if ENABLE(GEOLOCATION) 213f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch PositionCacheWrapper m_positionCache; 214dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif 215bc2cb6973923b5560298950bd824d9627d6ed765Steve Block GeoNotifierSet m_requestsAwaitingCachedPosition; 2168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 2178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore 2198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif // Geolocation_h 22181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 222