Chromium Code Reviews| Index: chrome/android/java/src/org/chromium/chrome/browser/preferences/LocationSettings.java |
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/LocationSettings.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/LocationSettings.java |
| index 7d45e0e1096a680b1cc6c1c530316eae908eda7e..f03c379af4f9b52947fa5c1cd16f16720cbba18e 100644 |
| --- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/LocationSettings.java |
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/LocationSettings.java |
| @@ -6,6 +6,7 @@ package org.chromium.chrome.browser.preferences; |
| import android.Manifest; |
| +import org.chromium.base.Callback; |
| import org.chromium.base.ContextUtils; |
| import org.chromium.base.ThreadUtils; |
| import org.chromium.base.VisibleForTesting; |
| @@ -13,6 +14,7 @@ import org.chromium.base.annotations.CalledByNative; |
| import org.chromium.base.annotations.SuppressFBWarnings; |
| import org.chromium.chrome.browser.ChromeApplication; |
| import org.chromium.components.location.LocationUtils; |
| +import org.chromium.components.location.LocationUtils.LocationSettingsDialogPromptOutcome; |
| import org.chromium.content.browser.ContentViewCore; |
| import org.chromium.content_public.browser.WebContents; |
| import org.chromium.ui.base.WindowAndroid; |
| @@ -50,9 +52,7 @@ public class LocationSettings { |
| @CalledByNative |
| private static boolean canSitesRequestLocationPermission(WebContents webContents) { |
| - ContentViewCore cvc = ContentViewCore.fromWebContents(webContents); |
| - if (cvc == null) return false; |
| - WindowAndroid windowAndroid = cvc.getWindowAndroid(); |
| + WindowAndroid windowAndroid = windowFromWebContents(webContents); |
| if (windowAndroid == null) return false; |
| LocationUtils locationUtils = LocationUtils.getInstance(); |
| @@ -62,6 +62,30 @@ public class LocationSettings { |
| || windowAndroid.canRequestPermission(Manifest.permission.ACCESS_FINE_LOCATION); |
| } |
| + @CalledByNative |
| + public static boolean canPromptToEnableSystemLocationSetting() { |
| + return LocationUtils.getInstance().canPromptToEnableSystemLocationSetting(); |
| + } |
| + |
| + @CalledByNative |
| + public static void promptToEnableSystemLocationSetting( |
| + int promptContext, WebContents webContents, final long nativeCallback) { |
| + WindowAndroid window = windowFromWebContents(webContents); |
| + if (window == null) { |
| + nativeOnLocationSettingsDialogPromptOutcomeReceived( |
| + nativeCallback, LocationSettingsDialogPromptOutcome.NO_PROMPT); |
| + return; |
| + } |
| + LocationUtils.getInstance().promptToEnableSystemLocationSetting( |
| + promptContext, window, |
| + new Callback<Integer>() { |
| + @Override |
| + public void onResult(Integer result) { |
| + nativeOnLocationSettingsDialogPromptOutcomeReceived(nativeCallback, result); |
| + } |
| + }); |
| + } |
| + |
| /** |
| * Returns true if location is enabled system-wide and the Chrome location setting is enabled. |
| */ |
| @@ -81,4 +105,13 @@ public class LocationSettings { |
| public static void setInstanceForTesting(LocationSettings instance) { |
| sInstance = instance; |
| } |
| + |
| + private static WindowAndroid windowFromWebContents(WebContents webContents) { |
| + ContentViewCore contentViewCore = ContentViewCore.fromWebContents(webContents); |
| + if (contentViewCore == null) return null; |
| + return contentViewCore.getWindowAndroid(); |
| + } |
| + |
| + private static native void nativeOnLocationSettingsDialogPromptOutcomeReceived( |
|
benwells
2017/03/01 03:51:26
Nit: can we make this just nativeOnLocationSetting
qfiard
2017/03/01 08:48:18
Done.
|
| + long callback, int result); |
| } |