summaryrefslogtreecommitdiffstats
path: root/chrome/browser
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
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')
-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
-rw-r--r--chrome/browser/geolocation/geolocation_permission_context_android.cc10
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);