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 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
|
// 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
|