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

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

Issue 2947403004: [MediaRouter] Replace RouteMessage with PresentationConnectionMessage (Closed)
Patch Set: rebase 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/browser/media/router/test_helper.h"
16 #include "chrome/common/media_router/media_route.h" 17 #include "chrome/common/media_router/media_route.h"
17 #include "chrome/common/media_router/media_source.h" 18 #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" 19 #include "content/public/browser/browser_thread.h"
20 #include "content/public/common/presentation_connection_message.h"
20 #include "content/public/test/test_browser_thread_bundle.h" 21 #include "content/public/test/test_browser_thread_bundle.h"
21 #include "media/mojo/interfaces/remoting.mojom.h" 22 #include "media/mojo/interfaces/remoting.mojom.h"
22 #include "mojo/public/cpp/bindings/binding.h" 23 #include "mojo/public/cpp/bindings/binding.h"
23 #include "testing/gmock/include/gmock/gmock.h" 24 #include "testing/gmock/include/gmock/gmock.h"
24 #include "testing/gtest/include/gtest/gtest.h" 25 #include "testing/gtest/include/gtest/gtest.h"
25 26
26 using content::BrowserThread; 27 using content::BrowserThread;
28 using content::PresentationConnectionMessage;
27 29
28 using media::mojom::RemoterPtr; 30 using media::mojom::RemoterPtr;
29 using media::mojom::RemoterRequest; 31 using media::mojom::RemoterRequest;
30 using media::mojom::RemotingSinkCapabilities; 32 using media::mojom::RemotingSinkCapabilities;
31 using media::mojom::RemotingSourcePtr; 33 using media::mojom::RemotingSourcePtr;
32 using media::mojom::RemotingSourceRequest; 34 using media::mojom::RemotingSourceRequest;
33 using media::mojom::RemotingStartFailReason; 35 using media::mojom::RemotingStartFailReason;
34 using media::mojom::RemotingStopReason; 36 using media::mojom::RemotingStopReason;
35 37
36 using media_router::MediaRoutesObserver; 38 using media_router::MediaRoutesObserver;
37 using media_router::MediaRoute; 39 using media_router::MediaRoute;
38 using media_router::MediaSource; 40 using media_router::MediaSource;
39 using media_router::RouteMessage; 41 using media_router::PresentationConnectionMessageToString;
40 using media_router::RouteMessageObserver; 42 using media_router::RouteMessageObserver;
41 43
42 using ::testing::_; 44 using ::testing::_;
43 using ::testing::AtLeast; 45 using ::testing::AtLeast;
44 46
45 namespace { 47 namespace {
46 48
47 constexpr char kRemotingMediaSource[] = 49 constexpr char kRemotingMediaSource[] =
48 "urn:x-org.chromium.media:source:tab_content_remoting:123"; 50 "urn:x-org.chromium.media:source:tab_content_remoting:123";
49 constexpr char kRemotingMediaSink[] = "wiggles"; 51 constexpr char kRemotingMediaSink[] = "wiggles";
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 } 97 }
96 outbound_messages_.clear(); 98 outbound_messages_.clear();
97 } 99 }
98 100
99 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, 101 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
100 base::BindOnce(&FakeMediaRouter::DoUpdateRoutes, 102 base::BindOnce(&FakeMediaRouter::DoUpdateRoutes,
101 weak_factory_.GetWeakPtr())); 103 weak_factory_.GetWeakPtr()));
102 } 104 }
103 105
104 void OnMessageFromProvider(const std::string& message) { 106 void OnMessageFromProvider(const std::string& message) {
105 inbound_messages_.push_back(RouteMessage()); 107 inbound_messages_.emplace_back(message);
106 inbound_messages_.back().type = RouteMessage::TEXT;
107 inbound_messages_.back().text = message;
108 BrowserThread::PostTask( 108 BrowserThread::PostTask(
109 BrowserThread::UI, FROM_HERE, 109 BrowserThread::UI, FROM_HERE,
110 base::BindOnce(&FakeMediaRouter::DoDeliverInboundMessages, 110 base::BindOnce(&FakeMediaRouter::DoDeliverInboundMessages,
111 weak_factory_.GetWeakPtr())); 111 weak_factory_.GetWeakPtr()));
112 } 112 }
113 113
114 void OnBinaryMessageFromProvider(const std::vector<uint8_t>& message) { 114 void OnBinaryMessageFromProvider(const std::vector<uint8_t>& message) {
115 inbound_messages_.push_back(RouteMessage()); 115 inbound_messages_.emplace_back(message);
116 inbound_messages_.back().type = RouteMessage::BINARY;
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.is_binary() == 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(text);
171 message.type = RouteMessage::TEXT; 170 outbound_messages_.emplace_back(std::move(message), std::move(callback));
172 message.text = text;
173 outbound_messages_.push_back(std::make_pair(message, std::move(callback)));
174 } 171 }
175 172
176 void SendRouteBinaryMessage(const MediaRoute::Id& route_id, 173 void SendRouteBinaryMessage(const MediaRoute::Id& route_id,
177 std::unique_ptr<std::vector<uint8_t>> data, 174 std::unique_ptr<std::vector<uint8_t>> data,
178 SendRouteMessageCallback callback) final { 175 SendRouteMessageCallback callback) final {
179 EXPECT_EQ(message_observer_->route_id(), route_id); 176 EXPECT_EQ(message_observer_->route_id(), route_id);
180 ASSERT_TRUE(!!data); 177 ASSERT_TRUE(!!data);
181 ASSERT_FALSE(callback.is_null()); 178 ASSERT_FALSE(callback.is_null());
182 RouteMessage message; 179 PresentationConnectionMessage message(std::move(*data));
183 message.type = RouteMessage::BINARY; 180 outbound_messages_.emplace_back(std::move(message), std::move(callback));
184 message.binary = std::move(*data);
185 outbound_messages_.push_back(std::make_pair(message, std::move(callback)));
186 } 181 }
187 182
188 private: 183 private:
189 // Asynchronous callback to notify the MediaRoutesObserver of a change in 184 // Asynchronous callback to notify the MediaRoutesObserver of a change in
190 // routes. 185 // routes.
191 void DoUpdateRoutes() { 186 void DoUpdateRoutes() {
192 if (routes_observer_) 187 if (routes_observer_)
193 routes_observer_->OnRoutesUpdated(routes_, std::vector<MediaRoute::Id>()); 188 routes_observer_->OnRoutesUpdated(routes_, std::vector<MediaRoute::Id>());
194 } 189 }
195 190
196 // Asynchronous callback to deliver messages to the RouteMessageObserver. 191 // Asynchronous callback to deliver messages to the RouteMessageObserver.
197 void DoDeliverInboundMessages() { 192 void DoDeliverInboundMessages() {
198 if (message_observer_) 193 if (message_observer_)
199 message_observer_->OnMessagesReceived(inbound_messages_); 194 message_observer_->OnMessagesReceived(inbound_messages_);
200 inbound_messages_.clear(); 195 inbound_messages_.clear();
201 } 196 }
202 197
203 MediaRoutesObserver* routes_observer_; 198 MediaRoutesObserver* routes_observer_;
204 RouteMessageObserver* message_observer_; 199 RouteMessageObserver* message_observer_;
205 200
206 std::vector<MediaRoute> routes_; 201 std::vector<MediaRoute> routes_;
207 // Messages from Cast Provider to the connector. 202 // Messages from Cast Provider to the connector.
208 std::vector<RouteMessage> inbound_messages_; 203 std::vector<PresentationConnectionMessage> inbound_messages_;
209 // Messages from the connector to the Cast Provider. 204 // Messages from the connector to the Cast Provider.
210 using OutboundMessageAndCallback = 205 using OutboundMessageAndCallback =
211 std::pair<RouteMessage, SendRouteMessageCallback>; 206 std::pair<PresentationConnectionMessage, SendRouteMessageCallback>;
212 std::vector<OutboundMessageAndCallback> outbound_messages_; 207 std::vector<OutboundMessageAndCallback> outbound_messages_;
213 208
214 base::WeakPtrFactory<FakeMediaRouter> weak_factory_; 209 base::WeakPtrFactory<FakeMediaRouter> weak_factory_;
215 }; 210 };
216 211
217 class MockRemotingSource : public media::mojom::RemotingSource { 212 class MockRemotingSource : public media::mojom::RemotingSource {
218 public: 213 public:
219 MockRemotingSource() : binding_(this) {} 214 MockRemotingSource() : binding_(this) {}
220 ~MockRemotingSource() final {} 215 ~MockRemotingSource() final {}
221 216
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 259
265 void ProviderDiscoversSink() { 260 void ProviderDiscoversSink() {
266 media_router_.OnRemotingRouteExists(true); 261 media_router_.OnRemotingRouteExists(true);
267 } 262 }
268 263
269 void ProviderLosesSink() { 264 void ProviderLosesSink() {
270 media_router_.OnRemotingRouteExists(false); 265 media_router_.OnRemotingRouteExists(false);
271 } 266 }
272 267
273 void ConnectorSentMessageToProvider(const std::string& expected_message) { 268 void ConnectorSentMessageToProvider(const std::string& expected_message) {
274 std::vector<RouteMessage> messages; 269 std::vector<PresentationConnectionMessage> messages;
275 media_router_.TakeMessagesSentToProvider(RouteMessage::TEXT, &messages); 270 media_router_.TakeMessagesSentToProvider(true, &messages);
276 bool did_see_expected_message = false; 271 bool did_see_expected_message = false;
277 for (const RouteMessage& message : messages) { 272 for (const auto& message : messages) {
278 if (message.text && expected_message == *message.text) { 273 if (expected_message == message.message) {
279 did_see_expected_message = true; 274 did_see_expected_message = true;
280 } else { 275 } else {
281 ADD_FAILURE() 276 ADD_FAILURE() << "Unexpected message: "
282 << "Unexpected message: " << message.ToHumanReadableString(); 277 << PresentationConnectionMessageToString(message);
283 } 278 }
284 } 279 }
285 EXPECT_TRUE(did_see_expected_message); 280 EXPECT_TRUE(did_see_expected_message);
286 } 281 }
287 282
288 void ConnectorSentMessageToSink( 283 void ConnectorSentMessageToSink(
289 const std::vector<uint8_t>& expected_message) { 284 const std::vector<uint8_t>& expected_message) {
290 std::vector<RouteMessage> messages; 285 std::vector<PresentationConnectionMessage> messages;
291 media_router_.TakeMessagesSentToProvider(RouteMessage::BINARY, &messages); 286 media_router_.TakeMessagesSentToProvider(false, &messages);
292 bool did_see_expected_message = false; 287 bool did_see_expected_message = false;
293 for (const RouteMessage& message : messages) { 288 for (const auto& message : messages) {
294 if (message.binary && expected_message == *message.binary) { 289 if (expected_message == message.data) {
295 did_see_expected_message = true; 290 did_see_expected_message = true;
296 } else { 291 } else {
297 ADD_FAILURE() 292 ADD_FAILURE() << "Unexpected message: "
298 << "Unexpected message: " << message.ToHumanReadableString(); 293 << PresentationConnectionMessageToString(message);
299 } 294 }
300 } 295 }
301 EXPECT_TRUE(did_see_expected_message); 296 EXPECT_TRUE(did_see_expected_message);
302 } 297 }
303 298
304 void ConnectorSentNoMessagesToProvider() { 299 void ConnectorSentNoMessagesToProvider() {
305 std::vector<RouteMessage> messages; 300 std::vector<PresentationConnectionMessage> messages;
306 media_router_.TakeMessagesSentToProvider(RouteMessage::TEXT, &messages); 301 media_router_.TakeMessagesSentToProvider(true, &messages);
307 EXPECT_TRUE(messages.empty()); 302 EXPECT_TRUE(messages.empty());
308 } 303 }
309 304
310 void ConnectorSentNoMessagesToSink() { 305 void ConnectorSentNoMessagesToSink() {
311 std::vector<RouteMessage> messages; 306 std::vector<PresentationConnectionMessage> messages;
312 media_router_.TakeMessagesSentToProvider(RouteMessage::BINARY, &messages); 307 media_router_.TakeMessagesSentToProvider(false, &messages);
313 EXPECT_TRUE(messages.empty()); 308 EXPECT_TRUE(messages.empty());
314 } 309 }
315 310
316 void ProviderPassesMessageFromSink( 311 void ProviderPassesMessageFromSink(
317 const std::vector<uint8_t>& message) { 312 const std::vector<uint8_t>& message) {
318 media_router_.OnBinaryMessageFromProvider(message); 313 media_router_.OnBinaryMessageFromProvider(message);
319 } 314 }
320 315
321 void ProviderSaysToRemotingConnector(const std::string& message) { 316 void ProviderSaysToRemotingConnector(const std::string& message) {
322 media_router_.OnMessageFromProvider(message); 317 media_router_.OnMessageFromProvider(message);
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after
607 break; 602 break;
608 } 603 }
609 } 604 }
610 } 605 }
611 606
612 INSTANTIATE_TEST_CASE_P(, CastRemotingConnectorFullSessionTest, 607 INSTANTIATE_TEST_CASE_P(, CastRemotingConnectorFullSessionTest,
613 ::testing::Values(SOURCE_TERMINATES, 608 ::testing::Values(SOURCE_TERMINATES,
614 MOJO_PIPE_CLOSES, 609 MOJO_PIPE_CLOSES,
615 ROUTE_TERMINATES, 610 ROUTE_TERMINATES,
616 EXTERNAL_FAILURE)); 611 EXTERNAL_FAILURE));
OLDNEW
« no previous file with comments | « chrome/browser/media/cast_remoting_connector.cc ('k') | chrome/browser/media/router/browser_presentation_connection_proxy.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698