OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 <stddef.h> | 5 #include <stddef.h> |
6 #include <stdint.h> | 6 #include <stdint.h> |
7 | 7 |
8 #include <memory> | 8 #include <memory> |
9 #include <string> | 9 #include <string> |
10 #include <utility> | 10 #include <utility> |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
98 // Creates a media route whose ID is |kRouteId2|. | 98 // Creates a media route whose ID is |kRouteId2|. |
99 MediaRoute CreateMediaRoute2() { | 99 MediaRoute CreateMediaRoute2() { |
100 return MediaRoute(kRouteId2, MediaSource(kSource), kSinkId, kDescription, | 100 return MediaRoute(kRouteId2, MediaSource(kSource), kSinkId, kDescription, |
101 true, std::string(), true); | 101 true, std::string(), true); |
102 } | 102 } |
103 | 103 |
104 void OnCreateMediaRouteController( | 104 void OnCreateMediaRouteController( |
105 Unused, | 105 Unused, |
106 Unused, | 106 Unused, |
107 Unused, | 107 Unused, |
108 const mojom::MediaRouteProvider::CreateMediaRouteControllerCallback& cb) { | 108 mojom::MediaRouteProvider::CreateMediaRouteControllerCallback& cb) { |
109 cb.Run(true); | 109 std::move(cb).Run(true); |
110 } | 110 } |
111 | 111 |
112 } // namespace | 112 } // namespace |
113 | 113 |
114 class RouteResponseCallbackHandler { | 114 class RouteResponseCallbackHandler { |
115 public: | 115 public: |
116 void Invoke(const RouteRequestResult& result) { | 116 void Invoke(const RouteRequestResult& result) { |
117 DoInvoke(result.route(), result.presentation_id(), result.error(), | 117 DoInvoke(result.route(), result.presentation_id(), result.error(), |
118 result.result_code()); | 118 result.result_code()); |
119 } | 119 } |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
191 }; | 191 }; |
192 | 192 |
193 TEST_F(MediaRouterMojoImplTest, CreateRoute) { | 193 TEST_F(MediaRouterMojoImplTest, CreateRoute) { |
194 MediaSource media_source(kSource); | 194 MediaSource media_source(kSource); |
195 MediaRoute expected_route(kRouteId, media_source, kSinkId, "", false, "", | 195 MediaRoute expected_route(kRouteId, media_source, kSinkId, "", false, "", |
196 false); | 196 false); |
197 | 197 |
198 // Use a lambda function as an invocation target here to work around | 198 // Use a lambda function as an invocation target here to work around |
199 // a limitation with GMock::Invoke that prevents it from using move-only types | 199 // a limitation with GMock::Invoke that prevents it from using move-only types |
200 // in runnable parameter lists. | 200 // in runnable parameter lists. |
201 EXPECT_CALL(mock_media_route_provider_, | 201 EXPECT_CALL( |
202 CreateRoute(kSource, kSinkId, _, url::Origin(GURL(kOrigin)), | 202 mock_media_route_provider_, |
| 203 CreateRouteInternal(kSource, kSinkId, _, url::Origin(GURL(kOrigin)), |
203 kInvalidTabId, _, _, _)) | 204 kInvalidTabId, _, _, _)) |
204 .WillOnce(Invoke( | 205 .WillOnce(Invoke([](const std::string& source, const std::string& sink, |
205 [](const std::string& source, const std::string& sink, | 206 const std::string& presentation_id, |
206 const std::string& presentation_id, const url::Origin& origin, | 207 const url::Origin& origin, int tab_id, |
207 int tab_id, base::TimeDelta timeout, bool incognito, | 208 base::TimeDelta timeout, bool incognito, |
208 const mojom::MediaRouteProvider::CreateRouteCallback& cb) { | 209 mojom::MediaRouteProvider::CreateRouteCallback& cb) { |
209 cb.Run(CreateMediaRoute(), std::string(), RouteRequestResult::OK); | 210 std::move(cb).Run(CreateMediaRoute(), std::string(), |
210 })); | 211 RouteRequestResult::OK); |
| 212 })); |
211 | 213 |
212 base::RunLoop run_loop; | 214 base::RunLoop run_loop; |
213 RouteResponseCallbackHandler handler; | 215 RouteResponseCallbackHandler handler; |
214 EXPECT_CALL(handler, DoInvoke(Pointee(Equals(expected_route)), Not(""), "", | 216 EXPECT_CALL(handler, DoInvoke(Pointee(Equals(expected_route)), Not(""), "", |
215 RouteRequestResult::OK)) | 217 RouteRequestResult::OK)) |
216 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); | 218 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); |
217 std::vector<MediaRouteResponseCallback> route_response_callbacks; | 219 std::vector<MediaRouteResponseCallback> route_response_callbacks; |
218 route_response_callbacks.push_back(base::Bind( | 220 route_response_callbacks.push_back(base::Bind( |
219 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); | 221 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); |
220 router()->CreateRoute(kSource, kSinkId, url::Origin(GURL(kOrigin)), nullptr, | 222 router()->CreateRoute(kSource, kSinkId, url::Origin(GURL(kOrigin)), nullptr, |
221 route_response_callbacks, | 223 route_response_callbacks, |
222 base::TimeDelta::FromMilliseconds(kTimeoutMillis), | 224 base::TimeDelta::FromMilliseconds(kTimeoutMillis), |
223 false); | 225 false); |
224 run_loop.Run(); | 226 run_loop.Run(); |
225 ExpectResultBucketCount("CreateRoute", RouteRequestResult::OK, 1); | 227 ExpectResultBucketCount("CreateRoute", RouteRequestResult::OK, 1); |
226 } | 228 } |
227 | 229 |
228 TEST_F(MediaRouterMojoImplTest, CreateIncognitoRoute) { | 230 TEST_F(MediaRouterMojoImplTest, CreateIncognitoRoute) { |
229 MediaSource media_source(kSource); | 231 MediaSource media_source(kSource); |
230 MediaRoute expected_route(kRouteId, media_source, kSinkId, "", false, "", | 232 MediaRoute expected_route(kRouteId, media_source, kSinkId, "", false, "", |
231 false); | 233 false); |
232 expected_route.set_incognito(true); | 234 expected_route.set_incognito(true); |
233 | 235 |
234 // Use a lambda function as an invocation target here to work around | 236 // Use a lambda function as an invocation target here to work around |
235 // a limitation with GMock::Invoke that prevents it from using move-only types | 237 // a limitation with GMock::Invoke that prevents it from using move-only types |
236 // in runnable parameter lists. | 238 // in runnable parameter lists. |
237 EXPECT_CALL(mock_media_route_provider_, | 239 EXPECT_CALL( |
238 CreateRoute(kSource, kSinkId, _, url::Origin(GURL(kOrigin)), | 240 mock_media_route_provider_, |
| 241 CreateRouteInternal(kSource, kSinkId, _, url::Origin(GURL(kOrigin)), |
239 kInvalidTabId, _, _, _)) | 242 kInvalidTabId, _, _, _)) |
240 .WillOnce(Invoke([&expected_route]( | 243 .WillOnce(Invoke([&expected_route]( |
241 const std::string& source, const std::string& sink, | 244 const std::string& source, const std::string& sink, |
242 const std::string& presentation_id, const url::Origin& origin, | 245 const std::string& presentation_id, |
243 int tab_id, base::TimeDelta timeout, bool incognito, | 246 const url::Origin& origin, int tab_id, |
244 const mojom::MediaRouteProvider::CreateRouteCallback& cb) { | 247 base::TimeDelta timeout, bool incognito, |
245 cb.Run(expected_route, std::string(), RouteRequestResult::OK); | 248 mojom::MediaRouteProvider::CreateRouteCallback& cb) { |
| 249 std::move(cb).Run(expected_route, std::string(), |
| 250 RouteRequestResult::OK); |
246 })); | 251 })); |
247 | 252 |
248 base::RunLoop run_loop; | 253 base::RunLoop run_loop; |
249 RouteResponseCallbackHandler handler; | 254 RouteResponseCallbackHandler handler; |
250 EXPECT_CALL(handler, DoInvoke(Pointee(Equals(expected_route)), Not(""), "", | 255 EXPECT_CALL(handler, DoInvoke(Pointee(Equals(expected_route)), Not(""), "", |
251 RouteRequestResult::OK)) | 256 RouteRequestResult::OK)) |
252 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); | 257 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); |
253 std::vector<MediaRouteResponseCallback> route_response_callbacks; | 258 std::vector<MediaRouteResponseCallback> route_response_callbacks; |
254 route_response_callbacks.push_back(base::Bind( | 259 route_response_callbacks.push_back(base::Bind( |
255 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); | 260 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); |
256 router()->CreateRoute(kSource, kSinkId, url::Origin(GURL(kOrigin)), nullptr, | 261 router()->CreateRoute(kSource, kSinkId, url::Origin(GURL(kOrigin)), nullptr, |
257 route_response_callbacks, | 262 route_response_callbacks, |
258 base::TimeDelta::FromMilliseconds(kTimeoutMillis), | 263 base::TimeDelta::FromMilliseconds(kTimeoutMillis), |
259 true); | 264 true); |
260 run_loop.Run(); | 265 run_loop.Run(); |
261 ExpectResultBucketCount("CreateRoute", RouteRequestResult::OK, 1); | 266 ExpectResultBucketCount("CreateRoute", RouteRequestResult::OK, 1); |
262 } | 267 } |
263 | 268 |
264 TEST_F(MediaRouterMojoImplTest, CreateRouteFails) { | 269 TEST_F(MediaRouterMojoImplTest, CreateRouteFails) { |
265 EXPECT_CALL( | 270 EXPECT_CALL( |
266 mock_media_route_provider_, | 271 mock_media_route_provider_, |
267 CreateRoute(kSource, kSinkId, _, url::Origin(GURL(kOrigin)), | 272 CreateRouteInternal( |
268 kInvalidTabId, | 273 kSource, kSinkId, _, url::Origin(GURL(kOrigin)), kInvalidTabId, |
269 base::TimeDelta::FromMilliseconds(kTimeoutMillis), _, _)) | 274 base::TimeDelta::FromMilliseconds(kTimeoutMillis), _, _)) |
270 .WillOnce(Invoke( | 275 .WillOnce(Invoke([](const std::string& source, const std::string& sink, |
271 [](const std::string& source, const std::string& sink, | 276 const std::string& presentation_id, |
272 const std::string& presentation_id, const url::Origin& origin, | 277 const url::Origin& origin, int tab_id, |
273 int tab_id, base::TimeDelta timeout, bool incognito, | 278 base::TimeDelta timeout, bool incognito, |
274 const mojom::MediaRouteProvider::CreateRouteCallback& cb) { | 279 mojom::MediaRouteProvider::CreateRouteCallback& cb) { |
275 cb.Run(base::nullopt, std::string(kError), | 280 std::move(cb).Run(base::nullopt, std::string(kError), |
276 RouteRequestResult::TIMED_OUT); | 281 RouteRequestResult::TIMED_OUT); |
277 })); | 282 })); |
278 | 283 |
279 RouteResponseCallbackHandler handler; | 284 RouteResponseCallbackHandler handler; |
280 base::RunLoop run_loop; | 285 base::RunLoop run_loop; |
281 EXPECT_CALL(handler, | 286 EXPECT_CALL(handler, |
282 DoInvoke(nullptr, "", kError, RouteRequestResult::TIMED_OUT)) | 287 DoInvoke(nullptr, "", kError, RouteRequestResult::TIMED_OUT)) |
283 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); | 288 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); |
284 std::vector<MediaRouteResponseCallback> route_response_callbacks; | 289 std::vector<MediaRouteResponseCallback> route_response_callbacks; |
285 route_response_callbacks.push_back(base::Bind( | 290 route_response_callbacks.push_back(base::Bind( |
286 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); | 291 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); |
287 router()->CreateRoute(kSource, kSinkId, url::Origin(GURL(kOrigin)), nullptr, | 292 router()->CreateRoute(kSource, kSinkId, url::Origin(GURL(kOrigin)), nullptr, |
288 route_response_callbacks, | 293 route_response_callbacks, |
289 base::TimeDelta::FromMilliseconds(kTimeoutMillis), | 294 base::TimeDelta::FromMilliseconds(kTimeoutMillis), |
290 false); | 295 false); |
291 run_loop.Run(); | 296 run_loop.Run(); |
292 ExpectResultBucketCount("CreateRoute", RouteRequestResult::TIMED_OUT, 1); | 297 ExpectResultBucketCount("CreateRoute", RouteRequestResult::TIMED_OUT, 1); |
293 } | 298 } |
294 | 299 |
295 TEST_F(MediaRouterMojoImplTest, CreateRouteIncognitoMismatchFails) { | 300 TEST_F(MediaRouterMojoImplTest, CreateRouteIncognitoMismatchFails) { |
296 EXPECT_CALL( | 301 EXPECT_CALL( |
297 mock_media_route_provider_, | 302 mock_media_route_provider_, |
298 CreateRoute(kSource, kSinkId, _, url::Origin(GURL(kOrigin)), | 303 CreateRouteInternal( |
299 kInvalidTabId, | 304 kSource, kSinkId, _, url::Origin(GURL(kOrigin)), kInvalidTabId, |
300 base::TimeDelta::FromMilliseconds(kTimeoutMillis), true, _)) | 305 base::TimeDelta::FromMilliseconds(kTimeoutMillis), true, _)) |
301 .WillOnce(Invoke( | 306 .WillOnce(Invoke([](const std::string& source, const std::string& sink, |
302 [](const std::string& source, const std::string& sink, | 307 const std::string& presentation_id, |
303 const std::string& presentation_id, const url::Origin& origin, | 308 const url::Origin& origin, int tab_id, |
304 int tab_id, base::TimeDelta timeout, bool incognito, | 309 base::TimeDelta timeout, bool incognito, |
305 const mojom::MediaRouteProvider::CreateRouteCallback& cb) { | 310 mojom::MediaRouteProvider::CreateRouteCallback& cb) { |
306 cb.Run(CreateMediaRoute(), std::string(), RouteRequestResult::OK); | 311 std::move(cb).Run(CreateMediaRoute(), std::string(), |
307 })); | 312 RouteRequestResult::OK); |
| 313 })); |
308 | 314 |
309 RouteResponseCallbackHandler handler; | 315 RouteResponseCallbackHandler handler; |
310 base::RunLoop run_loop; | 316 base::RunLoop run_loop; |
311 std::string error("Mismatch in incognito status: request = 1, response = 0"); | 317 std::string error("Mismatch in incognito status: request = 1, response = 0"); |
312 EXPECT_CALL(handler, DoInvoke(nullptr, "", error, | 318 EXPECT_CALL(handler, DoInvoke(nullptr, "", error, |
313 RouteRequestResult::INCOGNITO_MISMATCH)) | 319 RouteRequestResult::INCOGNITO_MISMATCH)) |
314 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); | 320 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); |
315 std::vector<MediaRouteResponseCallback> route_response_callbacks; | 321 std::vector<MediaRouteResponseCallback> route_response_callbacks; |
316 route_response_callbacks.push_back(base::Bind( | 322 route_response_callbacks.push_back(base::Bind( |
317 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); | 323 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); |
318 router()->CreateRoute(kSource, kSinkId, url::Origin(GURL(kOrigin)), nullptr, | 324 router()->CreateRoute(kSource, kSinkId, url::Origin(GURL(kOrigin)), nullptr, |
319 route_response_callbacks, | 325 route_response_callbacks, |
320 base::TimeDelta::FromMilliseconds(kTimeoutMillis), | 326 base::TimeDelta::FromMilliseconds(kTimeoutMillis), |
321 true); | 327 true); |
322 run_loop.Run(); | 328 run_loop.Run(); |
323 ExpectResultBucketCount("CreateRoute", RouteRequestResult::INCOGNITO_MISMATCH, | 329 ExpectResultBucketCount("CreateRoute", RouteRequestResult::INCOGNITO_MISMATCH, |
324 1); | 330 1); |
325 } | 331 } |
326 | 332 |
327 TEST_F(MediaRouterMojoImplTest, IncognitoRoutesTerminatedOnProfileShutdown) { | 333 TEST_F(MediaRouterMojoImplTest, IncognitoRoutesTerminatedOnProfileShutdown) { |
328 MediaRoute route = CreateMediaRoute(); | 334 MediaRoute route = CreateMediaRoute(); |
329 route.set_incognito(true); | 335 route.set_incognito(true); |
330 | 336 |
331 EXPECT_CALL( | 337 EXPECT_CALL( |
332 mock_media_route_provider_, | 338 mock_media_route_provider_, |
333 CreateRoute(kSource, kSinkId, _, url::Origin(GURL(kOrigin)), | 339 CreateRouteInternal( |
334 kInvalidTabId, | 340 kSource, kSinkId, _, url::Origin(GURL(kOrigin)), kInvalidTabId, |
335 base::TimeDelta::FromMilliseconds(kTimeoutMillis), true, _)) | 341 base::TimeDelta::FromMilliseconds(kTimeoutMillis), true, _)) |
336 .WillOnce(Invoke([&route]( | 342 .WillOnce( |
337 const std::string& source, const std::string& sink, | 343 Invoke([&route](const std::string& source, const std::string& sink, |
338 const std::string& presentation_id, const url::Origin& origin, | 344 const std::string& presentation_id, |
339 int tab_id, base::TimeDelta timeout, bool incognito, | 345 const url::Origin& origin, int tab_id, |
340 const mojom::MediaRouteProvider::CreateRouteCallback& cb) { | 346 base::TimeDelta timeout, bool incognito, |
341 cb.Run(route, std::string(), RouteRequestResult::OK); | 347 mojom::MediaRouteProvider::CreateRouteCallback& cb) { |
342 })); | 348 std::move(cb).Run(route, std::string(), RouteRequestResult::OK); |
| 349 })); |
343 base::RunLoop run_loop; | 350 base::RunLoop run_loop; |
344 router()->CreateRoute(kSource, kSinkId, url::Origin(GURL(kOrigin)), nullptr, | 351 router()->CreateRoute(kSource, kSinkId, url::Origin(GURL(kOrigin)), nullptr, |
345 std::vector<MediaRouteResponseCallback>(), | 352 std::vector<MediaRouteResponseCallback>(), |
346 base::TimeDelta::FromMilliseconds(kTimeoutMillis), | 353 base::TimeDelta::FromMilliseconds(kTimeoutMillis), |
347 true); | 354 true); |
348 std::vector<MediaRoute> routes; | 355 std::vector<MediaRoute> routes; |
349 routes.push_back(route); | 356 routes.push_back(route); |
350 router()->OnRoutesUpdated(routes, std::string(), std::vector<std::string>()); | 357 router()->OnRoutesUpdated(routes, std::string(), std::vector<std::string>()); |
351 | 358 |
352 // TODO(mfoltz): Where possible, convert other tests to use RunUntilIdle | 359 // TODO(mfoltz): Where possible, convert other tests to use RunUntilIdle |
353 // instead of manually calling Run/Quit on the run loop. | 360 // instead of manually calling Run/Quit on the run loop. |
354 run_loop.RunUntilIdle(); | 361 run_loop.RunUntilIdle(); |
355 | 362 |
356 EXPECT_CALL(mock_media_route_provider_, TerminateRoute(kRouteId, _)) | 363 EXPECT_CALL(mock_media_route_provider_, TerminateRouteInternal(kRouteId, _)) |
357 .WillOnce(Invoke( | 364 .WillOnce( |
358 [](const std::string& route_id, | 365 Invoke([](const std::string& route_id, |
359 const mojom::MediaRouteProvider::TerminateRouteCallback& cb) { | 366 mojom::MediaRouteProvider::TerminateRouteCallback& cb) { |
360 cb.Run(base::nullopt, RouteRequestResult::OK); | 367 std::move(cb).Run(base::nullopt, RouteRequestResult::OK); |
361 })); | 368 })); |
362 | 369 |
363 base::RunLoop run_loop2; | 370 base::RunLoop run_loop2; |
364 router()->OnIncognitoProfileShutdown(); | 371 router()->OnIncognitoProfileShutdown(); |
365 run_loop2.RunUntilIdle(); | 372 run_loop2.RunUntilIdle(); |
366 } | 373 } |
367 | 374 |
368 TEST_F(MediaRouterMojoImplTest, JoinRoute) { | 375 TEST_F(MediaRouterMojoImplTest, JoinRoute) { |
369 MediaSource media_source(kSource); | 376 MediaSource media_source(kSource); |
370 MediaRoute expected_route(kRouteId, media_source, kSinkId, "", false, "", | 377 MediaRoute expected_route(kRouteId, media_source, kSinkId, "", false, "", |
371 false); | 378 false); |
372 | 379 |
373 MediaRoute route = CreateMediaRoute(); | 380 MediaRoute route = CreateMediaRoute(); |
374 // Make sure the MR has received an update with the route, so it knows there | 381 // Make sure the MR has received an update with the route, so it knows there |
375 // is a route to join. | 382 // is a route to join. |
376 std::vector<MediaRoute> routes; | 383 std::vector<MediaRoute> routes; |
377 routes.push_back(route); | 384 routes.push_back(route); |
378 router()->OnRoutesUpdated(routes, std::string(), std::vector<std::string>()); | 385 router()->OnRoutesUpdated(routes, std::string(), std::vector<std::string>()); |
379 EXPECT_TRUE(router()->HasJoinableRoute()); | 386 EXPECT_TRUE(router()->HasJoinableRoute()); |
380 | 387 |
381 // Use a lambda function as an invocation target here to work around | 388 // Use a lambda function as an invocation target here to work around |
382 // a limitation with GMock::Invoke that prevents it from using move-only types | 389 // a limitation with GMock::Invoke that prevents it from using move-only types |
383 // in runnable parameter lists. | 390 // in runnable parameter lists. |
384 EXPECT_CALL( | 391 EXPECT_CALL( |
385 mock_media_route_provider_, | 392 mock_media_route_provider_, |
386 JoinRoute(kSource, kPresentationId, url::Origin(GURL(kOrigin)), | 393 JoinRouteInternal( |
387 kInvalidTabId, | 394 kSource, kPresentationId, url::Origin(GURL(kOrigin)), kInvalidTabId, |
388 base::TimeDelta::FromMilliseconds(kTimeoutMillis), _, _)) | 395 base::TimeDelta::FromMilliseconds(kTimeoutMillis), _, _)) |
389 .WillOnce(Invoke([&route]( | 396 .WillOnce( |
390 const std::string& source, const std::string& presentation_id, | 397 Invoke([&route](const std::string& source, |
391 const url::Origin& origin, int tab_id, base::TimeDelta timeout, | 398 const std::string& presentation_id, |
392 bool incognito, | 399 const url::Origin& origin, int tab_id, |
393 const mojom::MediaRouteProvider::JoinRouteCallback& cb) { | 400 base::TimeDelta timeout, bool incognito, |
394 cb.Run(route, std::string(), RouteRequestResult::OK); | 401 mojom::MediaRouteProvider::JoinRouteCallback& cb) { |
395 })); | 402 std::move(cb).Run(route, std::string(), RouteRequestResult::OK); |
| 403 })); |
396 | 404 |
397 RouteResponseCallbackHandler handler; | 405 RouteResponseCallbackHandler handler; |
398 base::RunLoop run_loop; | 406 base::RunLoop run_loop; |
399 EXPECT_CALL(handler, DoInvoke(Pointee(Equals(expected_route)), Not(""), "", | 407 EXPECT_CALL(handler, DoInvoke(Pointee(Equals(expected_route)), Not(""), "", |
400 RouteRequestResult::OK)) | 408 RouteRequestResult::OK)) |
401 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); | 409 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); |
402 std::vector<MediaRouteResponseCallback> route_response_callbacks; | 410 std::vector<MediaRouteResponseCallback> route_response_callbacks; |
403 route_response_callbacks.push_back(base::Bind( | 411 route_response_callbacks.push_back(base::Bind( |
404 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); | 412 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); |
405 router()->JoinRoute(kSource, kPresentationId, url::Origin(GURL(kOrigin)), | 413 router()->JoinRoute(kSource, kPresentationId, url::Origin(GURL(kOrigin)), |
(...skipping 22 matching lines...) Expand all Loading... |
428 TEST_F(MediaRouterMojoImplTest, JoinRouteTimedOutFails) { | 436 TEST_F(MediaRouterMojoImplTest, JoinRouteTimedOutFails) { |
429 // Make sure the MR has received an update with the route, so it knows there | 437 // Make sure the MR has received an update with the route, so it knows there |
430 // is a route to join. | 438 // is a route to join. |
431 std::vector<MediaRoute> routes; | 439 std::vector<MediaRoute> routes; |
432 routes.push_back(CreateMediaRoute()); | 440 routes.push_back(CreateMediaRoute()); |
433 router()->OnRoutesUpdated(routes, std::string(), std::vector<std::string>()); | 441 router()->OnRoutesUpdated(routes, std::string(), std::vector<std::string>()); |
434 EXPECT_TRUE(router()->HasJoinableRoute()); | 442 EXPECT_TRUE(router()->HasJoinableRoute()); |
435 | 443 |
436 EXPECT_CALL( | 444 EXPECT_CALL( |
437 mock_media_route_provider_, | 445 mock_media_route_provider_, |
438 JoinRoute(kSource, kPresentationId, url::Origin(GURL(kOrigin)), | 446 JoinRouteInternal( |
439 kInvalidTabId, | 447 kSource, kPresentationId, url::Origin(GURL(kOrigin)), kInvalidTabId, |
440 base::TimeDelta::FromMilliseconds(kTimeoutMillis), _, _)) | 448 base::TimeDelta::FromMilliseconds(kTimeoutMillis), _, _)) |
441 .WillOnce(Invoke( | 449 .WillOnce(Invoke( |
442 [](const std::string& source, const std::string& presentation_id, | 450 [](const std::string& source, const std::string& presentation_id, |
443 const url::Origin& origin, int tab_id, base::TimeDelta timeout, | 451 const url::Origin& origin, int tab_id, base::TimeDelta timeout, |
444 bool incognito, | 452 bool incognito, mojom::MediaRouteProvider::JoinRouteCallback& cb) { |
445 const mojom::MediaRouteProvider::JoinRouteCallback& cb) { | 453 std::move(cb).Run(base::nullopt, std::string(kError), |
446 cb.Run(base::nullopt, std::string(kError), | 454 RouteRequestResult::TIMED_OUT); |
447 RouteRequestResult::TIMED_OUT); | |
448 })); | 455 })); |
449 | 456 |
450 RouteResponseCallbackHandler handler; | 457 RouteResponseCallbackHandler handler; |
451 base::RunLoop run_loop; | 458 base::RunLoop run_loop; |
452 EXPECT_CALL(handler, | 459 EXPECT_CALL(handler, |
453 DoInvoke(nullptr, "", kError, RouteRequestResult::TIMED_OUT)) | 460 DoInvoke(nullptr, "", kError, RouteRequestResult::TIMED_OUT)) |
454 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); | 461 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); |
455 std::vector<MediaRouteResponseCallback> route_response_callbacks; | 462 std::vector<MediaRouteResponseCallback> route_response_callbacks; |
456 route_response_callbacks.push_back(base::Bind( | 463 route_response_callbacks.push_back(base::Bind( |
457 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); | 464 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); |
(...skipping 12 matching lines...) Expand all Loading... |
470 std::vector<MediaRoute> routes; | 477 std::vector<MediaRoute> routes; |
471 routes.push_back(route); | 478 routes.push_back(route); |
472 router()->OnRoutesUpdated(routes, std::string(), std::vector<std::string>()); | 479 router()->OnRoutesUpdated(routes, std::string(), std::vector<std::string>()); |
473 EXPECT_TRUE(router()->HasJoinableRoute()); | 480 EXPECT_TRUE(router()->HasJoinableRoute()); |
474 | 481 |
475 // Use a lambda function as an invocation target here to work around | 482 // Use a lambda function as an invocation target here to work around |
476 // a limitation with GMock::Invoke that prevents it from using move-only types | 483 // a limitation with GMock::Invoke that prevents it from using move-only types |
477 // in runnable parameter lists. | 484 // in runnable parameter lists. |
478 EXPECT_CALL( | 485 EXPECT_CALL( |
479 mock_media_route_provider_, | 486 mock_media_route_provider_, |
480 JoinRoute(kSource, kPresentationId, url::Origin(GURL(kOrigin)), | 487 JoinRouteInternal( |
481 kInvalidTabId, | 488 kSource, kPresentationId, url::Origin(GURL(kOrigin)), kInvalidTabId, |
482 base::TimeDelta::FromMilliseconds(kTimeoutMillis), true, _)) | 489 base::TimeDelta::FromMilliseconds(kTimeoutMillis), true, _)) |
483 .WillOnce(Invoke([&route]( | 490 .WillOnce( |
484 const std::string& source, const std::string& presentation_id, | 491 Invoke([&route](const std::string& source, |
485 const url::Origin& origin, int tab_id, base::TimeDelta timeout, | 492 const std::string& presentation_id, |
486 bool incognito, | 493 const url::Origin& origin, int tab_id, |
487 const mojom::MediaRouteProvider::JoinRouteCallback& cb) { | 494 base::TimeDelta timeout, bool incognito, |
488 cb.Run(route, std::string(), RouteRequestResult::OK); | 495 mojom::MediaRouteProvider::JoinRouteCallback& cb) { |
489 })); | 496 std::move(cb).Run(route, std::string(), RouteRequestResult::OK); |
| 497 })); |
490 | 498 |
491 RouteResponseCallbackHandler handler; | 499 RouteResponseCallbackHandler handler; |
492 base::RunLoop run_loop; | 500 base::RunLoop run_loop; |
493 std::string error("Mismatch in incognito status: request = 1, response = 0"); | 501 std::string error("Mismatch in incognito status: request = 1, response = 0"); |
494 EXPECT_CALL(handler, DoInvoke(nullptr, "", error, | 502 EXPECT_CALL(handler, DoInvoke(nullptr, "", error, |
495 RouteRequestResult::INCOGNITO_MISMATCH)) | 503 RouteRequestResult::INCOGNITO_MISMATCH)) |
496 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); | 504 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); |
497 std::vector<MediaRouteResponseCallback> route_response_callbacks; | 505 std::vector<MediaRouteResponseCallback> route_response_callbacks; |
498 route_response_callbacks.push_back(base::Bind( | 506 route_response_callbacks.push_back(base::Bind( |
499 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); | 507 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); |
(...skipping 10 matching lines...) Expand all Loading... |
510 MediaRoute expected_route(kRouteId, media_source, kSinkId, "", false, "", | 518 MediaRoute expected_route(kRouteId, media_source, kSinkId, "", false, "", |
511 false); | 519 false); |
512 expected_route.set_incognito(false); | 520 expected_route.set_incognito(false); |
513 MediaRoute route = CreateMediaRoute(); | 521 MediaRoute route = CreateMediaRoute(); |
514 | 522 |
515 // Use a lambda function as an invocation target here to work around | 523 // Use a lambda function as an invocation target here to work around |
516 // a limitation with GMock::Invoke that prevents it from using move-only types | 524 // a limitation with GMock::Invoke that prevents it from using move-only types |
517 // in runnable parameter lists. | 525 // in runnable parameter lists. |
518 EXPECT_CALL( | 526 EXPECT_CALL( |
519 mock_media_route_provider_, | 527 mock_media_route_provider_, |
520 ConnectRouteByRouteId( | 528 ConnectRouteByRouteIdInternal( |
521 kSource, kRouteId, _, url::Origin(GURL(kOrigin)), kInvalidTabId, | 529 kSource, kRouteId, _, url::Origin(GURL(kOrigin)), kInvalidTabId, |
522 base::TimeDelta::FromMilliseconds(kTimeoutMillis), false, _)) | 530 base::TimeDelta::FromMilliseconds(kTimeoutMillis), false, _)) |
523 .WillOnce(Invoke([&route]( | 531 .WillOnce(Invoke( |
524 const std::string& source, const std::string& route_id, | 532 [&route](const std::string& source, const std::string& route_id, |
525 const std::string& presentation_id, const url::Origin& origin, | 533 const std::string& presentation_id, |
526 int tab_id, base::TimeDelta timeout, bool incognito, | 534 const url::Origin& origin, int tab_id, |
527 const mojom::MediaRouteProvider::JoinRouteCallback& cb) { | 535 base::TimeDelta timeout, bool incognito, |
528 cb.Run(route, std::string(), RouteRequestResult::OK); | 536 mojom::MediaRouteProvider::JoinRouteCallback& cb) { |
529 })); | 537 std::move(cb).Run(route, std::string(), RouteRequestResult::OK); |
| 538 })); |
530 | 539 |
531 RouteResponseCallbackHandler handler; | 540 RouteResponseCallbackHandler handler; |
532 base::RunLoop run_loop; | 541 base::RunLoop run_loop; |
533 EXPECT_CALL(handler, DoInvoke(Pointee(Equals(expected_route)), Not(""), "", | 542 EXPECT_CALL(handler, DoInvoke(Pointee(Equals(expected_route)), Not(""), "", |
534 RouteRequestResult::OK)) | 543 RouteRequestResult::OK)) |
535 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); | 544 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); |
536 std::vector<MediaRouteResponseCallback> route_response_callbacks; | 545 std::vector<MediaRouteResponseCallback> route_response_callbacks; |
537 route_response_callbacks.push_back(base::Bind( | 546 route_response_callbacks.push_back(base::Bind( |
538 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); | 547 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); |
539 router()->ConnectRouteByRouteId( | 548 router()->ConnectRouteByRouteId( |
540 kSource, kRouteId, url::Origin(GURL(kOrigin)), nullptr, | 549 kSource, kRouteId, url::Origin(GURL(kOrigin)), nullptr, |
541 route_response_callbacks, | 550 route_response_callbacks, |
542 base::TimeDelta::FromMilliseconds(kTimeoutMillis), false); | 551 base::TimeDelta::FromMilliseconds(kTimeoutMillis), false); |
543 run_loop.Run(); | 552 run_loop.Run(); |
544 ExpectResultBucketCount("JoinRoute", RouteRequestResult::OK, 1); | 553 ExpectResultBucketCount("JoinRoute", RouteRequestResult::OK, 1); |
545 } | 554 } |
546 | 555 |
547 TEST_F(MediaRouterMojoImplTest, ConnectRouteByRouteIdFails) { | 556 TEST_F(MediaRouterMojoImplTest, ConnectRouteByRouteIdFails) { |
548 EXPECT_CALL( | 557 EXPECT_CALL( |
549 mock_media_route_provider_, | 558 mock_media_route_provider_, |
550 ConnectRouteByRouteId( | 559 ConnectRouteByRouteIdInternal( |
551 kSource, kRouteId, _, url::Origin(GURL(kOrigin)), kInvalidTabId, | 560 kSource, kRouteId, _, url::Origin(GURL(kOrigin)), kInvalidTabId, |
552 base::TimeDelta::FromMilliseconds(kTimeoutMillis), true, _)) | 561 base::TimeDelta::FromMilliseconds(kTimeoutMillis), true, _)) |
553 .WillOnce(Invoke( | 562 .WillOnce(Invoke( |
554 [](const std::string& source, const std::string& route_id, | 563 [](const std::string& source, const std::string& route_id, |
555 const std::string& presentation_id, const url::Origin& origin, | 564 const std::string& presentation_id, const url::Origin& origin, |
556 int tab_id, base::TimeDelta timeout, bool incognito, | 565 int tab_id, base::TimeDelta timeout, bool incognito, |
557 const mojom::MediaRouteProvider::JoinRouteCallback& cb) { | 566 mojom::MediaRouteProvider::JoinRouteCallback& cb) { |
558 cb.Run(base::nullopt, std::string(kError), | 567 std::move(cb).Run(base::nullopt, std::string(kError), |
559 RouteRequestResult::TIMED_OUT); | 568 RouteRequestResult::TIMED_OUT); |
560 })); | 569 })); |
561 | 570 |
562 RouteResponseCallbackHandler handler; | 571 RouteResponseCallbackHandler handler; |
563 base::RunLoop run_loop; | 572 base::RunLoop run_loop; |
564 EXPECT_CALL(handler, | 573 EXPECT_CALL(handler, |
565 DoInvoke(nullptr, "", kError, RouteRequestResult::TIMED_OUT)) | 574 DoInvoke(nullptr, "", kError, RouteRequestResult::TIMED_OUT)) |
566 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); | 575 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); |
567 std::vector<MediaRouteResponseCallback> route_response_callbacks; | 576 std::vector<MediaRouteResponseCallback> route_response_callbacks; |
568 route_response_callbacks.push_back(base::Bind( | 577 route_response_callbacks.push_back(base::Bind( |
569 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); | 578 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); |
570 router()->ConnectRouteByRouteId( | 579 router()->ConnectRouteByRouteId( |
571 kSource, kRouteId, url::Origin(GURL(kOrigin)), nullptr, | 580 kSource, kRouteId, url::Origin(GURL(kOrigin)), nullptr, |
572 route_response_callbacks, | 581 route_response_callbacks, |
573 base::TimeDelta::FromMilliseconds(kTimeoutMillis), true); | 582 base::TimeDelta::FromMilliseconds(kTimeoutMillis), true); |
574 run_loop.Run(); | 583 run_loop.Run(); |
575 ExpectResultBucketCount("JoinRoute", RouteRequestResult::TIMED_OUT, 1); | 584 ExpectResultBucketCount("JoinRoute", RouteRequestResult::TIMED_OUT, 1); |
576 } | 585 } |
577 | 586 |
578 TEST_F(MediaRouterMojoImplTest, ConnectRouteByIdIncognitoMismatchFails) { | 587 TEST_F(MediaRouterMojoImplTest, ConnectRouteByIdIncognitoMismatchFails) { |
579 MediaRoute route = CreateMediaRoute(); | 588 MediaRoute route = CreateMediaRoute(); |
580 | 589 |
581 // Use a lambda function as an invocation target here to work around | 590 // Use a lambda function as an invocation target here to work around |
582 // a limitation with GMock::Invoke that prevents it from using move-only types | 591 // a limitation with GMock::Invoke that prevents it from using move-only types |
583 // in runnable parameter lists. | 592 // in runnable parameter lists. |
584 EXPECT_CALL( | 593 EXPECT_CALL( |
585 mock_media_route_provider_, | 594 mock_media_route_provider_, |
586 ConnectRouteByRouteId( | 595 ConnectRouteByRouteIdInternal( |
587 kSource, kRouteId, _, url::Origin(GURL(kOrigin)), kInvalidTabId, | 596 kSource, kRouteId, _, url::Origin(GURL(kOrigin)), kInvalidTabId, |
588 base::TimeDelta::FromMilliseconds(kTimeoutMillis), true, _)) | 597 base::TimeDelta::FromMilliseconds(kTimeoutMillis), true, _)) |
589 .WillOnce(Invoke([&route]( | 598 .WillOnce(Invoke( |
590 const std::string& source, const std::string& route_id, | 599 [&route](const std::string& source, const std::string& route_id, |
591 const std::string& presentation_id, const url::Origin& origin, | 600 const std::string& presentation_id, |
592 int tab_id, base::TimeDelta timeout, bool incognito, | 601 const url::Origin& origin, int tab_id, |
593 const mojom::MediaRouteProvider::JoinRouteCallback& cb) { | 602 base::TimeDelta timeout, bool incognito, |
594 cb.Run(route, std::string(), RouteRequestResult::OK); | 603 mojom::MediaRouteProvider::JoinRouteCallback& cb) { |
595 })); | 604 std::move(cb).Run(route, std::string(), RouteRequestResult::OK); |
| 605 })); |
596 | 606 |
597 RouteResponseCallbackHandler handler; | 607 RouteResponseCallbackHandler handler; |
598 base::RunLoop run_loop; | 608 base::RunLoop run_loop; |
599 std::string error("Mismatch in incognito status: request = 1, response = 0"); | 609 std::string error("Mismatch in incognito status: request = 1, response = 0"); |
600 EXPECT_CALL(handler, DoInvoke(nullptr, "", error, | 610 EXPECT_CALL(handler, DoInvoke(nullptr, "", error, |
601 RouteRequestResult::INCOGNITO_MISMATCH)) | 611 RouteRequestResult::INCOGNITO_MISMATCH)) |
602 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); | 612 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); |
603 std::vector<MediaRouteResponseCallback> route_response_callbacks; | 613 std::vector<MediaRouteResponseCallback> route_response_callbacks; |
604 route_response_callbacks.push_back(base::Bind( | 614 route_response_callbacks.push_back(base::Bind( |
605 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); | 615 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); |
606 router()->ConnectRouteByRouteId( | 616 router()->ConnectRouteByRouteId( |
607 kSource, kRouteId, url::Origin(GURL(kOrigin)), nullptr, | 617 kSource, kRouteId, url::Origin(GURL(kOrigin)), nullptr, |
608 route_response_callbacks, | 618 route_response_callbacks, |
609 base::TimeDelta::FromMilliseconds(kTimeoutMillis), true); | 619 base::TimeDelta::FromMilliseconds(kTimeoutMillis), true); |
610 run_loop.Run(); | 620 run_loop.Run(); |
611 ExpectResultBucketCount("JoinRoute", RouteRequestResult::INCOGNITO_MISMATCH, | 621 ExpectResultBucketCount("JoinRoute", RouteRequestResult::INCOGNITO_MISMATCH, |
612 1); | 622 1); |
613 } | 623 } |
614 | 624 |
615 TEST_F(MediaRouterMojoImplTest, DetachRoute) { | 625 TEST_F(MediaRouterMojoImplTest, DetachRoute) { |
616 base::RunLoop run_loop; | 626 base::RunLoop run_loop; |
617 EXPECT_CALL(mock_media_route_provider_, DetachRoute(kRouteId)) | 627 EXPECT_CALL(mock_media_route_provider_, DetachRoute(kRouteId)) |
618 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); | 628 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); |
619 router()->DetachRoute(kRouteId); | 629 router()->DetachRoute(kRouteId); |
620 run_loop.Run(); | 630 run_loop.Run(); |
621 } | 631 } |
622 | 632 |
623 TEST_F(MediaRouterMojoImplTest, TerminateRoute) { | 633 TEST_F(MediaRouterMojoImplTest, TerminateRoute) { |
624 base::RunLoop run_loop; | 634 base::RunLoop run_loop; |
625 EXPECT_CALL(mock_media_route_provider_, TerminateRoute(kRouteId, _)) | 635 EXPECT_CALL(mock_media_route_provider_, TerminateRouteInternal(kRouteId, _)) |
626 .WillOnce(Invoke( | 636 .WillOnce( |
627 [](const std::string& route_id, | 637 Invoke([](const std::string& route_id, |
628 const mojom::MediaRouteProvider::TerminateRouteCallback& cb) { | 638 mojom::MediaRouteProvider::TerminateRouteCallback& cb) { |
629 cb.Run(base::nullopt, RouteRequestResult::OK); | 639 std::move(cb).Run(base::nullopt, RouteRequestResult::OK); |
630 })); | 640 })); |
631 router()->TerminateRoute(kRouteId); | 641 router()->TerminateRoute(kRouteId); |
632 run_loop.RunUntilIdle(); | 642 run_loop.RunUntilIdle(); |
633 ExpectResultBucketCount("TerminateRoute", RouteRequestResult::OK, 1); | 643 ExpectResultBucketCount("TerminateRoute", RouteRequestResult::OK, 1); |
634 } | 644 } |
635 | 645 |
636 TEST_F(MediaRouterMojoImplTest, TerminateRouteFails) { | 646 TEST_F(MediaRouterMojoImplTest, TerminateRouteFails) { |
637 base::RunLoop run_loop; | 647 base::RunLoop run_loop; |
638 EXPECT_CALL(mock_media_route_provider_, TerminateRoute(kRouteId, _)) | 648 EXPECT_CALL(mock_media_route_provider_, TerminateRouteInternal(kRouteId, _)) |
639 .WillOnce(Invoke( | 649 .WillOnce( |
640 [](const std::string& route_id, | 650 Invoke([](const std::string& route_id, |
641 const mojom::MediaRouteProvider::TerminateRouteCallback& cb) { | 651 mojom::MediaRouteProvider::TerminateRouteCallback& cb) { |
642 cb.Run(std::string("timed out"), RouteRequestResult::TIMED_OUT); | 652 std::move(cb).Run(std::string("timed out"), |
| 653 RouteRequestResult::TIMED_OUT); |
643 })); | 654 })); |
644 router()->TerminateRoute(kRouteId); | 655 router()->TerminateRoute(kRouteId); |
645 run_loop.RunUntilIdle(); | 656 run_loop.RunUntilIdle(); |
646 ExpectResultBucketCount("TerminateRoute", RouteRequestResult::OK, 0); | 657 ExpectResultBucketCount("TerminateRoute", RouteRequestResult::OK, 0); |
647 ExpectResultBucketCount("TerminateRoute", RouteRequestResult::TIMED_OUT, 1); | 658 ExpectResultBucketCount("TerminateRoute", RouteRequestResult::TIMED_OUT, 1); |
648 } | 659 } |
649 | 660 |
650 TEST_F(MediaRouterMojoImplTest, HandleIssue) { | 661 TEST_F(MediaRouterMojoImplTest, HandleIssue) { |
651 MockIssuesObserver issue_observer1(router()); | 662 MockIssuesObserver issue_observer1(router()); |
652 MockIssuesObserver issue_observer2(router()); | 663 MockIssuesObserver issue_observer2(router()); |
(...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
941 // Kill the final observer, and expect the provider to be woken-up and called | 952 // Kill the final observer, and expect the provider to be woken-up and called |
942 // with the "stop observing" notification. | 953 // with the "stop observing" notification. |
943 EXPECT_CALL(mock_media_route_provider_, | 954 EXPECT_CALL(mock_media_route_provider_, |
944 StopObservingMediaRoutes(media_source.id())) | 955 StopObservingMediaRoutes(media_source.id())) |
945 .Times(1); | 956 .Times(1); |
946 observer3.reset(); | 957 observer3.reset(); |
947 ProcessEventLoop(); | 958 ProcessEventLoop(); |
948 } | 959 } |
949 | 960 |
950 TEST_F(MediaRouterMojoImplTest, SendRouteMessage) { | 961 TEST_F(MediaRouterMojoImplTest, SendRouteMessage) { |
951 EXPECT_CALL( | 962 EXPECT_CALL(mock_media_route_provider_, |
952 mock_media_route_provider_, SendRouteMessage(kRouteId, kMessage, _)) | 963 SendRouteMessageInternal(kRouteId, kMessage, _)) |
953 .WillOnce(Invoke([]( | 964 .WillOnce( |
954 const MediaRoute::Id& route_id, const std::string& message, | 965 Invoke([](const MediaRoute::Id& route_id, const std::string& message, |
955 const mojom::MediaRouteProvider::SendRouteMessageCallback& cb) { | 966 mojom::MediaRouteProvider::SendRouteMessageCallback& cb) { |
956 cb.Run(true); | 967 std::move(cb).Run(true); |
957 })); | 968 })); |
958 | 969 |
959 base::RunLoop run_loop; | 970 base::RunLoop run_loop; |
960 SendMessageCallbackHandler handler; | 971 SendMessageCallbackHandler handler; |
961 EXPECT_CALL(handler, Invoke(true)) | 972 EXPECT_CALL(handler, Invoke(true)) |
962 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); | 973 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); |
963 router()->SendRouteMessage(kRouteId, kMessage, | 974 router()->SendRouteMessage(kRouteId, kMessage, |
964 base::Bind(&SendMessageCallbackHandler::Invoke, | 975 base::Bind(&SendMessageCallbackHandler::Invoke, |
965 base::Unretained(&handler))); | 976 base::Unretained(&handler))); |
966 run_loop.Run(); | 977 run_loop.Run(); |
967 } | 978 } |
968 | 979 |
969 TEST_F(MediaRouterMojoImplTest, SendRouteBinaryMessage) { | 980 TEST_F(MediaRouterMojoImplTest, SendRouteBinaryMessage) { |
970 std::unique_ptr<std::vector<uint8_t>> expected_binary_data( | 981 std::unique_ptr<std::vector<uint8_t>> expected_binary_data( |
971 new std::vector<uint8_t>(kBinaryMessage, | 982 new std::vector<uint8_t>(kBinaryMessage, |
972 kBinaryMessage + arraysize(kBinaryMessage))); | 983 kBinaryMessage + arraysize(kBinaryMessage))); |
973 | 984 |
974 EXPECT_CALL(mock_media_route_provider_, | 985 EXPECT_CALL(mock_media_route_provider_, |
975 SendRouteBinaryMessageInternal(kRouteId, _, _)) | 986 SendRouteBinaryMessageInternal(kRouteId, _, _)) |
976 .WillOnce(Invoke([]( | 987 .WillOnce(Invoke( |
977 const MediaRoute::Id& route_id, const std::vector<uint8_t>& data, | 988 [](const MediaRoute::Id& route_id, const std::vector<uint8_t>& data, |
978 const mojom::MediaRouteProvider::SendRouteMessageCallback& cb) { | 989 mojom::MediaRouteProvider::SendRouteMessageCallback& cb) { |
979 EXPECT_EQ( | 990 EXPECT_EQ(0, memcmp(kBinaryMessage, &(data[0]), |
980 0, memcmp(kBinaryMessage, &(data[0]), arraysize(kBinaryMessage))); | 991 arraysize(kBinaryMessage))); |
981 cb.Run(true); | 992 std::move(cb).Run(true); |
982 })); | 993 })); |
983 | 994 |
984 base::RunLoop run_loop; | 995 base::RunLoop run_loop; |
985 SendMessageCallbackHandler handler; | 996 SendMessageCallbackHandler handler; |
986 EXPECT_CALL(handler, Invoke(true)) | 997 EXPECT_CALL(handler, Invoke(true)) |
987 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); | 998 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); |
988 router()->SendRouteBinaryMessage( | 999 router()->SendRouteBinaryMessage( |
989 kRouteId, std::move(expected_binary_data), | 1000 kRouteId, std::move(expected_binary_data), |
990 base::Bind(&SendMessageCallbackHandler::Invoke, | 1001 base::Bind(&SendMessageCallbackHandler::Invoke, |
991 base::Unretained(&handler))); | 1002 base::Unretained(&handler))); |
992 run_loop.Run(); | 1003 run_loop.Run(); |
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1204 std::string search_input("input"); | 1215 std::string search_input("input"); |
1205 std::string domain("google.com"); | 1216 std::string domain("google.com"); |
1206 MediaSource media_source(kSource); | 1217 MediaSource media_source(kSource); |
1207 | 1218 |
1208 EXPECT_CALL(mock_media_route_provider_, | 1219 EXPECT_CALL(mock_media_route_provider_, |
1209 SearchSinksInternal(kSinkId, kSource, _, _)) | 1220 SearchSinksInternal(kSinkId, kSource, _, _)) |
1210 .WillOnce( | 1221 .WillOnce( |
1211 Invoke([&search_input, &domain]( | 1222 Invoke([&search_input, &domain]( |
1212 const std::string& sink_id, const std::string& source, | 1223 const std::string& sink_id, const std::string& source, |
1213 const mojom::SinkSearchCriteriaPtr& search_criteria, | 1224 const mojom::SinkSearchCriteriaPtr& search_criteria, |
1214 const mojom::MediaRouteProvider::SearchSinksCallback& cb) { | 1225 mojom::MediaRouteProvider::SearchSinksCallback& cb) { |
1215 EXPECT_EQ(search_input, search_criteria->input); | 1226 EXPECT_EQ(search_input, search_criteria->input); |
1216 EXPECT_EQ(domain, search_criteria->domain); | 1227 EXPECT_EQ(domain, search_criteria->domain); |
1217 cb.Run(kSinkId2); | 1228 std::move(cb).Run(kSinkId2); |
1218 })); | 1229 })); |
1219 | 1230 |
1220 SinkResponseCallbackHandler sink_handler; | 1231 SinkResponseCallbackHandler sink_handler; |
1221 EXPECT_CALL(sink_handler, Invoke(kSinkId2)).Times(1); | 1232 EXPECT_CALL(sink_handler, Invoke(kSinkId2)).Times(1); |
1222 MediaSinkSearchResponseCallback sink_callback = base::Bind( | 1233 MediaSinkSearchResponseCallback sink_callback = base::Bind( |
1223 &SinkResponseCallbackHandler::Invoke, base::Unretained(&sink_handler)); | 1234 &SinkResponseCallbackHandler::Invoke, base::Unretained(&sink_handler)); |
1224 | 1235 |
1225 router()->SearchSinks(kSinkId, kSource, search_input, domain, sink_callback); | 1236 router()->SearchSinks(kSinkId, kSource, search_input, domain, sink_callback); |
1226 | 1237 |
1227 base::RunLoop run_loop; | 1238 base::RunLoop run_loop; |
(...skipping 23 matching lines...) Expand all Loading... |
1251 MockMediaController media_controller; | 1262 MockMediaController media_controller; |
1252 mojom::MediaStatusObserverPtr route_controller_as_observer; | 1263 mojom::MediaStatusObserverPtr route_controller_as_observer; |
1253 MediaStatus media_status; | 1264 MediaStatus media_status; |
1254 media_status.title = "test title"; | 1265 media_status.title = "test title"; |
1255 | 1266 |
1256 router()->OnRoutesUpdated({CreateMediaRoute()}, std::string(), | 1267 router()->OnRoutesUpdated({CreateMediaRoute()}, std::string(), |
1257 std::vector<std::string>()); | 1268 std::vector<std::string>()); |
1258 | 1269 |
1259 EXPECT_CALL(mock_media_route_provider_, | 1270 EXPECT_CALL(mock_media_route_provider_, |
1260 CreateMediaRouteControllerInternal(kRouteId, _, _, _)) | 1271 CreateMediaRouteControllerInternal(kRouteId, _, _, _)) |
1261 .WillOnce(Invoke([&media_controller, &route_controller_as_observer]( | 1272 .WillOnce(Invoke( |
1262 const std::string& route_id, | 1273 [&media_controller, &route_controller_as_observer]( |
1263 mojom::MediaControllerRequest& request, | 1274 const std::string& route_id, |
1264 mojom::MediaStatusObserverPtr& observer, | 1275 mojom::MediaControllerRequest& request, |
1265 const mojom::MediaRouteProvider:: | 1276 mojom::MediaStatusObserverPtr& observer, |
1266 CreateMediaRouteControllerCallback& cb) { | 1277 mojom::MediaRouteProvider::CreateMediaRouteControllerCallback& |
1267 media_controller.Bind(std::move(request)); | 1278 cb) { |
1268 route_controller_as_observer = std::move(observer); | 1279 media_controller.Bind(std::move(request)); |
1269 cb.Run(true); | 1280 route_controller_as_observer = std::move(observer); |
1270 })); | 1281 std::move(cb).Run(true); |
| 1282 })); |
1271 // GetRouteController() should return a MediaRouteController that is connected | 1283 // GetRouteController() should return a MediaRouteController that is connected |
1272 // to the MediaController provided by the MediaRouteProvider, and will also be | 1284 // to the MediaController provided by the MediaRouteProvider, and will also be |
1273 // subscribed to MediaStatus updates. | 1285 // subscribed to MediaStatus updates. |
1274 scoped_refptr<MediaRouteController> route_controller = | 1286 scoped_refptr<MediaRouteController> route_controller = |
1275 router()->GetRouteController(kRouteId); | 1287 router()->GetRouteController(kRouteId); |
1276 base::RunLoop().RunUntilIdle(); | 1288 base::RunLoop().RunUntilIdle(); |
1277 | 1289 |
1278 // Media commands sent to the MediaRouteController should be forwarded to the | 1290 // Media commands sent to the MediaRouteController should be forwarded to the |
1279 // MediaController created by the MediaRouteProvider. | 1291 // MediaController created by the MediaRouteProvider. |
1280 EXPECT_CALL(media_controller, Play()); | 1292 EXPECT_CALL(media_controller, Play()); |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1376 } | 1388 } |
1377 | 1389 |
1378 TEST_F(MediaRouterMojoImplTest, FailToCreateRouteController) { | 1390 TEST_F(MediaRouterMojoImplTest, FailToCreateRouteController) { |
1379 router()->OnRoutesUpdated({CreateMediaRoute()}, std::string(), | 1391 router()->OnRoutesUpdated({CreateMediaRoute()}, std::string(), |
1380 std::vector<std::string>()); | 1392 std::vector<std::string>()); |
1381 | 1393 |
1382 EXPECT_CALL(mock_media_route_provider_, | 1394 EXPECT_CALL(mock_media_route_provider_, |
1383 CreateMediaRouteControllerInternal(kRouteId, _, _, _)) | 1395 CreateMediaRouteControllerInternal(kRouteId, _, _, _)) |
1384 .WillOnce(Invoke( | 1396 .WillOnce(Invoke( |
1385 [](Unused, Unused, Unused, | 1397 [](Unused, Unused, Unused, |
1386 const mojom::MediaRouteProvider:: | 1398 mojom::MediaRouteProvider::CreateMediaRouteControllerCallback& |
1387 CreateMediaRouteControllerCallback& cb) { cb.Run(false); })); | 1399 cb) { std::move(cb).Run(false); })); |
1388 MockMediaRouteControllerObserver observer( | 1400 MockMediaRouteControllerObserver observer( |
1389 router()->GetRouteController(kRouteId)); | 1401 router()->GetRouteController(kRouteId)); |
1390 | 1402 |
1391 // When the MediaRouter is notified that the MediaRouteProvider failed to | 1403 // When the MediaRouter is notified that the MediaRouteProvider failed to |
1392 // create a controller, the browser-side controller should be invalidated. | 1404 // create a controller, the browser-side controller should be invalidated. |
1393 EXPECT_CALL(observer, OnControllerInvalidated()); | 1405 EXPECT_CALL(observer, OnControllerInvalidated()); |
1394 | 1406 |
1395 base::RunLoop().RunUntilIdle(); | 1407 base::RunLoop().RunUntilIdle(); |
1396 } | 1408 } |
1397 | 1409 |
(...skipping 425 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1823 EXPECT_CALL(mock_media_route_provider_, | 1835 EXPECT_CALL(mock_media_route_provider_, |
1824 StartListeningForRouteMessages(media_source.id())); | 1836 StartListeningForRouteMessages(media_source.id())); |
1825 media_router_->OnConnectionError(); | 1837 media_router_->OnConnectionError(); |
1826 BindMediaRouteProvider(); | 1838 BindMediaRouteProvider(); |
1827 RegisterMediaRouteProvider(); | 1839 RegisterMediaRouteProvider(); |
1828 base::RunLoop().RunUntilIdle(); | 1840 base::RunLoop().RunUntilIdle(); |
1829 } | 1841 } |
1830 } | 1842 } |
1831 | 1843 |
1832 } // namespace media_router | 1844 } // namespace media_router |
OLD | NEW |