From b7bf24bc7f4d62dd0f4417b45cbf4423fe664aa7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=20Vassb=C3=B8?= Date: Wed, 20 Jul 2016 05:41:32 -0700 Subject: [PATCH] Support geolocation in android webview Summary: Makes sure request for geolocation use in the webview is handled. This solves issue #7609 Currently use of geolocation in webview fails silently, as the permission request is never received by the native app. **Test plan (required)** 1. Create new project with webview 2. Add javascript for geolocation: ```javascript navigator.geolocation.getCurrentPosition(function (position) { console.log('success', position) }, function (error) { console.log('could not determine position', error) }) ``` 3. Run code and assert geolocation permission is requested, resulting in success (or error) callback being called Closes https://github.com/facebook/react-native/pull/8305 Differential Revision: D3592887 fbshipit-source-id: 84fe2383fba8873431c5e89d154c0a4fd58ffb70 --- .../facebook/react/views/webview/ReactWebViewManager.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/webview/ReactWebViewManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/webview/ReactWebViewManager.java index 3ed60497b..9f4c5a7ad 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/webview/ReactWebViewManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/webview/ReactWebViewManager.java @@ -18,6 +18,7 @@ import java.util.Map; import android.graphics.Bitmap; import android.os.Build; import android.text.TextUtils; +import android.webkit.GeolocationPermissions; import android.webkit.WebView; import android.webkit.WebViewClient; import android.webkit.WebChromeClient; @@ -259,7 +260,12 @@ public class ReactWebViewManager extends SimpleViewManager { @Override protected WebView createViewInstance(ThemedReactContext reactContext) { ReactWebView webView = new ReactWebView(reactContext); - webView.setWebChromeClient(new WebChromeClient()); + webView.setWebChromeClient(new WebChromeClient() { + @Override + public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) { + callback.invoke(origin, true, false); + } + }); reactContext.addLifecycleEventListener(webView); mWebViewConfig.configWebView(webView); webView.getSettings().setBuiltInZoomControls(true);