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 | |
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')
6 files changed, 26 insertions, 12 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(); diff --git a/chrome/browser/geolocation/geolocation_permission_context_android.cc b/chrome/browser/geolocation/geolocation_permission_context_android.cc index 6b33983..2441e59 100644 --- a/chrome/browser/geolocation/geolocation_permission_context_android.cc +++ b/chrome/browser/geolocation/geolocation_permission_context_android.cc @@ -21,11 +21,11 @@ GeolocationPermissionContextAndroid::~GeolocationPermissionContextAndroid() { void GeolocationPermissionContextAndroid::RequestPermission( content::WebContents* web_contents, - const PermissionRequestID& id, - const GURL& requesting_frame_origin, - bool user_gesture, - const BrowserPermissionCallback& callback) { - if (!location_settings_->IsLocationEnabled()) { + const PermissionRequestID& id, + const GURL& requesting_frame_origin, + bool user_gesture, + const BrowserPermissionCallback& callback) { + if (!location_settings_->CanSitesRequestLocationPermission(web_contents)) { PermissionDecided(id, requesting_frame_origin, web_contents->GetLastCommittedURL().GetOrigin(), callback, false /* persist */, CONTENT_SETTING_BLOCK); |