Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(72)

Side by Side Diff: components/arc/bluetooth/bluetooth_struct_traits.cc

Issue 2149713002: arc: bluetooth: Add SDP host side support (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove unused includes Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698