| // Copyright 2015 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_ANDROID_LOCATION_SETTINGS_H_ |
| #define CHROME_BROWSER_ANDROID_LOCATION_SETTINGS_H_ |
| |
| #include "base/callback.h" |
| #include "base/macros.h" |
| #include "components/location/android/location_settings_dialog_context.h" |
| #include "components/location/android/location_settings_dialog_outcome.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 Chrome has location permission. |
| virtual bool HasAndroidLocationPermission() = 0; |
| |
| // Returns true if Chrome can prompt to get location permission. |
| virtual bool CanPromptForAndroidLocationPermission( |
| content::WebContents* web_contents) = 0; |
| |
| // Returns true if the system location is enabled. |
| virtual bool IsSystemLocationSettingEnabled() = 0; |
| |
| // Returns true iff a prompt can be triggered to ask the user to turn on the |
| // system location setting on their device. |
| // In particular, returns false if the system location setting is already |
| // enabled or if some of the features required to trigger a system location |
| // setting prompt are not available. |
| virtual bool CanPromptToEnableSystemLocationSetting() = 0; |
| |
| typedef base::OnceCallback<void(LocationSettingsDialogOutcome)> |
| LocationSettingsDialogOutcomeCallback; |
| |
| // Triggers a prompt to ask the user to turn on the system location setting on |
| // their device, and returns the outcome of the prompt via a callback. |
| // |
| // The prompt will be triggered in the activity of the web contents. |
| // |
| // The callback is guaranteed to be called unless the user never replies to |
| // the prompt dialog, which in practice happens very infrequently since the |
| // dialog is modal. |
| // |
| // The callback may be invoked a long time after this method has returned. |
| // If you need to access in the callback an object that is not owned by the |
| // callback, you should ensure that the object has not been destroyed before |
| // accessing it to prevent crashes, e.g. by using weak pointer semantics. |
| virtual void PromptToEnableSystemLocationSetting( |
| const LocationSettingsDialogContext prompt_context, |
| content::WebContents* web_contents, |
| LocationSettingsDialogOutcomeCallback callback) = 0; |
| }; |
| |
| #endif // CHROME_BROWSER_ANDROID_LOCATION_SETTINGS_H_ |