1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CHROME_BROWSER_GEOLOCATION_GEOLOCATION_PERMISSION_CONTEXT_ANDROID_H_ 6 #define CHROME_BROWSER_GEOLOCATION_GEOLOCATION_PERMISSION_CONTEXT_ANDROID_H_ 7 8 #include "chrome/browser/content_settings/permission_request_id.h" 9 #include "chrome/browser/geolocation/geolocation_permission_context.h" 10 #include "url/gurl.h" 11 12 namespace content { 13 class WebContents; 14 } 15 16 class GoogleLocationSettingsHelper; 17 18 // Android-specific geolocation permission flow, taking into account the 19 // Google Location Settings, if available. 20 class GeolocationPermissionContextAndroid 21 : public GeolocationPermissionContext { 22 public: 23 explicit GeolocationPermissionContextAndroid(Profile* profile); 24 25 private: 26 struct PermissionRequestInfo { 27 PermissionRequestInfo(); 28 29 PermissionRequestID id; 30 GURL requesting_frame; 31 bool user_gesture; 32 GURL embedder; 33 }; 34 35 friend class GeolocationPermissionContext; 36 37 virtual ~GeolocationPermissionContextAndroid(); 38 39 // GeolocationPermissionContext implementation: 40 virtual void DecidePermission(content::WebContents* web_contents, 41 const PermissionRequestID& id, 42 const GURL& requesting_frame, 43 bool user_gesture, 44 const GURL& embedder, 45 const std::string& accept_button_label, 46 base::Callback<void(bool)> callback) OVERRIDE; 47 48 virtual void PermissionDecided(const PermissionRequestID& id, 49 const GURL& requesting_frame, 50 const GURL& embedder, 51 base::Callback<void(bool)> callback, 52 bool allowed) OVERRIDE; 53 54 void ProceedDecidePermission(content::WebContents* web_contents, 55 const PermissionRequestInfo& info, 56 const std::string& accept_button_label, 57 base::Callback<void(bool)> callback); 58 59 scoped_ptr<GoogleLocationSettingsHelper> google_location_settings_helper_; 60 61 private: 62 void CheckMasterLocation(content::WebContents* web_contents, 63 const PermissionRequestInfo& info, 64 base::Callback<void(bool)> callback); 65 66 DISALLOW_COPY_AND_ASSIGN(GeolocationPermissionContextAndroid); 67 }; 68 69 #endif // CHROME_BROWSER_GEOLOCATION_GEOLOCATION_PERMISSION_CONTEXT_ANDROID_H_ 70