OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "extensions/browser/api/cast_channel/cast_message_util.h" | 5 #include "components/cast_channel/cast_message_util.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 | 8 |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" |
11 #include "base/values.h" | 11 #include "base/values.h" |
12 #include "extensions/browser/api/cast_channel/cast_auth_util.h" | 12 #include "components/cast_channel/cast_auth_util.h" |
13 #include "extensions/common/api/cast_channel.h" | 13 #include "components/cast_channel/proto/cast_channel.pb.h" |
14 #include "extensions/common/api/cast_channel/cast_channel.pb.h" | |
15 | 14 |
16 namespace { | 15 namespace { |
17 static const char kAuthNamespace[] = | 16 static const char kAuthNamespace[] = "urn:x-cast:com.google.cast.tp.deviceauth"; |
18 "urn:x-cast:com.google.cast.tp.deviceauth"; | |
19 // Sender and receiver IDs to use for platform messages. | 17 // Sender and receiver IDs to use for platform messages. |
20 static const char kPlatformSenderId[] = "sender-0"; | 18 static const char kPlatformSenderId[] = "sender-0"; |
21 static const char kPlatformReceiverId[] = "receiver-0"; | 19 static const char kPlatformReceiverId[] = "receiver-0"; |
22 } // namespace | 20 } // namespace |
23 | 21 |
24 namespace extensions { | |
25 namespace api { | |
26 namespace cast_channel { | 22 namespace cast_channel { |
27 | 23 |
28 bool MessageInfoToCastMessage(const MessageInfo& message, | |
29 CastMessage* message_proto) { | |
30 DCHECK(message_proto); | |
31 if (!message.data) | |
32 return false; | |
33 | |
34 message_proto->set_protocol_version(CastMessage_ProtocolVersion_CASTV2_1_0); | |
35 message_proto->set_source_id(message.source_id); | |
36 message_proto->set_destination_id(message.destination_id); | |
37 message_proto->set_namespace_(message.namespace_); | |
38 // Determine the type of the base::Value and set the message payload | |
39 // appropriately. | |
40 std::string data; | |
41 switch (message.data->GetType()) { | |
42 // JS string | |
43 case base::Value::Type::STRING: | |
44 if (message.data->GetAsString(&data)) { | |
45 message_proto->set_payload_type(CastMessage_PayloadType_STRING); | |
46 message_proto->set_payload_utf8(data); | |
47 } | |
48 break; | |
49 // JS ArrayBuffer | |
50 case base::Value::Type::BINARY: | |
51 message_proto->set_payload_type(CastMessage_PayloadType_BINARY); | |
52 message_proto->set_payload_binary(message.data->GetBlob().data(), | |
53 message.data->GetBlob().size()); | |
54 break; | |
55 default: | |
56 // Unknown value type. message_proto will remain uninitialized because | |
57 // payload_type is unset. | |
58 break; | |
59 } | |
60 return message_proto->IsInitialized(); | |
61 } | |
62 | |
63 bool IsCastMessageValid(const CastMessage& message_proto) { | 24 bool IsCastMessageValid(const CastMessage& message_proto) { |
64 if (message_proto.namespace_().empty() || message_proto.source_id().empty() || | 25 if (message_proto.namespace_().empty() || message_proto.source_id().empty() || |
65 message_proto.destination_id().empty()) { | 26 message_proto.destination_id().empty()) { |
66 return false; | 27 return false; |
67 } | 28 } |
68 return (message_proto.payload_type() == CastMessage_PayloadType_STRING && | 29 return (message_proto.payload_type() == CastMessage_PayloadType_STRING && |
69 message_proto.has_payload_utf8()) || | 30 message_proto.has_payload_utf8()) || |
70 (message_proto.payload_type() == CastMessage_PayloadType_BINARY && | 31 (message_proto.payload_type() == CastMessage_PayloadType_BINARY && |
71 message_proto.has_payload_binary()); | 32 message_proto.has_payload_binary()); |
72 } | 33 } |
73 | 34 |
74 bool CastMessageToMessageInfo(const CastMessage& message_proto, | |
75 MessageInfo* message) { | |
76 DCHECK(message); | |
77 message->source_id = message_proto.source_id(); | |
78 message->destination_id = message_proto.destination_id(); | |
79 message->namespace_ = message_proto.namespace_(); | |
80 // Determine the type of the payload and fill base::Value appropriately. | |
81 std::unique_ptr<base::Value> value; | |
82 switch (message_proto.payload_type()) { | |
83 case CastMessage_PayloadType_STRING: | |
84 if (message_proto.has_payload_utf8()) | |
85 value.reset(new base::Value(message_proto.payload_utf8())); | |
86 break; | |
87 case CastMessage_PayloadType_BINARY: | |
88 if (message_proto.has_payload_binary()) | |
89 value = base::Value::CreateWithCopiedBuffer( | |
90 message_proto.payload_binary().data(), | |
91 message_proto.payload_binary().size()); | |
92 break; | |
93 default: | |
94 // Unknown payload type. value will remain unset. | |
95 break; | |
96 } | |
97 if (value.get()) { | |
98 DCHECK(!message->data.get()); | |
99 message->data = std::move(value); | |
100 return true; | |
101 } else { | |
102 return false; | |
103 } | |
104 } | |
105 | |
106 std::string CastMessageToString(const CastMessage& message_proto) { | 35 std::string CastMessageToString(const CastMessage& message_proto) { |
107 std::string out("{"); | 36 std::string out("{"); |
108 out += "namespace = " + message_proto.namespace_(); | 37 out += "namespace = " + message_proto.namespace_(); |
109 out += ", sourceId = " + message_proto.source_id(); | 38 out += ", sourceId = " + message_proto.source_id(); |
110 out += ", destId = " + message_proto.destination_id(); | 39 out += ", destId = " + message_proto.destination_id(); |
111 out += ", type = " + base::IntToString(message_proto.payload_type()); | 40 out += ", type = " + base::IntToString(message_proto.payload_type()); |
112 out += ", str = \"" + message_proto.payload_utf8() + "\"}"; | 41 out += ", str = \"" + message_proto.payload_utf8() + "\"}"; |
113 return out; | 42 return out; |
114 } | 43 } |
115 | 44 |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
149 message_proto->set_namespace_(kAuthNamespace); | 78 message_proto->set_namespace_(kAuthNamespace); |
150 message_proto->set_payload_type(CastMessage_PayloadType_BINARY); | 79 message_proto->set_payload_type(CastMessage_PayloadType_BINARY); |
151 message_proto->set_payload_binary(auth_message_string); | 80 message_proto->set_payload_binary(auth_message_string); |
152 } | 81 } |
153 | 82 |
154 bool IsAuthMessage(const CastMessage& message) { | 83 bool IsAuthMessage(const CastMessage& message) { |
155 return message.namespace_() == kAuthNamespace; | 84 return message.namespace_() == kAuthNamespace; |
156 } | 85 } |
157 | 86 |
158 } // namespace cast_channel | 87 } // namespace cast_channel |
159 } // namespace api | |
160 } // namespace extensions | |
OLD | NEW |