1 // Copyright 2018 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "third_party/blink/renderer/modules/bluetooth/bluetooth_manufacturer_data_map.h"
6
7 #include "third_party/blink/renderer/core/typed_arrays/dom_data_view.h"
8 #include "third_party/blink/renderer/modules/bluetooth/bluetooth_remote_gatt_utils.h"
9
10 namespace blink {
11
12 class BluetoothManufacturerDataMapIterationSource final
13 : public PairIterable<uint16_t, Member<DOMDataView>>::IterationSource {
14 public:
BluetoothManufacturerDataMapIterationSource(const BluetoothManufacturerDataMap & map)15 explicit BluetoothManufacturerDataMapIterationSource(
16 const BluetoothManufacturerDataMap& map)
17 : map_(map), iterator_(map_->Map().begin()) {}
18
Next(ScriptState * script_state,uint16_t & map_key,Member<DOMDataView> & map_value,ExceptionState &)19 bool Next(ScriptState* script_state,
20 uint16_t& map_key,
21 Member<DOMDataView>& map_value,
22 ExceptionState&) override {
23 if (iterator_ == map_->Map().end())
24 return false;
25 map_key = iterator_->key;
26 map_value =
27 BluetoothRemoteGATTUtils::ConvertWTFVectorToDataView(iterator_->value);
28 ++iterator_;
29 return true;
30 }
31
Trace(Visitor * visitor)32 void Trace(Visitor* visitor) override {
33 visitor->Trace(map_);
34 PairIterable<uint16_t, Member<DOMDataView>>::IterationSource::Trace(
35 visitor);
36 }
37
38 private:
39 // Needs to be kept alive while we're iterating over it.
40 const Member<const BluetoothManufacturerDataMap> map_;
41 BluetoothManufacturerDataMap::MapType::const_iterator iterator_;
42 };
43
BluetoothManufacturerDataMap(const BluetoothManufacturerDataMap::MapType & map)44 BluetoothManufacturerDataMap::BluetoothManufacturerDataMap(
45 const BluetoothManufacturerDataMap::MapType& map)
46 : parameter_map_(map) {}
47
~BluetoothManufacturerDataMap()48 BluetoothManufacturerDataMap::~BluetoothManufacturerDataMap() {}
49
50 PairIterable<uint16_t, Member<DOMDataView>>::IterationSource*
StartIteration(ScriptState *,ExceptionState &)51 BluetoothManufacturerDataMap::StartIteration(ScriptState*, ExceptionState&) {
52 return MakeGarbageCollected<BluetoothManufacturerDataMapIterationSource>(
53 *this);
54 }
55
GetMapEntry(ScriptState *,const uint16_t & key,Member<DOMDataView> & value,ExceptionState &)56 bool BluetoothManufacturerDataMap::GetMapEntry(ScriptState*,
57 const uint16_t& key,
58 Member<DOMDataView>& value,
59 ExceptionState&) {
60 auto it = parameter_map_.find(key);
61 if (it == parameter_map_.end())
62 return false;
63
64 DOMDataView* dom_data_view =
65 BluetoothRemoteGATTUtils::ConvertWTFVectorToDataView(it->value);
66
67 value = dom_data_view;
68 return true;
69 }
70
71 } // namespace blink
72