summaryrefslogtreecommitdiffstats
path: root/chrome/browser/android
diff options
context:
space:
mode:
authortedchoc <tedchoc@chromium.org>2015-06-25 10:28:00 -0700
committerCommit bot <commit-bot@chromium.org>2015-06-25 17:28:53 +0000
commitc346106e1bb0760e297e2b6ce16720c0095e9d73 (patch)
tree42056ada8d4902b8c72eb3234a1f310e7063c3af /chrome/browser/android
parent5b4ba92dad3dd839774db650eb7ec61a799f46c6 (diff)
downloadchromium_src-c346106e1bb0760e297e2b6ce16720c0095e9d73.zip
chromium_src-c346106e1bb0760e297e2b6ce16720c0095e9d73.tar.gz
chromium_src-c346106e1bb0760e297e2b6ce16720c0095e9d73.tar.bz2
Add the ability to determine whether Chrome can possibly request an Android permission.
TBR=mvanouwerkerk BUG=503392 Review URL: https://codereview.chromium.org/1207743003 Cr-Commit-Position: refs/heads/master@{#336189}
Diffstat (limited to 'chrome/browser/android')
-rw-r--r--chrome/browser/android/location_settings.h12
-rw-r--r--chrome/browser/android/location_settings_impl.cc7
-rw-r--r--chrome/browser/android/location_settings_impl.h3
-rw-r--r--chrome/browser/android/mock_location_settings.cc3
-rw-r--r--chrome/browser/android/mock_location_settings.h3
5 files changed, 21 insertions, 7 deletions
diff --git a/chrome/browser/android/location_settings.h b/chrome/browser/android/location_settings.h
index 810e43f..5d7fa7e 100644
--- a/chrome/browser/android/location_settings.h
+++ b/chrome/browser/android/location_settings.h
@@ -7,14 +7,22 @@
#include "base/macros.h"
+namespace content {
+class WebContents;
+}
+
// This class determines whether Chrome can access the device's location,
// i.e. whether location is enabled system-wide on the device.
class LocationSettings {
public:
virtual ~LocationSettings() {}
- // Returns true if location is enabled system-wide (in Android settings).
- virtual bool IsLocationEnabled() = 0;
+ // Returns true if:
+ // - Location is enabled system-wide (in Android settings)
+ // - The necessary location permission are granted to Chrome, or if Chrome
+ // still has the ability to request the permissions to be granted.
+ virtual bool CanSitesRequestLocationPermission(
+ content::WebContents* web_contents) = 0;
};
#endif // CHROME_BROWSER_ANDROID_LOCATION_SETTINGS_H_
diff --git a/chrome/browser/android/location_settings_impl.cc b/chrome/browser/android/location_settings_impl.cc
index 065dcc3..93d19f54 100644
--- a/chrome/browser/android/location_settings_impl.cc
+++ b/chrome/browser/android/location_settings_impl.cc
@@ -5,6 +5,7 @@
#include "chrome/browser/android/location_settings_impl.h"
#include "base/android/jni_android.h"
+#include "content/public/browser/web_contents.h"
#include "jni/LocationSettings_jni.h"
using base::android::AttachCurrentThread;
@@ -13,9 +14,11 @@ LocationSettingsImpl::LocationSettingsImpl() {}
LocationSettingsImpl::~LocationSettingsImpl() {}
-bool LocationSettingsImpl::IsLocationEnabled() {
+bool LocationSettingsImpl::CanSitesRequestLocationPermission(
+ content::WebContents* web_contents) {
JNIEnv* env = AttachCurrentThread();
- return Java_LocationSettings_staticIsSystemLocationSettingEnabled(env);
+ return Java_LocationSettings_canSitesRequestLocationPermission(
+ env, web_contents->GetJavaWebContents().obj());
}
// Register native methods
diff --git a/chrome/browser/android/location_settings_impl.h b/chrome/browser/android/location_settings_impl.h
index b040dcd..6fbc8da 100644
--- a/chrome/browser/android/location_settings_impl.h
+++ b/chrome/browser/android/location_settings_impl.h
@@ -18,7 +18,8 @@ class LocationSettingsImpl : public LocationSettings {
static bool Register(JNIEnv* env);
// LocationSettings implementation:
- bool IsLocationEnabled() override;
+ bool CanSitesRequestLocationPermission(
+ content::WebContents* web_contents) override;
private:
DISALLOW_COPY_AND_ASSIGN(LocationSettingsImpl);
diff --git a/chrome/browser/android/mock_location_settings.cc b/chrome/browser/android/mock_location_settings.cc
index 32955ae..350306f 100644
--- a/chrome/browser/android/mock_location_settings.cc
+++ b/chrome/browser/android/mock_location_settings.cc
@@ -27,7 +27,8 @@ bool MockLocationSettings::IsMasterLocationSettingEnabled() {
return master_location_enabled;
}
-bool MockLocationSettings::IsLocationEnabled() {
+bool MockLocationSettings::CanSitesRequestLocationPermission(
+ content::WebContents* web_contents) {
return IsMasterLocationSettingEnabled() &&
IsGoogleAppsLocationSettingEnabled();
}
diff --git a/chrome/browser/android/mock_location_settings.h b/chrome/browser/android/mock_location_settings.h
index e1f3721..b806ad6 100644
--- a/chrome/browser/android/mock_location_settings.h
+++ b/chrome/browser/android/mock_location_settings.h
@@ -15,7 +15,8 @@ class MockLocationSettings : public LocationSettings {
static void SetLocationStatus(bool master, bool google_apps);
- bool IsLocationEnabled() override;
+ bool CanSitesRequestLocationPermission(
+ content::WebContents* web_contents) override;
bool IsMasterLocationSettingEnabled();
bool IsGoogleAppsLocationSettingEnabled();