1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
|
// Copyright 2016 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_ASH_POLICY_HANDLERS_BLUETOOTH_POLICY_HANDLER_H_
#define CHROME_BROWSER_ASH_POLICY_HANDLERS_BLUETOOTH_POLICY_HANDLER_H_
#include "base/memory/raw_ptr.h"
#include "base/memory/ref_counted.h"
#include "base/memory/weak_ptr.h"
#include "chromeos/ash/components/settings/cros_settings.h"
#include "device/bluetooth/bluetooth_adapter.h"
namespace policy {
// This class observes the device setting |DeviceAllowBluetooth|, and calls
// BluetoothAdapter::Shutdown() appropriately based on the value of that
// setting.
class BluetoothPolicyHandler : public device::BluetoothAdapter::Observer {
public:
explicit BluetoothPolicyHandler(ash::CrosSettings* cros_settings);
BluetoothPolicyHandler(const BluetoothPolicyHandler&) = delete;
BluetoothPolicyHandler& operator=(const BluetoothPolicyHandler&) = delete;
~BluetoothPolicyHandler() override;
// device::BluetoothAdapter::Observer:
void AdapterPresentChanged(device::BluetoothAdapter* adapter,
bool present) override;
void AdapterPoweredChanged(device::BluetoothAdapter* adapter,
bool powered) override;
private:
// Saves a reference to the adapter (so it stays alive) and calls
// |SetBluetoothPolicy| to update the current policy to the adapter.
void InitializeOnAdapterReady(
scoped_refptr<device::BluetoothAdapter> adapter);
// Once a trusted set of policies is established, this function calls
// |Shutdown| with the trusted state of the |DeviceAllowBluetooth| policy
// through helper function |SetBluetoothPolicy|.
void OnBluetoothPolicyChanged();
// Set the current policies to the Bluetooth adapter if |adapter_| is ready
// and a new policy is found but not yet set to the adapter.
void SetBluetoothPolicy();
raw_ptr<ash::CrosSettings, DanglingUntriaged> cros_settings_;
base::CallbackListSubscription allow_bluetooth_subscription_;
base::CallbackListSubscription allowed_services_subscription_;
scoped_refptr<device::BluetoothAdapter> adapter_;
bool new_policy_update_pending_ = false;
base::WeakPtrFactory<BluetoothPolicyHandler> weak_factory_{this};
};
} // namespace policy
#endif // CHROME_BROWSER_ASH_POLICY_HANDLERS_BLUETOOTH_POLICY_HANDLER_H_
|