blob: 1326f66c554bf09e694ac5d5cc2b3d92bf724245 [file]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "modules/bluetooth/BluetoothAttributeInstanceMap.h"
#include "modules/bluetooth/BluetoothDevice.h"
#include "modules/bluetooth/BluetoothRemoteGATTService.h"
#include <memory>
#include <utility>
namespace blink {
BluetoothAttributeInstanceMap::BluetoothAttributeInstanceMap(
BluetoothDevice* device)
: m_device(device) {}
BluetoothRemoteGATTService*
BluetoothAttributeInstanceMap::getOrCreateRemoteGATTService(
mojom::blink::WebBluetoothRemoteGATTServicePtr remoteGATTService,
bool isPrimary,
const String& deviceInstanceId) {
String serviceInstanceId = remoteGATTService->instance_id;
BluetoothRemoteGATTService* service =
m_serviceIdToObject.get(serviceInstanceId);
if (!service) {
service = new BluetoothRemoteGATTService(
std::move(remoteGATTService), isPrimary, deviceInstanceId, m_device);
m_serviceIdToObject.add(serviceInstanceId, service);
}
return service;
}
bool BluetoothAttributeInstanceMap::containsService(
const String& serviceInstanceId) {
return m_serviceIdToObject.contains(serviceInstanceId);
}
BluetoothRemoteGATTCharacteristic*
BluetoothAttributeInstanceMap::getOrCreateRemoteGATTCharacteristic(
ExecutionContext* context,
mojom::blink::WebBluetoothRemoteGATTCharacteristicPtr
remoteGATTCharacteristic,
BluetoothRemoteGATTService* service) {
String instanceId = remoteGATTCharacteristic->instance_id;
BluetoothRemoteGATTCharacteristic* characteristic =
m_characteristicIdToObject.get(instanceId);
if (!characteristic) {
characteristic = BluetoothRemoteGATTCharacteristic::create(
context, std::move(remoteGATTCharacteristic), service, m_device);
m_characteristicIdToObject.add(instanceId, characteristic);
}
return characteristic;
}
bool BluetoothAttributeInstanceMap::containsCharacteristic(
const String& characteristicInstanceId) {
return m_characteristicIdToObject.contains(characteristicInstanceId);
}
BluetoothRemoteGATTDescriptor*
BluetoothAttributeInstanceMap::getOrCreateBluetoothRemoteGATTDescriptor(
mojom::blink::WebBluetoothRemoteGATTDescriptorPtr descriptor,
BluetoothRemoteGATTCharacteristic* characteristic) {
String instanceId = descriptor->instance_id;
BluetoothRemoteGATTDescriptor* result =
m_descriptorIdToObject.get(instanceId);
if (result)
return result;
result =
new BluetoothRemoteGATTDescriptor(std::move(descriptor), characteristic);
m_descriptorIdToObject.add(instanceId, result);
return result;
}
bool BluetoothAttributeInstanceMap::containsDescriptor(
const String& descriptorInstanceId) {
return m_descriptorIdToObject.contains(descriptorInstanceId);
}
void BluetoothAttributeInstanceMap::Clear() {
m_serviceIdToObject.clear();
m_characteristicIdToObject.clear();
m_descriptorIdToObject.clear();
}
DEFINE_TRACE(BluetoothAttributeInstanceMap) {
visitor->trace(m_device);
visitor->trace(m_serviceIdToObject);
visitor->trace(m_characteristicIdToObject);
visitor->trace(m_descriptorIdToObject);
}
} // namespace blink