blob: 4941fc556ab649c9ddc450185ad8ad53bca5804c [file] [log] [blame]
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/permissions/system/geolocation_observation.h"
#include "components/content_settings/core/common/content_settings_types.h"
#include "services/device/public/cpp/geolocation/geolocation_system_permission_manager.h"
static_assert(BUILDFLAG(OS_LEVEL_GEOLOCATION_PERMISSION_SUPPORTED));
namespace system_permission_settings {
GeolocationObservation::GeolocationObservation(
SystemPermissionChangedCallback callback)
: callback_(std::move(callback)) {
auto* geolocation_manager =
device::GeolocationSystemPermissionManager::GetInstance();
if (geolocation_manager) {
// Geolocation manager may not be available in some scenarios (unit_tests).
observation_.Observe(geolocation_manager);
}
}
GeolocationObservation::~GeolocationObservation() = default;
// device::GeolocationSystemPermissionManager::PermissionObserver:
void GeolocationObservation::OnSystemPermissionUpdated(
device::LocationSystemPermissionStatus new_status) {
const bool is_blocked =
(new_status == device::LocationSystemPermissionStatus::kDenied);
callback_.Run(ContentSettingsType::GEOLOCATION, is_blocked);
}
} // namespace system_permission_settings