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

Unified 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 side-by-side diff with in-line comments
Download patch
Index: components/arc/bluetooth/bluetooth_struct_traits.cc
diff --git a/components/arc/bluetooth/bluetooth_struct_traits.cc b/components/arc/bluetooth/bluetooth_struct_traits.cc
new file mode 100644
index 0000000000000000000000000000000000000000..47397eb5fbacd3e07818857763a90d8176a49aeb
--- /dev/null
+++ b/components/arc/bluetooth/bluetooth_struct_traits.cc
@@ -0,0 +1,114 @@
+// 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 "components/arc/bluetooth/bluetooth_struct_traits.h"
+
+#include <memory>
+#include <utility>
+
+namespace mojo {
+
+// static
+arc::mojom::BluetoothSdpAttrType
+EnumTraits<arc::mojom::BluetoothSdpAttrType,
+ bluez::BluetoothServiceAttributeValueBlueZ::Type>::
+ ToMojom(bluez::BluetoothServiceAttributeValueBlueZ::Type input) {
+ switch (input) {
+ case bluez::BluetoothServiceAttributeValueBlueZ::NULLTYPE:
+ case bluez::BluetoothServiceAttributeValueBlueZ::UINT:
+ case bluez::BluetoothServiceAttributeValueBlueZ::INT:
+ case bluez::BluetoothServiceAttributeValueBlueZ::UUID:
+ case bluez::BluetoothServiceAttributeValueBlueZ::STRING:
+ case bluez::BluetoothServiceAttributeValueBlueZ::BOOL:
+ case bluez::BluetoothServiceAttributeValueBlueZ::SEQUENCE:
+ case bluez::BluetoothServiceAttributeValueBlueZ::URL:
+ return static_cast<arc::mojom::BluetoothSdpAttrType>(input);
+ default:
+ NOTREACHED() << "Invalid type: " << static_cast<uint32_t>(input);
+ return arc::mojom::BluetoothSdpAttrType::NULLTYPE;
+ }
+}
+
+// static
+bool EnumTraits<arc::mojom::BluetoothSdpAttrType,
+ bluez::BluetoothServiceAttributeValueBlueZ::Type>::
+ FromMojom(arc::mojom::BluetoothSdpAttrType input,
+ bluez::BluetoothServiceAttributeValueBlueZ::Type* output) {
+ switch (input) {
+ case arc::mojom::BluetoothSdpAttrType::NULLTYPE:
+ case arc::mojom::BluetoothSdpAttrType::UINT:
+ case arc::mojom::BluetoothSdpAttrType::INT:
+ case arc::mojom::BluetoothSdpAttrType::UUID:
+ case arc::mojom::BluetoothSdpAttrType::STRING:
+ case arc::mojom::BluetoothSdpAttrType::BOOL:
+ case arc::mojom::BluetoothSdpAttrType::SEQUENCE:
+ case arc::mojom::BluetoothSdpAttrType::URL:
+ *output =
+ static_cast<bluez::BluetoothServiceAttributeValueBlueZ::Type>(input);
+ return true;
+ default:
+ NOTREACHED() << "Invalid type: " << static_cast<uint32_t>(input);
+ return false;
+ }
+}
+
+// static
+bool StructTraits<arc::mojom::BluetoothSdpServiceAttr,
+ bluez::BluetoothServiceAttributeValueBlueZ>::
+ Read(arc::mojom::BluetoothSdpServiceAttrDataView data,
+ bluez::BluetoothServiceAttributeValueBlueZ* output) {
+ bluez::BluetoothServiceAttributeValueBlueZ::Type type;
+ if (!data.ReadType(&type))
+ return false;
+
+ switch (type) {
+ case bluez::BluetoothServiceAttributeValueBlueZ::NULLTYPE:
+ case bluez::BluetoothServiceAttributeValueBlueZ::UINT:
+ case bluez::BluetoothServiceAttributeValueBlueZ::INT:
+ case bluez::BluetoothServiceAttributeValueBlueZ::UUID:
+ case bluez::BluetoothServiceAttributeValueBlueZ::STRING:
+ case bluez::BluetoothServiceAttributeValueBlueZ::URL:
+ case bluez::BluetoothServiceAttributeValueBlueZ::BOOL: {
+ base::ListValue list_value;
+ if (!data.ReadValue(&list_value) || list_value.GetSize() != 1)
+ return false;
+
+ size_t size = static_cast<size_t>(data.type_size());
+ base::Value* value = nullptr;
+ list_value.Get(0, &value);
+
+ *output = bluez::BluetoothServiceAttributeValueBlueZ(
+ type, size, value->CreateDeepCopy());
+ break;
+ }
+ case bluez::BluetoothServiceAttributeValueBlueZ::SEQUENCE: {
+ std::unique_ptr<bluez::BluetoothServiceAttributeValueBlueZ::Sequence>
+ sequence(new bluez::BluetoothServiceAttributeValueBlueZ::Sequence());
+ if (!data.ReadSequence(sequence.get()) || sequence->empty())
+ return false;
+ *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
+ break;
+ }
+ default:
+ return false;
+ }
+ return true;
+}
+
+// static
+bool StructTraits<arc::mojom::BluetoothSdpRecord,
+ bluez::BluetoothServiceRecordBlueZ>::
+ Read(arc::mojom::BluetoothSdpRecordDataView data,
+ bluez::BluetoothServiceRecordBlueZ* output) {
+ 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,
+ if (!data.ReadAttrs(&attributes) || attributes.empty())
+ return false;
+
+ for (auto& it : attributes)
+ output->AddRecordEntry(it.first, it.second);
+
+ return true;
+}
+
+} // namespace mojo

Powered by Google App Engine
This is Rietveld 408576698