summaryrefslogtreecommitdiffstats
path: root/WebCore/platform/MockGeolocationService.cpp
diff options
context:
space:
mode:
authorSteve Block <steveblock@google.com>2009-07-29 16:21:14 +0100
committerSteve Block <steveblock@google.com>2009-07-30 17:13:48 +0100
commita47a1c89e31d5fd26298656c3e15c09e841bce83 (patch)
treecc6c208d5a5b1b39b1ff1dad091a1dd77f6894f2 /WebCore/platform/MockGeolocationService.cpp
parent6e84e087cc8b8af787e1af3d75c3c6c24737c697 (diff)
downloadexternal_webkit-a47a1c89e31d5fd26298656c3e15c09e841bce83.zip
external_webkit-a47a1c89e31d5fd26298656c3e15c09e841bce83.tar.gz
external_webkit-a47a1c89e31d5fd26298656c3e15c09e841bce83.tar.bz2
Adds a mock GeolocationService.
This is being submitted to WebKit in bug 27716.
Diffstat (limited to 'WebCore/platform/MockGeolocationService.cpp')
-rwxr-xr-xWebCore/platform/MockGeolocationService.cpp103
1 files changed, 103 insertions, 0 deletions
diff --git a/WebCore/platform/MockGeolocationService.cpp b/WebCore/platform/MockGeolocationService.cpp
new file mode 100755
index 0000000..481d588
--- /dev/null
+++ b/WebCore/platform/MockGeolocationService.cpp
@@ -0,0 +1,103 @@
+/*
+ * Copyright (C) 2009 Apple Inc. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "MockGeolocationService.h"
+
+#include "Geoposition.h"
+#include "PositionError.h"
+#include "PositionOptions.h"
+
+namespace WebCore {
+
+MockGeolocationService::MockGeolocationServiceSet MockGeolocationService::s_instances;
+RefPtr<Geoposition> MockGeolocationService::s_lastPosition = 0;
+RefPtr<PositionError> MockGeolocationService::s_lastError = 0;
+
+GeolocationService* MockGeolocationService::create(GeolocationServiceClient* client)
+{
+ return new MockGeolocationService(client);
+}
+
+MockGeolocationService::MockGeolocationService(GeolocationServiceClient* client)
+ : GeolocationService(client)
+ , m_timer(this, &MockGeolocationService::timerFired)
+{
+ s_instances.add(this);
+}
+
+MockGeolocationService::~MockGeolocationService()
+{
+ MockGeolocationServiceSet::iterator iter = s_instances.find(this);
+ ASSERT(iter != s_instances.end());
+ s_instances.remove(iter);
+}
+
+void MockGeolocationService::setPosition(PassRefPtr<Geoposition> position)
+{
+ s_lastPosition = position;
+ s_lastError = 0;
+ makeGeolocationCallbackFromAllInstances();
+}
+
+void MockGeolocationService::setError(PassRefPtr<PositionError> error)
+{
+ s_lastError = error;
+ s_lastPosition = 0;
+ makeGeolocationCallbackFromAllInstances();
+}
+
+bool MockGeolocationService::startUpdating(PositionOptions* options)
+{
+ m_timer.startOneShot(0);
+ return true;
+}
+
+void MockGeolocationService::timerFired(Timer<MockGeolocationService>* timer)
+{
+ ASSERT(timer == m_timer);
+ makeGeolocationCallback();
+}
+
+void MockGeolocationService::makeGeolocationCallbackFromAllInstances()
+{
+ MockGeolocationServiceSet::const_iterator end = s_instances.end();
+ for (MockGeolocationServiceSet::const_iterator iter = s_instances.begin();
+ iter != end;
+ ++iter) {
+ (*iter)->makeGeolocationCallback();
+ }
+}
+
+void MockGeolocationService::makeGeolocationCallback()
+{
+ if (s_lastPosition) {
+ positionChanged();
+ } else if (s_lastError) {
+ errorOccurred();
+ }
+}
+
+} // namespace WebCore