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

Side by Side Diff: chrome/browser/media/cast_remoting_connector_unittest.cc

Issue 2947403004: [MediaRouter] Replace RouteMessage with PresentationConnectionMessage (Closed)
Patch Set: . Created 3 years, 5 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
1 // Copyright 2016 The Chromium Authors. All rights reserved. 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 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 "chrome/browser/media/cast_remoting_connector.h" 5 #include "chrome/browser/media/cast_remoting_connector.h"
6 6
7 #include <utility> 7 #include <utility>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/callback.h" 10 #include "base/callback.h"
11 #include "base/memory/weak_ptr.h" 11 #include "base/memory/weak_ptr.h"
12 #include "base/run_loop.h" 12 #include "base/run_loop.h"
13 #include "chrome/browser/media/router/media_routes_observer.h" 13 #include "chrome/browser/media/router/media_routes_observer.h"
14 #include "chrome/browser/media/router/mock_media_router.h" 14 #include "chrome/browser/media/router/mock_media_router.h"
15 #include "chrome/browser/media/router/route_message_observer.h" 15 #include "chrome/browser/media/router/route_message_observer.h"
16 #include "chrome/common/media_router/media_route.h" 16 #include "chrome/common/media_router/media_route.h"
17 #include "chrome/common/media_router/media_source.h" 17 #include "chrome/common/media_router/media_source.h"
18 #include "chrome/common/media_router/route_message.h"
19 #include "content/public/browser/browser_thread.h" 18 #include "content/public/browser/browser_thread.h"
19 #include "content/public/common/presentation_connection_message.h"
20 #include "content/public/test/test_browser_thread_bundle.h" 20 #include "content/public/test/test_browser_thread_bundle.h"
21 #include "media/mojo/interfaces/remoting.mojom.h" 21 #include "media/mojo/interfaces/remoting.mojom.h"
22 #include "mojo/public/cpp/bindings/binding.h" 22 #include "mojo/public/cpp/bindings/binding.h"
23 #include "testing/gmock/include/gmock/gmock.h" 23 #include "testing/gmock/include/gmock/gmock.h"
24 #include "testing/gtest/include/gtest/gtest.h" 24 #include "testing/gtest/include/gtest/gtest.h"
25 25
26 using content::BrowserThread; 26 using content::BrowserThread;
27 using content::PresentationConnectionMessage;
27 28
28 using media::mojom::RemoterPtr; 29 using media::mojom::RemoterPtr;
29 using media::mojom::RemoterRequest; 30 using media::mojom::RemoterRequest;
30 using media::mojom::RemotingSinkCapabilities; 31 using media::mojom::RemotingSinkCapabilities;
31 using media::mojom::RemotingSourcePtr; 32 using media::mojom::RemotingSourcePtr;
32 using media::mojom::RemotingSourceRequest; 33 using media::mojom::RemotingSourceRequest;
33 using media::mojom::RemotingStartFailReason; 34 using media::mojom::RemotingStartFailReason;
34 using media::mojom::RemotingStopReason; 35 using media::mojom::RemotingStopReason;
35 36
36 using media_router::MediaRoutesObserver; 37 using media_router::MediaRoutesObserver;
37 using media_router::MediaRoute; 38 using media_router::MediaRoute;
38 using media_router::MediaSource; 39 using media_router::MediaSource;
39 using media_router::RouteMessage;
40 using media_router::RouteMessageObserver; 40 using media_router::RouteMessageObserver;
41 41
42 using ::testing::_; 42 using ::testing::_;
43 using ::testing::AtLeast; 43 using ::testing::AtLeast;
44 44
45 namespace { 45 namespace {
46 46
47 constexpr char kRemotingMediaSource[] = 47 constexpr char kRemotingMediaSource[] =
48 "urn:x-org.chromium.media:source:tab_content_remoting:123"; 48 "urn:x-org.chromium.media:source:tab_content_remoting:123";
49 constexpr char kRemotingMediaSink[] = "wiggles"; 49 constexpr char kRemotingMediaSink[] = "wiggles";
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 } 95 }
96 outbound_messages_.clear(); 96 outbound_messages_.clear();
97 } 97 }
98 98
99 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, 99 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
100 base::BindOnce(&FakeMediaRouter::DoUpdateRoutes, 100 base::BindOnce(&FakeMediaRouter::DoUpdateRoutes,
101 weak_factory_.GetWeakPtr())); 101 weak_factory_.GetWeakPtr()));
102 } 102 }
103 103
104 void OnMessageFromProvider(const std::string& message) { 104 void OnMessageFromProvider(const std::string& message) {
105 inbound_messages_.push_back(RouteMessage()); 105 inbound_messages_.push_back(PresentationConnectionMessage());
106 inbound_messages_.back().type = RouteMessage::TEXT; 106 inbound_messages_.back().message = message;
107 inbound_messages_.back().text = message;
108 BrowserThread::PostTask( 107 BrowserThread::PostTask(
109 BrowserThread::UI, FROM_HERE, 108 BrowserThread::UI, FROM_HERE,
110 base::BindOnce(&FakeMediaRouter::DoDeliverInboundMessages, 109 base::BindOnce(&FakeMediaRouter::DoDeliverInboundMessages,
111 weak_factory_.GetWeakPtr())); 110 weak_factory_.GetWeakPtr()));
112 } 111 }
113 112
114 void OnBinaryMessageFromProvider(const std::vector<uint8_t>& message) { 113 void OnBinaryMessageFromProvider(const std::vector<uint8_t>& message) {
115 inbound_messages_.push_back(RouteMessage()); 114 inbound_messages_.push_back(PresentationConnectionMessage());
116 inbound_messages_.back().type = RouteMessage::BINARY; 115 inbound_messages_.back().data = std::vector<uint8_t>(message);
117 inbound_messages_.back().binary = std::vector<uint8_t>(message);
118 BrowserThread::PostTask( 116 BrowserThread::PostTask(
119 BrowserThread::UI, FROM_HERE, 117 BrowserThread::UI, FROM_HERE,
120 base::BindOnce(&FakeMediaRouter::DoDeliverInboundMessages, 118 base::BindOnce(&FakeMediaRouter::DoDeliverInboundMessages,
121 weak_factory_.GetWeakPtr())); 119 weak_factory_.GetWeakPtr()));
122 } 120 }
123 121
124 void TakeMessagesSentToProvider(RouteMessage::Type type, 122 void TakeMessagesSentToProvider(
125 std::vector<RouteMessage>* messages) { 123 bool text,
124 std::vector<PresentationConnectionMessage>* messages) {
126 decltype(outbound_messages_) untaken_messages; 125 decltype(outbound_messages_) untaken_messages;
127 for (auto& entry : outbound_messages_) { 126 for (auto& entry : outbound_messages_) {
128 if (entry.first.type == type) { 127 if (entry.first.message.has_value() == text) {
129 messages->push_back(entry.first); 128 messages->push_back(entry.first);
130 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, 129 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
131 base::BindOnce(std::move(entry.second), true)); 130 base::BindOnce(std::move(entry.second), true));
132 } else { 131 } else {
133 untaken_messages.push_back(std::move(entry)); 132 untaken_messages.push_back(std::move(entry));
134 } 133 }
135 } 134 }
136 outbound_messages_.swap(untaken_messages); 135 outbound_messages_.swap(untaken_messages);
137 } 136 }
138 137
(...skipping 21 matching lines...) Expand all
160 void UnregisterRouteMessageObserver(RouteMessageObserver* observer) final { 159 void UnregisterRouteMessageObserver(RouteMessageObserver* observer) final {
161 CHECK_EQ(message_observer_, observer); 160 CHECK_EQ(message_observer_, observer);
162 message_observer_ = nullptr; 161 message_observer_ = nullptr;
163 } 162 }
164 163
165 void SendRouteMessage(const MediaRoute::Id& route_id, 164 void SendRouteMessage(const MediaRoute::Id& route_id,
166 const std::string& text, 165 const std::string& text,
167 SendRouteMessageCallback callback) final { 166 SendRouteMessageCallback callback) final {
168 EXPECT_EQ(message_observer_->route_id(), route_id); 167 EXPECT_EQ(message_observer_->route_id(), route_id);
169 ASSERT_FALSE(callback.is_null()); 168 ASSERT_FALSE(callback.is_null());
170 RouteMessage message; 169 PresentationConnectionMessage message;
171 message.type = RouteMessage::TEXT; 170 message.message = text;
172 message.text = text;
173 outbound_messages_.push_back(std::make_pair(message, std::move(callback))); 171 outbound_messages_.push_back(std::make_pair(message, std::move(callback)));
174 } 172 }
175 173
176 void SendRouteBinaryMessage(const MediaRoute::Id& route_id, 174 void SendRouteBinaryMessage(const MediaRoute::Id& route_id,
177 std::unique_ptr<std::vector<uint8_t>> data, 175 std::unique_ptr<std::vector<uint8_t>> data,
178 SendRouteMessageCallback callback) final { 176 SendRouteMessageCallback callback) final {
179 EXPECT_EQ(message_observer_->route_id(), route_id); 177 EXPECT_EQ(message_observer_->route_id(), route_id);
180 ASSERT_TRUE(!!data); 178 ASSERT_TRUE(!!data);
181 ASSERT_FALSE(callback.is_null()); 179 ASSERT_FALSE(callback.is_null());
182 RouteMessage message; 180 PresentationConnectionMessage message;
183 message.type = RouteMessage::BINARY; 181 message.data = std::move(*data);
184 message.binary = std::move(*data);
185 outbound_messages_.push_back(std::make_pair(message, std::move(callback))); 182 outbound_messages_.push_back(std::make_pair(message, std::move(callback)));
186 } 183 }
187 184
188 private: 185 private:
189 // Asynchronous callback to notify the MediaRoutesObserver of a change in 186 // Asynchronous callback to notify the MediaRoutesObserver of a change in
190 // routes. 187 // routes.
191 void DoUpdateRoutes() { 188 void DoUpdateRoutes() {
192 if (routes_observer_) 189 if (routes_observer_)
193 routes_observer_->OnRoutesUpdated(routes_, std::vector<MediaRoute::Id>()); 190 routes_observer_->OnRoutesUpdated(routes_, std::vector<MediaRoute::Id>());
194 } 191 }
195 192
196 // Asynchronous callback to deliver messages to the RouteMessageObserver. 193 // Asynchronous callback to deliver messages to the RouteMessageObserver.
197 void DoDeliverInboundMessages() { 194 void DoDeliverInboundMessages() {
198 if (message_observer_) 195 if (message_observer_)
199 message_observer_->OnMessagesReceived(inbound_messages_); 196 message_observer_->OnMessagesReceived(inbound_messages_);
200 inbound_messages_.clear(); 197 inbound_messages_.clear();
201 } 198 }
202 199
203 MediaRoutesObserver* routes_observer_; 200 MediaRoutesObserver* routes_observer_;
204 RouteMessageObserver* message_observer_; 201 RouteMessageObserver* message_observer_;
205 202
206 std::vector<MediaRoute> routes_; 203 std::vector<MediaRoute> routes_;
207 // Messages from Cast Provider to the connector. 204 // Messages from Cast Provider to the connector.
208 std::vector<RouteMessage> inbound_messages_; 205 std::vector<PresentationConnectionMessage> inbound_messages_;
209 // Messages from the connector to the Cast Provider. 206 // Messages from the connector to the Cast Provider.
210 using OutboundMessageAndCallback = 207 using OutboundMessageAndCallback =
211 std::pair<RouteMessage, SendRouteMessageCallback>; 208 std::pair<PresentationConnectionMessage, SendRouteMessageCallback>;
212 std::vector<OutboundMessageAndCallback> outbound_messages_; 209 std::vector<OutboundMessageAndCallback> outbound_messages_;
213 210
214 base::WeakPtrFactory<FakeMediaRouter> weak_factory_; 211 base::WeakPtrFactory<FakeMediaRouter> weak_factory_;
215 }; 212 };
216 213
217 class MockRemotingSource : public media::mojom::RemotingSource { 214 class MockRemotingSource : public media::mojom::RemotingSource {
218 public: 215 public:
219 MockRemotingSource() : binding_(this) {} 216 MockRemotingSource() : binding_(this) {}
220 ~MockRemotingSource() final {} 217 ~MockRemotingSource() final {}
221 218
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 261
265 void ProviderDiscoversSink() { 262 void ProviderDiscoversSink() {
266 media_router_.OnRemotingRouteExists(true); 263 media_router_.OnRemotingRouteExists(true);
267 } 264 }
268 265
269 void ProviderLosesSink() { 266 void ProviderLosesSink() {
270 media_router_.OnRemotingRouteExists(false); 267 media_router_.OnRemotingRouteExists(false);
271 } 268 }
272 269
273 void ConnectorSentMessageToProvider(const std::string& expected_message) { 270 void ConnectorSentMessageToProvider(const std::string& expected_message) {
274 std::vector<RouteMessage> messages; 271 std::vector<PresentationConnectionMessage> messages;
275 media_router_.TakeMessagesSentToProvider(RouteMessage::TEXT, &messages); 272 media_router_.TakeMessagesSentToProvider(true, &messages);
takumif 2017/06/26 18:50:15 Suggestion: instead of calling TakeMessagesSentToP
imcheng 2017/06/27 06:41:57 I am less inclined to change this since this code
takumif 2017/06/28 00:30:19 Acknowledged.
276 bool did_see_expected_message = false; 273 bool did_see_expected_message = false;
277 for (const RouteMessage& message : messages) { 274 for (const PresentationConnectionMessage& message : messages) {
278 if (message.text && expected_message == *message.text) { 275 if (message.message && expected_message == *message.message) {
279 did_see_expected_message = true; 276 did_see_expected_message = true;
280 } else { 277 } else {
281 ADD_FAILURE() 278 ADD_FAILURE()
282 << "Unexpected message: " << message.ToHumanReadableString(); 279 << "Unexpected message: " << message.ToHumanReadableString();
283 } 280 }
284 } 281 }
285 EXPECT_TRUE(did_see_expected_message); 282 EXPECT_TRUE(did_see_expected_message);
286 } 283 }
287 284
288 void ConnectorSentMessageToSink( 285 void ConnectorSentMessageToSink(
289 const std::vector<uint8_t>& expected_message) { 286 const std::vector<uint8_t>& expected_message) {
290 std::vector<RouteMessage> messages; 287 std::vector<PresentationConnectionMessage> messages;
291 media_router_.TakeMessagesSentToProvider(RouteMessage::BINARY, &messages); 288 media_router_.TakeMessagesSentToProvider(false, &messages);
292 bool did_see_expected_message = false; 289 bool did_see_expected_message = false;
293 for (const RouteMessage& message : messages) { 290 for (const auto& message : messages) {
294 if (message.binary && expected_message == *message.binary) { 291 if (message.data && expected_message == *message.data) {
295 did_see_expected_message = true; 292 did_see_expected_message = true;
296 } else { 293 } else {
297 ADD_FAILURE() 294 ADD_FAILURE()
298 << "Unexpected message: " << message.ToHumanReadableString(); 295 << "Unexpected message: " << message.ToHumanReadableString();
299 } 296 }
300 } 297 }
301 EXPECT_TRUE(did_see_expected_message); 298 EXPECT_TRUE(did_see_expected_message);
302 } 299 }
303 300
304 void ConnectorSentNoMessagesToProvider() { 301 void ConnectorSentNoMessagesToProvider() {
305 std::vector<RouteMessage> messages; 302 std::vector<PresentationConnectionMessage> messages;
306 media_router_.TakeMessagesSentToProvider(RouteMessage::TEXT, &messages); 303 media_router_.TakeMessagesSentToProvider(true, &messages);
307 EXPECT_TRUE(messages.empty()); 304 EXPECT_TRUE(messages.empty());
308 } 305 }
309 306
310 void ConnectorSentNoMessagesToSink() { 307 void ConnectorSentNoMessagesToSink() {
311 std::vector<RouteMessage> messages; 308 std::vector<PresentationConnectionMessage> messages;
312 media_router_.TakeMessagesSentToProvider(RouteMessage::BINARY, &messages); 309 media_router_.TakeMessagesSentToProvider(false, &messages);
313 EXPECT_TRUE(messages.empty()); 310 EXPECT_TRUE(messages.empty());
314 } 311 }
315 312
316 void ProviderPassesMessageFromSink( 313 void ProviderPassesMessageFromSink(
317 const std::vector<uint8_t>& message) { 314 const std::vector<uint8_t>& message) {
318 media_router_.OnBinaryMessageFromProvider(message); 315 media_router_.OnBinaryMessageFromProvider(message);
319 } 316 }
320 317
321 void ProviderSaysToRemotingConnector(const std::string& message) { 318 void ProviderSaysToRemotingConnector(const std::string& message) {
322 media_router_.OnMessageFromProvider(message); 319 media_router_.OnMessageFromProvider(message);
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after
607 break; 604 break;
608 } 605 }
609 } 606 }
610 } 607 }
611 608
612 INSTANTIATE_TEST_CASE_P(, CastRemotingConnectorFullSessionTest, 609 INSTANTIATE_TEST_CASE_P(, CastRemotingConnectorFullSessionTest,
613 ::testing::Values(SOURCE_TERMINATES, 610 ::testing::Values(SOURCE_TERMINATES,
614 MOJO_PIPE_CLOSES, 611 MOJO_PIPE_CLOSES,
615 ROUTE_TERMINATES, 612 ROUTE_TERMINATES,
616 EXTERNAL_FAILURE)); 613 EXTERNAL_FAILURE));
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698