diff options
author | Steve Block <steveblock@google.com> | 2012-05-17 18:17:15 +0100 |
---|---|---|
committer | Steve Block <steveblock@google.com> | 2012-05-22 14:17:23 +0100 |
commit | 5c36c4ca9214cbbe65d12f6b138aef9618d41a99 (patch) | |
tree | 8112a55f7cf8cb505115429d01ee73badf586896 /Source/WebKit/android/jni/WebCoreFrameBridge.cpp | |
parent | 0e1334bbc130fb9f7b19ea2354693cea34ebb894 (diff) | |
download | external_webkit-5c36c4ca9214cbbe65d12f6b138aef9618d41a99.zip external_webkit-5c36c4ca9214cbbe65d12f6b138aef9618d41a99.tar.gz external_webkit-5c36c4ca9214cbbe65d12f6b138aef9618d41a99.tar.bz2 |
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
Diffstat (limited to 'Source/WebKit/android/jni/WebCoreFrameBridge.cpp')
-rw-r--r-- | Source/WebKit/android/jni/WebCoreFrameBridge.cpp | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/Source/WebKit/android/jni/WebCoreFrameBridge.cpp b/Source/WebKit/android/jni/WebCoreFrameBridge.cpp index af582fa..a9fa288 100644 --- a/Source/WebKit/android/jni/WebCoreFrameBridge.cpp +++ b/Source/WebKit/android/jni/WebCoreFrameBridge.cpp @@ -50,6 +50,7 @@ #include "FrameLoadRequest.h" #include "FrameTree.h" #include "FrameView.h" +#include "GeolocationClientAndroid.h" #include "GraphicsContext.h" #include "HistoryItem.h" #include "HTMLCollection.h" @@ -497,15 +498,9 @@ WebFrame::loadStarted(WebCore::Frame* frame) if (favicon) env->DeleteLocalRef(favicon); - // Inform the client that the main frame has started a new load. - if (isMainFrame && mPage) { - Chrome* chrome = mPage->chrome(); - if (chrome) { - ChromeClientAndroid* client = static_cast<ChromeClientAndroid*>(chrome->client()); - if (client) - client->onMainFrameLoadStarted(); - } - } + // The main frame has started a new load. + if (isMainFrame && mPage) + WebViewCore::getWebViewCore(mPage->mainFrame()->view())->geolocationManager()->resetRealClientTemporaryPermissionStates(); } void @@ -1099,6 +1094,7 @@ static void CreateFrame(JNIEnv* env, jobject obj, jobject javaview, jobject jAss EditorClientAndroid* editorC = new EditorClientAndroid; DeviceMotionClientAndroid* deviceMotionC = new DeviceMotionClientAndroid; DeviceOrientationClientAndroid* deviceOrientationC = new DeviceOrientationClientAndroid; + GeolocationClientAndroid* geolocationC = new GeolocationClientAndroid; WebCore::Page::PageClients pageClients; pageClients.chromeClient = chromeC; @@ -1108,6 +1104,7 @@ static void CreateFrame(JNIEnv* env, jobject obj, jobject javaview, jobject jAss pageClients.inspectorClient = new InspectorClientAndroid; pageClients.deviceMotionClient = deviceMotionC; pageClients.deviceOrientationClient = deviceOrientationC; + pageClients.geolocationClient = geolocationC; WebCore::Page* page = new WebCore::Page(pageClients); editorC->setPage(page); @@ -1150,6 +1147,7 @@ static void CreateFrame(JNIEnv* env, jobject obj, jobject javaview, jobject jAss frame->page()->focusController()->setFocused(true); deviceMotionC->setWebViewCore(webViewCore); deviceOrientationC->setWebViewCore(webViewCore); + geolocationC->setWebViewCore(webViewCore); // Allow local access to file:/// and substitute data WebCore::SecurityOrigin::setLocalLoadPolicy( |