OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2008, 2009, 2010, 2011 Apple Inc. All Rights Reserved. | 2 * Copyright (C) 2008, 2009, 2010, 2011 Apple Inc. All Rights Reserved. |
3 * Copyright 2010, The Android Open Source Project | 3 * Copyright 2010, The Android Open Source Project |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
7 * are met: | 7 * are met: |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 13 matching lines...) Expand all Loading... |
24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
25 */ | 25 */ |
26 | 26 |
27 #ifndef Geolocation_h | 27 #ifndef Geolocation_h |
28 #define Geolocation_h | 28 #define Geolocation_h |
29 | 29 |
30 #include "bindings/core/v8/ScriptPromise.h" | 30 #include "bindings/core/v8/ScriptPromise.h" |
31 #include "bindings/core/v8/ScriptWrappable.h" | 31 #include "bindings/core/v8/ScriptWrappable.h" |
32 #include "core/dom/ActiveDOMObject.h" | 32 #include "core/dom/ActiveDOMObject.h" |
33 #include "modules/geolocation/GeoNotifier.h" | 33 #include "modules/geolocation/GeoNotifier.h" |
| 34 #include "modules/geolocation/GeolocationWatchers.h" |
34 #include "modules/geolocation/Geoposition.h" | 35 #include "modules/geolocation/Geoposition.h" |
35 #include "modules/geolocation/PositionCallback.h" | 36 #include "modules/geolocation/PositionCallback.h" |
36 #include "modules/geolocation/PositionError.h" | 37 #include "modules/geolocation/PositionError.h" |
37 #include "modules/geolocation/PositionErrorCallback.h" | 38 #include "modules/geolocation/PositionErrorCallback.h" |
38 #include "modules/geolocation/PositionOptions.h" | 39 #include "modules/geolocation/PositionOptions.h" |
39 #include "platform/Timer.h" | 40 #include "platform/Timer.h" |
40 #include "platform/heap/Handle.h" | 41 #include "platform/heap/Handle.h" |
41 | 42 |
42 namespace blink { | 43 namespace blink { |
43 | 44 |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
104 // Returns the last known position, if any. May return null. | 105 // Returns the last known position, if any. May return null. |
105 Geoposition* lastPosition(); | 106 Geoposition* lastPosition(); |
106 | 107 |
107 bool isDenied() const { return m_geolocationPermission == PermissionDenied;
} | 108 bool isDenied() const { return m_geolocationPermission == PermissionDenied;
} |
108 | 109 |
109 explicit Geolocation(ExecutionContext*); | 110 explicit Geolocation(ExecutionContext*); |
110 | 111 |
111 typedef HeapVector<Member<GeoNotifier> > GeoNotifierVector; | 112 typedef HeapVector<Member<GeoNotifier> > GeoNotifierVector; |
112 typedef HeapHashSet<Member<GeoNotifier> > GeoNotifierSet; | 113 typedef HeapHashSet<Member<GeoNotifier> > GeoNotifierSet; |
113 | 114 |
114 class Watchers { | |
115 DISALLOW_ALLOCATION(); | |
116 public: | |
117 void trace(Visitor*); | |
118 bool add(int id, GeoNotifier*); | |
119 GeoNotifier* find(int id); | |
120 void remove(int id); | |
121 void remove(GeoNotifier*); | |
122 bool contains(GeoNotifier*) const; | |
123 void clear(); | |
124 bool isEmpty() const; | |
125 void getNotifiersVector(GeoNotifierVector&) const; | |
126 private: | |
127 typedef HeapHashMap<int, Member<GeoNotifier> > IdToNotifierMap; | |
128 typedef HeapHashMap<Member<GeoNotifier>, int> NotifierToIdMap; | |
129 IdToNotifierMap m_idToNotifierMap; | |
130 NotifierToIdMap m_notifierToIdMap; | |
131 }; | |
132 | |
133 bool hasListeners() const { return !m_oneShots.isEmpty() || !m_watchers.isEm
pty(); } | 115 bool hasListeners() const { return !m_oneShots.isEmpty() || !m_watchers.isEm
pty(); } |
134 | 116 |
135 void sendError(GeoNotifierVector&, PositionError*); | 117 void sendError(GeoNotifierVector&, PositionError*); |
136 void sendPosition(GeoNotifierVector&, Geoposition*); | 118 void sendPosition(GeoNotifierVector&, Geoposition*); |
137 | 119 |
138 // Removes notifiers that use a cached position from |notifiers| and | 120 // Removes notifiers that use a cached position from |notifiers| and |
139 // if |cached| is not null they are added to it. | 121 // if |cached| is not null they are added to it. |
140 static void extractNotifiersWithCachedPosition(GeoNotifierVector& notifiers,
GeoNotifierVector* cached); | 122 static void extractNotifiersWithCachedPosition(GeoNotifierVector& notifiers,
GeoNotifierVector* cached); |
141 | 123 |
142 // Copies notifiers from |src| vector to |dest| set. | 124 // Copies notifiers from |src| vector to |dest| set. |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
181 // fatal error if permission is denied or no position can be obtained. | 163 // fatal error if permission is denied or no position can be obtained. |
182 void startRequest(GeoNotifier*); | 164 void startRequest(GeoNotifier*); |
183 | 165 |
184 bool haveSuitableCachedPosition(PositionOptions*); | 166 bool haveSuitableCachedPosition(PositionOptions*); |
185 | 167 |
186 // Runs the success callbacks for the set of notifiers awaiting a cached | 168 // Runs the success callbacks for the set of notifiers awaiting a cached |
187 // position, the set is then cleared. The oneshots are removed everywhere. | 169 // position, the set is then cleared. The oneshots are removed everywhere. |
188 void makeCachedPositionCallbacks(); | 170 void makeCachedPositionCallbacks(); |
189 | 171 |
190 GeoNotifierSet m_oneShots; | 172 GeoNotifierSet m_oneShots; |
191 Watchers m_watchers; | 173 GeolocationWatchers m_watchers; |
192 GeoNotifierSet m_pendingForPermissionNotifiers; | 174 GeoNotifierSet m_pendingForPermissionNotifiers; |
193 Member<Geoposition> m_lastPosition; | 175 Member<Geoposition> m_lastPosition; |
194 | 176 |
195 // States of Geolocation permission as granted by the embedder. Unknown | 177 // States of Geolocation permission as granted by the embedder. Unknown |
196 // means that the embedder still has to be asked for the current permission | 178 // means that the embedder still has to be asked for the current permission |
197 // level; Requested means that the user has yet to make a decision. | 179 // level; Requested means that the user has yet to make a decision. |
198 enum Permission { | 180 enum Permission { |
199 PermissionUnknown, | 181 PermissionUnknown, |
200 PermissionRequested, | 182 PermissionRequested, |
201 PermissionAllowed, | 183 PermissionAllowed, |
202 PermissionDenied | 184 PermissionDenied |
203 }; | 185 }; |
204 | 186 |
205 Permission m_geolocationPermission; | 187 Permission m_geolocationPermission; |
206 | 188 |
207 GeoNotifierSet m_requestsAwaitingCachedPosition; | 189 GeoNotifierSet m_requestsAwaitingCachedPosition; |
208 }; | 190 }; |
209 | 191 |
210 } // namespace blink | 192 } // namespace blink |
211 | 193 |
212 #endif // Geolocation_h | 194 #endif // Geolocation_h |
OLD | NEW |