diff options
author | Steve Block <steveblock@google.com> | 2009-07-29 16:21:14 +0100 |
---|---|---|
committer | Steve Block <steveblock@google.com> | 2009-07-30 17:13:48 +0100 |
commit | a47a1c89e31d5fd26298656c3e15c09e841bce83 (patch) | |
tree | cc6c208d5a5b1b39b1ff1dad091a1dd77f6894f2 /WebCore/platform/MockGeolocationService.cpp | |
parent | 6e84e087cc8b8af787e1af3d75c3c6c24737c697 (diff) | |
download | external_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-x | WebCore/platform/MockGeolocationService.cpp | 103 |
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 |