| // Copyright 2021 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/lacros/device_settings_lacros.h" |
| |
| #include <utility> |
| |
| #include "base/functional/bind.h" |
| #include "base/observer_list.h" |
| #include "base/sequence_checker.h" |
| #include "base/task/single_thread_task_runner.h" |
| #include "chromeos/crosapi/mojom/device_settings_service.mojom.h" |
| #include "chromeos/lacros/lacros_service.h" |
| #include "chromeos/startup/browser_params_proxy.h" |
| |
| DeviceSettingsLacros::DeviceSettingsLacros() { |
| device_settings_ = |
| chromeos::BrowserParamsProxy::Get()->DeviceSettings().Clone(); |
| |
| // DeviceSettingsService is not available yet at the time when this is |
| // constructed. So, we post it as a task to be executed later. |
| base::SingleThreadTaskRunner::GetCurrentDefault()->PostTask( |
| FROM_HERE, base::BindOnce(&DeviceSettingsLacros::Init, |
| weak_ptr_factory_.GetWeakPtr())); |
| } |
| |
| DeviceSettingsLacros::~DeviceSettingsLacros() = default; |
| |
| void DeviceSettingsLacros::Init() { |
| auto* lacros_service = chromeos::LacrosService::Get(); |
| if (!lacros_service || |
| !lacros_service->IsAvailable<crosapi::mojom::DeviceSettingsService>()) { |
| LOG(ERROR) << "DeviceSettingsService not available."; |
| return; |
| } |
| |
| lacros_service->GetRemote<crosapi::mojom::DeviceSettingsService>() |
| ->AddDeviceSettingsObserver( |
| receiver_.BindNewPipeAndPassRemoteWithVersion()); |
| } |
| |
| crosapi::mojom::DeviceSettings* DeviceSettingsLacros::GetDeviceSettings() { |
| DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
| return device_settings_.get(); |
| } |
| |
| void DeviceSettingsLacros::UpdateDeviceSettings( |
| crosapi::mojom::DeviceSettingsPtr device_settings) { |
| DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
| device_settings_ = std::move(device_settings); |
| |
| // Also notify observers. |
| for (auto& observer : observers_) { |
| observer.OnDeviceSettingsUpdated(); |
| } |
| } |
| |
| void DeviceSettingsLacros::AddObserver( |
| DeviceSettingsLacros::Observer* observer) { |
| observers_.AddObserver(observer); |
| } |
| |
| void DeviceSettingsLacros::RemoveObserver( |
| DeviceSettingsLacros::Observer* observer) { |
| observers_.RemoveObserver(observer); |
| } |