diff options
author | tedchoc <tedchoc@chromium.org> | 2015-06-25 10:28:00 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-06-25 17:28:53 +0000 |
commit | c346106e1bb0760e297e2b6ce16720c0095e9d73 (patch) | |
tree | 42056ada8d4902b8c72eb3234a1f310e7063c3af /chrome/browser/android | |
parent | 5b4ba92dad3dd839774db650eb7ec61a799f46c6 (diff) | |
download | chromium_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.h | 12 | ||||
-rw-r--r-- | chrome/browser/android/location_settings_impl.cc | 7 | ||||
-rw-r--r-- | chrome/browser/android/location_settings_impl.h | 3 | ||||
-rw-r--r-- | chrome/browser/android/mock_location_settings.cc | 3 | ||||
-rw-r--r-- | chrome/browser/android/mock_location_settings.h | 3 |
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(); |