Index: Source/modules/geolocation/GeoNotifier.h |
diff --git a/Source/modules/geolocation/GeoNotifier.h b/Source/modules/geolocation/GeoNotifier.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..5b338c4142fd620216a4bc4aea12db48213cefaf |
--- /dev/null |
+++ b/Source/modules/geolocation/GeoNotifier.h |
@@ -0,0 +1,65 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef GeoNotifier_h |
+#define GeoNotifier_h |
+ |
+#include "platform/Timer.h" |
+#include "platform/heap/Handle.h" |
+ |
+namespace WebCore { |
+ |
+class Geolocation; |
+class Geoposition; |
+class PositionCallback; |
+class PositionError; |
+class PositionErrorCallback; |
+class PositionOptions; |
+ |
+class GeoNotifier : public GarbageCollectedFinalized<GeoNotifier> { |
+public: |
+ static GeoNotifier* create(Geolocation* geolocation, PassOwnPtr<PositionCallback> positionCallback, PassOwnPtr<PositionErrorCallback> positionErrorCallback, PositionOptions* options) |
+ { |
+ return new GeoNotifier(geolocation, positionCallback, positionErrorCallback, options); |
+ } |
+ void trace(Visitor*); |
+ |
+ PositionOptions* options() const { return m_options.get(); }; |
+ |
+ // Sets the given error as the fatal error if there isn't one yet. |
+ // Starts the timer with an interval of 0. |
+ void setFatalError(PositionError*); |
+ |
+ bool useCachedPosition() const { return m_useCachedPosition; } |
+ |
+ // Tells the notifier to use a cached position and starts its timer with |
+ // an interval of 0. |
+ void setUseCachedPosition(); |
+ |
+ void runSuccessCallback(Geoposition*); |
+ void runErrorCallback(PositionError*); |
+ |
+ void startTimer(); |
+ void stopTimer(); |
+ |
+ // Runs the error callback if there is a fatal error. Otherwise, if a |
+ // cached position must be used, registers itself for receiving one. |
+ // Otherwise, the notifier has expired, and its error callback is run. |
+ void timerFired(Timer<GeoNotifier>*); |
+ |
+private: |
+ GeoNotifier(Geolocation*, PassOwnPtr<PositionCallback>, PassOwnPtr<PositionErrorCallback>, PositionOptions*); |
+ |
+ Member<Geolocation> m_geolocation; |
+ OwnPtr<PositionCallback> m_successCallback; |
+ OwnPtr<PositionErrorCallback> m_errorCallback; |
+ Member<PositionOptions> m_options; |
+ Timer<GeoNotifier> m_timer; |
+ Member<PositionError> m_fatalError; |
+ bool m_useCachedPosition; |
+}; |
+ |
+} // namespace WebCore |
+ |
+#endif // GeoNotifier_h |