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