Index: chrome/browser/geolocation/geolocation_permission_context_android.h |
diff --git a/chrome/browser/geolocation/geolocation_permission_context_android.h b/chrome/browser/geolocation/geolocation_permission_context_android.h |
index 24337f9cd6ecaf5997d16c598bd5d0bf5671dd0e..6af10e61ff6c1d4c765d79c3b38c8c838c4f3bf3 100644 |
--- a/chrome/browser/geolocation/geolocation_permission_context_android.h |
+++ b/chrome/browser/geolocation/geolocation_permission_context_android.h |
@@ -1,10 +1,30 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Copyright 2012 The Chromium Authors. All rights reserved. |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
#ifndef CHROME_BROWSER_GEOLOCATION_GEOLOCATION_PERMISSION_CONTEXT_ANDROID_H_ |
#define CHROME_BROWSER_GEOLOCATION_GEOLOCATION_PERMISSION_CONTEXT_ANDROID_H_ |
+// The flow for geolocation permissions on Android needs to take into account |
+// the global geolocation settings so it differs from the desktop one. It |
+// works as follows. |
+// GeolocationPermissionContextAndroid::DecidePermission intercepts the flow in |
+// the UI thread, and posts a task to the blocking pool to CheckSystemLocation. |
+// CheckSystemLocation will in fact check several possible settings |
+// - The global system geolocation setting |
+// - The Google location settings on pre KK devices |
+// - An old internal Chrome setting on pre-JB MR1 devices |
+// With all that information it will decide if system location is enabled. |
+// If enabled, it proceeds with the per site flow via |
+// GeolocationPermissionContext (which will check per site permissions, create |
+// infobars, etc.). |
+// |
+// Otherwise the permission is already decided. |
+ |
+// There is a bit of thread jumping since some of the permissions (like the |
+// per site settings) are queried on the UI thread while the system level |
+// permissions are considered I/O and thus checked in the blocking thread pool. |
+ |
#include "chrome/browser/content_settings/permission_request_id.h" |
#include "chrome/browser/geolocation/geolocation_permission_context.h" |
#include "url/gurl.h" |
@@ -15,8 +35,7 @@ class WebContents; |
class GoogleLocationSettingsHelper; |
-// Android-specific geolocation permission flow, taking into account the |
-// Google Location Settings, if available. |
+ |
class GeolocationPermissionContextAndroid |
: public GeolocationPermissionContext { |
public: |
@@ -42,24 +61,16 @@ class GeolocationPermissionContextAndroid |
const GURL& requesting_frame, |
bool user_gesture, |
const GURL& embedder, |
- const std::string& accept_button_label, |
base::Callback<void(bool)> callback) OVERRIDE; |
- virtual void PermissionDecided(const PermissionRequestID& id, |
- const GURL& requesting_frame, |
- const GURL& embedder, |
- base::Callback<void(bool)> callback, |
- bool allowed) OVERRIDE; |
- |
void ProceedDecidePermission(content::WebContents* web_contents, |
const PermissionRequestInfo& info, |
- const std::string& accept_button_label, |
base::Callback<void(bool)> callback); |
scoped_ptr<GoogleLocationSettingsHelper> google_location_settings_helper_; |
private: |
- void CheckMasterLocation(content::WebContents* web_contents, |
+ void CheckSystemLocation(content::WebContents* web_contents, |
const PermissionRequestInfo& info, |
base::Callback<void(bool)> callback); |