OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2016 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 "components/arc/bluetooth/bluetooth_struct_traits.h" | |
6 | |
7 #include <memory> | |
8 #include <utility> | |
9 | |
10 namespace mojo { | |
11 | |
12 // static | |
13 arc::mojom::BluetoothSdpAttrType | |
14 EnumTraits<arc::mojom::BluetoothSdpAttrType, | |
15 bluez::BluetoothServiceAttributeValueBlueZ::Type>:: | |
16 ToMojom(bluez::BluetoothServiceAttributeValueBlueZ::Type input) { | |
17 switch (input) { | |
18 case bluez::BluetoothServiceAttributeValueBlueZ::NULLTYPE: | |
19 case bluez::BluetoothServiceAttributeValueBlueZ::UINT: | |
20 case bluez::BluetoothServiceAttributeValueBlueZ::INT: | |
21 case bluez::BluetoothServiceAttributeValueBlueZ::UUID: | |
22 case bluez::BluetoothServiceAttributeValueBlueZ::STRING: | |
23 case bluez::BluetoothServiceAttributeValueBlueZ::BOOL: | |
24 case bluez::BluetoothServiceAttributeValueBlueZ::SEQUENCE: | |
25 case bluez::BluetoothServiceAttributeValueBlueZ::URL: | |
26 return static_cast<arc::mojom::BluetoothSdpAttrType>(input); | |
27 default: | |
28 NOTREACHED() << "Invalid type: " << static_cast<uint32_t>(input); | |
29 return arc::mojom::BluetoothSdpAttrType::NULLTYPE; | |
30 } | |
31 } | |
32 | |
33 // static | |
34 bool EnumTraits<arc::mojom::BluetoothSdpAttrType, | |
35 bluez::BluetoothServiceAttributeValueBlueZ::Type>:: | |
36 FromMojom(arc::mojom::BluetoothSdpAttrType input, | |
37 bluez::BluetoothServiceAttributeValueBlueZ::Type* output) { | |
38 switch (input) { | |
39 case arc::mojom::BluetoothSdpAttrType::NULLTYPE: | |
40 case arc::mojom::BluetoothSdpAttrType::UINT: | |
41 case arc::mojom::BluetoothSdpAttrType::INT: | |
42 case arc::mojom::BluetoothSdpAttrType::UUID: | |
43 case arc::mojom::BluetoothSdpAttrType::STRING: | |
44 case arc::mojom::BluetoothSdpAttrType::BOOL: | |
45 case arc::mojom::BluetoothSdpAttrType::SEQUENCE: | |
46 case arc::mojom::BluetoothSdpAttrType::URL: | |
47 *output = | |
48 static_cast<bluez::BluetoothServiceAttributeValueBlueZ::Type>(input); | |
49 return true; | |
50 default: | |
51 NOTREACHED() << "Invalid type: " << static_cast<uint32_t>(input); | |
52 return false; | |
53 } | |
54 } | |
55 | |
56 // static | |
57 bool StructTraits<arc::mojom::BluetoothSdpServiceAttr, | |
58 bluez::BluetoothServiceAttributeValueBlueZ>:: | |
59 Read(arc::mojom::BluetoothSdpServiceAttrDataView data, | |
60 bluez::BluetoothServiceAttributeValueBlueZ* output) { | |
61 bluez::BluetoothServiceAttributeValueBlueZ::Type type; | |
62 if (!data.ReadType(&type)) | |
63 return false; | |
64 | |
65 switch (type) { | |
66 case bluez::BluetoothServiceAttributeValueBlueZ::NULLTYPE: | |
67 case bluez::BluetoothServiceAttributeValueBlueZ::UINT: | |
68 case bluez::BluetoothServiceAttributeValueBlueZ::INT: | |
69 case bluez::BluetoothServiceAttributeValueBlueZ::UUID: | |
70 case bluez::BluetoothServiceAttributeValueBlueZ::STRING: | |
71 case bluez::BluetoothServiceAttributeValueBlueZ::URL: | |
72 case bluez::BluetoothServiceAttributeValueBlueZ::BOOL: { | |
73 base::ListValue list_value; | |
74 if (!data.ReadValue(&list_value) || list_value.GetSize() != 1) | |
75 return false; | |
76 | |
77 size_t size = static_cast<size_t>(data.type_size()); | |
78 base::Value* value = nullptr; | |
79 list_value.Get(0, &value); | |
80 | |
81 *output = bluez::BluetoothServiceAttributeValueBlueZ( | |
82 type, size, value->CreateDeepCopy()); | |
83 break; | |
84 } | |
85 case bluez::BluetoothServiceAttributeValueBlueZ::SEQUENCE: { | |
86 std::unique_ptr<bluez::BluetoothServiceAttributeValueBlueZ::Sequence> | |
87 sequence(new bluez::BluetoothServiceAttributeValueBlueZ::Sequence()); | |
88 if (!data.ReadSequence(sequence.get()) || sequence->empty()) | |
89 return false; | |
90 *output = bluez::BluetoothServiceAttributeValueBlueZ(std::move(sequence)); | |
puthik_chromium
2016/08/24 00:32:20
When I test this. Chrome crash at this line.
Miao
2016/08/25 16:51:36
I think that is by null field. It should be revolv
| |
91 break; | |
92 } | |
93 default: | |
94 return false; | |
95 } | |
96 return true; | |
97 } | |
98 | |
99 // static | |
100 bool StructTraits<arc::mojom::BluetoothSdpRecord, | |
101 bluez::BluetoothServiceRecordBlueZ>:: | |
102 Read(arc::mojom::BluetoothSdpRecordDataView data, | |
103 bluez::BluetoothServiceRecordBlueZ* output) { | |
104 std::map<uint16_t, bluez::BluetoothServiceAttributeValueBlueZ> attributes; | |
yzshen1
2016/08/22 23:42:14
Performance tip: because |attributes| is not direc
Miao
2016/08/25 16:51:36
Adding a setting function is not a preferable way,
| |
105 if (!data.ReadAttrs(&attributes) || attributes.empty()) | |
106 return false; | |
107 | |
108 for (auto& it : attributes) | |
109 output->AddRecordEntry(it.first, it.second); | |
110 | |
111 return true; | |
112 } | |
113 | |
114 } // namespace mojo | |
OLD | NEW |