blob: 42a10e38dfa3a6678cc347a25a872a3ff3190f8b [file] [log] [blame]
// 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/ash/net/bluetooth_pref_state_observer.h"
#include "chrome/browser/ash/profiles/profile_helper.h"
#include "chrome/browser/profiles/profile.h"
#include "chromeos/ash/services/bluetooth_config/in_process_instance.h"
#include "components/device_event_log/device_event_log.h"
#include "components/prefs/pref_service.h"
namespace ash {
namespace {
void SetPrefs(Profile* profile, PrefService* local_state) {
bluetooth_config::SetPrefs(profile ? profile->GetPrefs() : nullptr,
local_state);
}
} // namespace
BluetoothPrefStateObserver::BluetoothPrefStateObserver(PrefService& local_state)
: local_state_(local_state) {
// Set CrosBluetoothConfig with device prefs only.
SetPrefs(/*profile=*/nullptr, &local_state);
session_observation_.Observe(session_manager::SessionManager::Get());
}
BluetoothPrefStateObserver::~BluetoothPrefStateObserver() {
// Reset the pref services. We are explicitly setting device_prefs to null
// instead of calling SetPrefs(nullptr) to ensure g_browser_process's
// local_state isn't used, in case it's in a bad state. See
// https://crbug.com/1261338.
bluetooth_config::SetPrefs(/*logged_in_profile_prefs=*/nullptr,
/*device_prefs=*/nullptr);
}
void BluetoothPrefStateObserver::OnUserProfileLoaded(
const AccountId& account_id) {
Profile* profile = ProfileHelper::Get()->GetProfileByAccountId(account_id);
CHECK(profile);
// Only set the prefs for primary users.
if (!ProfileHelper::IsPrimaryProfile(profile)) {
BLUETOOTH_LOG(EVENT)
<< "User profile loaded, but user is not primary. Not setting "
<< "CrosBluetoothConfig with profile prefs service";
return;
}
BLUETOOTH_LOG(EVENT) << "Primary profile loaded, setting CrosBluetoothConfig "
<< "with profile prefs service";
SetPrefs(profile, &local_state_.get());
session_observation_.Reset();
}
} // namespace ash