blob: 4b0b6b47768818a0cca1881eef030a8e18ce6d03 [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.
#ifndef CONTENT_BROWSER_BLUETOOTH_WEB_BLUETOOTH_PAIRING_MANAGER_DELEGATE_H_
#define CONTENT_BROWSER_BLUETOOTH_WEB_BLUETOOTH_PAIRING_MANAGER_DELEGATE_H_
#include <string>
#include "base/containers/span.h"
#include "base/functional/callback_forward.h"
#include "content/public/browser/bluetooth_delegate.h"
#include "device/bluetooth/bluetooth_device.h"
#include "mojo/public/cpp/bindings/associated_remote.h"
#include "third_party/blink/public/common/bluetooth/web_bluetooth_device_id.h"
#include "third_party/blink/public/mojom/bluetooth/web_bluetooth.mojom.h"
namespace content {
// A set of functions needed by whatever object (usually
// WebBluetoothServiceImpl) that embeds the WebBluetoothPairingManager and is
// separated into a separate interface for readability and testing purposes.
class WebBluetoothPairingManagerDelegate {
public:
// Return the cached device ID for the given characteric instance ID.
// The returned device ID may be invalid - check before use.
virtual blink::WebBluetoothDeviceId GetCharacteristicDeviceID(
const std::string& characteristic_instance_id) = 0;
// Return the cached device ID for the given descriptor instance ID.
// The returned device ID may be invalid - check before use.
virtual blink::WebBluetoothDeviceId GetDescriptorDeviceId(
const std::string& descriptor_instance_id) = 0;
// Return the cached device ID for the given |device_address|.
// The returned device ID may be invalid - check before use.
virtual blink::WebBluetoothDeviceId GetWebBluetoothDeviceId(
const std::string& device_address) = 0;
// Pair the device identified by |device_id|. If successful, |callback| will
// be run. If unsuccessful |error_callback| wil be run with the corresponding
// error code.
virtual void PairDevice(
const blink::WebBluetoothDeviceId& device_id,
device::BluetoothDevice::PairingDelegate* pairing_delegate,
device::BluetoothDevice::ConnectCallback callback) = 0;
// Cancels a pairing attempt to a remote device, clearing its reference to
// the pairing delegate.
virtual void CancelPairing(const blink::WebBluetoothDeviceId& device_id) = 0;
// Sends the PIN code |pincode| for the remote device during pairing.
virtual void SetPinCode(const blink::WebBluetoothDeviceId& device_id,
const std::string& pincode) = 0;
// The user consented to pairing with the Bluetooth device.
virtual void PairConfirmed(const blink::WebBluetoothDeviceId& device_id) = 0;
// Reads the value for the characteristic identified by
// |characteristic_instance_id|. If the value is successfully read the
// callback will be run with WebBluetoothResult::SUCCESS and the
// characteristic's value. If the value is not successfully read the
// callback will be run with the corresponding error and nullptr for value.
virtual void RemoteCharacteristicReadValue(
const std::string& characteristic_instance_id,
blink::mojom::WebBluetoothService::RemoteCharacteristicReadValueCallback
callback) = 0;
// Writes the |value| for the characteristic identified by
// |characteristic_instance_id|. If the value is successfully written
// |callback| will be run with WebBluetoothResult::SUCCESS. If the value is
// not successfully written |callback| will be run with the corresponding
// error.
virtual void RemoteCharacteristicWriteValue(
const std::string& characteristic_instance_id,
base::span<const uint8_t> value,
blink::mojom::WebBluetoothWriteType write_type,
blink::mojom::WebBluetoothService::RemoteCharacteristicWriteValueCallback
callback) = 0;
// Reads the value for the descriptor identified by |descriptor_instance_id|.
// If successfully read |callback| will be run with
// WebBluetoothResult::SUCCESS and the descriptor value. If the value is not
// successfully read the callback will be run with the corresponding error
// and nullptr for value.
virtual void RemoteDescriptorReadValue(
const std::string& descriptor_instance_id,
blink::mojom::WebBluetoothService::RemoteDescriptorReadValueCallback
callback) = 0;
// Writes the |value| for the descriptor identified by
// |descriptor_instance_id|. If the value is successfully written
// |callback| will be run with WebBluetoothResult::SUCCESS. If the value is
// not successfully written |callback| will be run with the corresponding
// error.
virtual void RemoteDescriptorWriteValue(
const std::string& descriptor_instance_id,
base::span<const uint8_t> value,
blink::mojom::WebBluetoothService::RemoteDescriptorWriteValueCallback
callback) = 0;
virtual void RemoteCharacteristicStartNotificationsInternal(
const std::string& characteristic_instance_id,
mojo::AssociatedRemote<blink::mojom::WebBluetoothCharacteristicClient>
client,
blink::mojom::WebBluetoothService::
RemoteCharacteristicStartNotificationsCallback callback) = 0;
// Display a dialog to prompt to user for Bluetooth pairing.
// |device_identifier| is any string the caller wants to display to the user
// to identify the device (MAC address, name, etc.). |callback| will be called
// with the dialog result. |pairng_kind| will be used to determined which
// prompt to show.
virtual void PromptForBluetoothPairing(
const std::u16string& device_identifier,
BluetoothDelegate::PairPromptCallback callback,
BluetoothDelegate::PairingKind pairing_kind,
const std::optional<std::u16string>& pin) = 0;
};
} // namespace content
#endif // CONTENT_BROWSER_BLUETOOTH_WEB_BLUETOOTH_PAIRING_MANAGER_DELEGATE_H_