From 5c36c4ca9214cbbe65d12f6b138aef9618d41a99 Mon Sep 17 00:00:00 2001 From: Steve Block Date: Thu, 17 May 2012 18:17:15 +0100 Subject: Switch to client-based Geolocation The motivation for this switch is that it is required to enable PREEMPT_GEOLOCATION_PERMISSION. See b/4500947. The switch involves changing lots of Android's WebKit plumbing to use a new GeolocationClientAndroid in WebKit (called from WebCore::GeolocationController), rather than the existing GeolocationServiceAndroid in WebCore/platform (called from WebCore::Geolocation). This is complicated by the need to support mocking for LayoutTests. The pattern used is very similar to that used for DeviceOrientation and DeviceMotion. This patch ... - Enables CLIENT_BASED_GEOLOCATION - Leaves PREEMPT_GEOLOCATION_PERMISSION disabled for now - Removes GeolocationServiceAndroid - Adds a new GeolocationClientAndroid - Just a proxy to real client - Adds a new GeolocationManager - Manages switching between the real and mock clients - Provides the appropriate client to GeolocationClientAndroid - Plumbs to the real client calls for permissions and for suspending/resuming - Adds a new GeolocationClientImpl - The real client - Based heavily on GeolocationServiceAndroid - Delegates to GeolocationServiceBridge, as GeolocationServiceAndroid did - Calls back directly to GeolocationController - Owns the existing GeolocationPermissions - Updates WebViewCore to call the GeolocationManager for permissions and for suspending/resuming - Removes superfluous ChromeClient methods for permissions Note that support for mocking will be added in a later change. See bug for details. Bug: 6511338 Change-Id: I4cdbf55846e76b37c161834b83135b4dc48dbcdc --- .../WebCoreSupport/GeolocationClientAndroid.h | 61 ++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 Source/WebKit/android/WebCoreSupport/GeolocationClientAndroid.h (limited to 'Source/WebKit/android/WebCoreSupport/GeolocationClientAndroid.h') diff --git a/Source/WebKit/android/WebCoreSupport/GeolocationClientAndroid.h b/Source/WebKit/android/WebCoreSupport/GeolocationClientAndroid.h new file mode 100644 index 0000000..22405e1 --- /dev/null +++ b/Source/WebKit/android/WebCoreSupport/GeolocationClientAndroid.h @@ -0,0 +1,61 @@ +/* + * Copyright 2012, The Android Open Source Project + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * 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 THE COPYRIGHT HOLDERS ``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 THE COPYRIGHT OWNER 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. + */ + +#ifndef GeolocationClientAndroid_h +#define GeolocationClientAndroid_h + +#include + +namespace android { + +class WebViewCore; + +// The Android implementation of GeolocationClient. Acts as a proxy to +// the real or mock impl, which is owned by the GeolocationManager. +class GeolocationClientAndroid : public WebCore::GeolocationClient { +public: + GeolocationClientAndroid(); + virtual ~GeolocationClientAndroid(); + + // GeolocationClient + virtual void geolocationDestroyed(); + virtual void startUpdating(); + virtual void stopUpdating(); + virtual void setEnableHighAccuracy(bool); + virtual WebCore::GeolocationPosition* lastPosition(); + virtual void requestPermission(WebCore::Geolocation*); + virtual void cancelPermissionRequest(WebCore::Geolocation*); + + void setWebViewCore(WebViewCore*); + +private: + WebCore::GeolocationClient* client() const; + + WebViewCore* m_webViewCore; +}; + +} // namespace android + +#endif // GeolocationClientAndroid_h -- cgit v1.1