diff options
Diffstat (limited to 'Source/WebKit/android/WebCoreSupport')
-rw-r--r-- | Source/WebKit/android/WebCoreSupport/GeolocationManager.cpp | 43 | ||||
-rw-r--r-- | Source/WebKit/android/WebCoreSupport/GeolocationManager.h | 11 |
2 files changed, 51 insertions, 3 deletions
diff --git a/Source/WebKit/android/WebCoreSupport/GeolocationManager.cpp b/Source/WebKit/android/WebCoreSupport/GeolocationManager.cpp index 8d0d6b5..cbf399d 100644 --- a/Source/WebKit/android/WebCoreSupport/GeolocationManager.cpp +++ b/Source/WebKit/android/WebCoreSupport/GeolocationManager.cpp @@ -29,22 +29,27 @@ #include "GeolocationClientImpl.h" #include "WebViewCore.h" +#include <Frame.h> #include <GeolocationError.h> #include <GeolocationPosition.h> #include <JNIHelp.h> +#include <Page.h> using WebCore::GeolocationClient; +using WebCore::GeolocationClientMock; namespace android { GeolocationManager::GeolocationManager(WebViewCore* webViewCore) - : m_webViewCore(webViewCore) + : m_useMock(false) + , m_webViewCore(webViewCore) { } GeolocationClient* GeolocationManager::client() const { - // TODO: Return the mock client when appropriate. See http://b/6511338. + if (m_useMock) + return mockClient(); return realClient(); } @@ -76,6 +81,30 @@ void GeolocationManager::provideRealClientPermissionState(WTF::String origin, bo m_realClient->providePermissionState(origin, allow, remember); } +void GeolocationManager::setUseMock() +{ + m_useMock = true; + m_mockClient.clear(); +} + +void GeolocationManager::setMockPosition(PassRefPtr<WebCore::GeolocationPosition> position) +{ + ASSERT(m_useMock); + mockClient()->setPosition(position); +} + +void GeolocationManager::setMockError(PassRefPtr<WebCore::GeolocationError> error) +{ + ASSERT(m_useMock); + mockClient()->setError(error); +} + +void GeolocationManager::setMockPermission(bool allowed) +{ + ASSERT(m_useMock); + mockClient()->setPermission(allowed); +} + GeolocationClientImpl* GeolocationManager::realClient() const { if (!m_realClient) @@ -83,4 +112,14 @@ GeolocationClientImpl* GeolocationManager::realClient() const return m_realClient.get(); } +GeolocationClientMock* GeolocationManager::mockClient() const +{ + ASSERT(m_useMock); + if (!m_mockClient) { + m_mockClient.set(new GeolocationClientMock); + m_mockClient->setController(m_webViewCore->mainFrame()->page()->geolocationController()); + } + return m_mockClient.get(); +} + } // namespace android diff --git a/Source/WebKit/android/WebCoreSupport/GeolocationManager.h b/Source/WebKit/android/WebCoreSupport/GeolocationManager.h index 707cf6f..6459db1 100644 --- a/Source/WebKit/android/WebCoreSupport/GeolocationManager.h +++ b/Source/WebKit/android/WebCoreSupport/GeolocationManager.h @@ -28,6 +28,7 @@ #include "GeolocationClientImpl.h" +#include <GeolocationClientMock.h> #include <OwnPtr.h> #include <PassRefPtr.h> @@ -45,7 +46,6 @@ class WebViewCore; // may be either the real implementation or a mock. It also handles setting the // data on the mock client. This class is owned by WebViewCore and exists to // keep cruft out of that class. -// TODO: Add support for mock. See b/6511338. class GeolocationManager { public: GeolocationManager(WebViewCore*); @@ -59,11 +59,20 @@ public: void resetRealClientTemporaryPermissionStates(); void provideRealClientPermissionState(WTF::String origin, bool allow, bool remember); + // Sets use of the Geolocation mock client. Also resets that client. + void setUseMock(); + void setMockPosition(PassRefPtr<WebCore::GeolocationPosition>); + void setMockError(PassRefPtr<WebCore::GeolocationError>); + void setMockPermission(bool allowed); + private: GeolocationClientImpl* realClient() const; + WebCore::GeolocationClientMock* mockClient() const; + bool m_useMock; WebViewCore* m_webViewCore; mutable OwnPtr<GeolocationClientImpl> m_realClient; + mutable OwnPtr<WebCore::GeolocationClientMock> m_mockClient; }; } // namespace android |