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

Side by Side Diff: chrome/browser/ui/webui/media_router/media_router_ui_unittest.cc

Issue 2040883002: [Media Router] Assign each route a current cast mode if possible (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase for WebUI::CallJavascriptFunction rename Created 4 years, 6 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 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 "chrome/browser/ui/webui/media_router/media_router_ui.h" 5 #include "chrome/browser/ui/webui/media_router/media_router_ui.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/memory/ptr_util.h" 8 #include "base/memory/ptr_util.h"
9 #include "base/strings/utf_string_conversions.h" 9 #include "base/strings/utf_string_conversions.h"
10 #include "chrome/browser/media/router/media_route.h" 10 #include "chrome/browser/media/router/media_route.h"
11 #include "chrome/browser/media/router/media_source_helper.h"
11 #include "chrome/browser/media/router/mock_media_router.h" 12 #include "chrome/browser/media/router/mock_media_router.h"
12 #include "chrome/browser/media/router/route_request_result.h" 13 #include "chrome/browser/media/router/route_request_result.h"
13 #include "chrome/browser/media/router/test_helper.h" 14 #include "chrome/browser/media/router/test_helper.h"
14 #include "chrome/browser/sessions/session_tab_helper.h" 15 #include "chrome/browser/sessions/session_tab_helper.h"
15 #include "chrome/browser/ui/webui/media_router/media_router_webui_message_handle r.h" 16 #include "chrome/browser/ui/webui/media_router/media_router_webui_message_handle r.h"
16 #include "chrome/grit/generated_resources.h" 17 #include "chrome/grit/generated_resources.h"
17 #include "chrome/test/base/testing_profile.h" 18 #include "chrome/test/base/testing_profile.h"
18 #include "content/public/test/test_browser_thread_bundle.h" 19 #include "content/public/test/test_browser_thread_bundle.h"
19 #include "content/public/test/test_web_ui.h" 20 #include "content/public/test/test_web_ui.h"
20 #include "extensions/browser/extension_registry.h" 21 #include "extensions/browser/extension_registry.h"
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
210 MediaRoute non_display_route_1("routeId2", media_source, "sinkId2", "desc 2", 211 MediaRoute non_display_route_1("routeId2", media_source, "sinkId2", "desc 2",
211 true, "", false); 212 true, "", false);
212 MediaRoute display_route_2("routeId3", media_source, "sinkId2", "desc 2", 213 MediaRoute display_route_2("routeId3", media_source, "sinkId2", "desc 2",
213 true, "", true); 214 true, "", true);
214 std::vector<MediaRoute> routes; 215 std::vector<MediaRoute> routes;
215 routes.push_back(display_route_1); 216 routes.push_back(display_route_1);
216 routes.push_back(non_display_route_1); 217 routes.push_back(non_display_route_1);
217 routes.push_back(display_route_2); 218 routes.push_back(display_route_2);
218 219
219 std::vector<MediaRoute> filtered_routes; 220 std::vector<MediaRoute> filtered_routes;
220 EXPECT_CALL(mock_callback, OnRoutesUpdated(_, _)).WillOnce( 221 EXPECT_CALL(mock_callback, OnRoutesUpdated(_, _))
221 SaveArg<0>(&filtered_routes)); 222 .WillOnce(SaveArg<0>(&filtered_routes));
222 observer->OnRoutesUpdated(routes, 223 observer->OnRoutesUpdated(routes, std::vector<MediaRoute::Id>());
223 std::vector<MediaRoute::Id>());
224 224
225 ASSERT_EQ(2u, filtered_routes.size()); 225 ASSERT_EQ(2u, filtered_routes.size());
226 EXPECT_TRUE(display_route_1.Equals(filtered_routes[0])); 226 EXPECT_TRUE(display_route_1.Equals(filtered_routes[0]));
227 EXPECT_TRUE(filtered_routes[0].for_display()); 227 EXPECT_TRUE(filtered_routes[0].for_display());
228 EXPECT_TRUE(display_route_2.Equals(filtered_routes[1])); 228 EXPECT_TRUE(display_route_2.Equals(filtered_routes[1]));
229 EXPECT_TRUE(filtered_routes[1].for_display()); 229 EXPECT_TRUE(filtered_routes[1].for_display());
230 230
231 EXPECT_CALL(mock_router_, UnregisterMediaRoutesObserver(_)).Times(1); 231 EXPECT_CALL(mock_router_, UnregisterMediaRoutesObserver(_)).Times(1);
232 observer.reset(); 232 observer.reset();
233 } 233 }
(...skipping 20 matching lines...) Expand all
254 routes.push_back(non_display_route_1); 254 routes.push_back(non_display_route_1);
255 routes.push_back(display_route_2); 255 routes.push_back(display_route_2);
256 256
257 std::vector<MediaRoute::Id> joinable_route_ids; 257 std::vector<MediaRoute::Id> joinable_route_ids;
258 joinable_route_ids.push_back("routeId1"); 258 joinable_route_ids.push_back("routeId1");
259 joinable_route_ids.push_back("routeId2"); 259 joinable_route_ids.push_back("routeId2");
260 joinable_route_ids.push_back("routeId3"); 260 joinable_route_ids.push_back("routeId3");
261 261
262 std::vector<MediaRoute::Id> filtered_joinable_route_ids; 262 std::vector<MediaRoute::Id> filtered_joinable_route_ids;
263 // Save the filtered joinable routes. 263 // Save the filtered joinable routes.
264 EXPECT_CALL(mock_callback, OnRoutesUpdated(_, _)).WillOnce( 264 EXPECT_CALL(mock_callback, OnRoutesUpdated(_, _))
265 SaveArg<1>(&filtered_joinable_route_ids)); 265 .WillOnce(SaveArg<1>(&filtered_joinable_route_ids));
266 observer->OnRoutesUpdated(routes, 266 observer->OnRoutesUpdated(routes, joinable_route_ids);
267 joinable_route_ids);
268 267
269 ASSERT_EQ(2u, filtered_joinable_route_ids.size()); 268 ASSERT_EQ(2u, filtered_joinable_route_ids.size());
270 EXPECT_EQ(display_route_1.media_route_id(), filtered_joinable_route_ids[0]); 269 EXPECT_EQ(display_route_1.media_route_id(), filtered_joinable_route_ids[0]);
271 EXPECT_EQ(display_route_2.media_route_id(), filtered_joinable_route_ids[1]); 270 EXPECT_EQ(display_route_2.media_route_id(), filtered_joinable_route_ids[1]);
272 271
273 EXPECT_CALL(mock_router_, UnregisterMediaRoutesObserver(_)).Times(1); 272 EXPECT_CALL(mock_router_, UnregisterMediaRoutesObserver(_)).Times(1);
274 observer.reset(); 273 observer.reset();
275 } 274 }
276 275
276 TEST_F(MediaRouterUITest, UIMediaRoutesObserverAssignsCurrentCastModes) {
277 CreateMediaRouterUI(&profile_);
278 SessionID::id_type tab_id = SessionTabHelper::IdForTab(initiator_.get());
279 MediaSource media_source_1(MediaSourceForTab(tab_id));
280 MediaSource media_source_2("mediaSource");
281 MediaSource media_source_3(MediaSourceForDesktop());
282 MockRoutesUpdatedCallback mock_callback;
283 std::unique_ptr<MediaRouterUI::UIMediaRoutesObserver> observer(
284 new MediaRouterUI::UIMediaRoutesObserver(
285 &mock_router_, MediaSource::Id(),
286 base::Bind(&MediaRouterUI::OnRoutesUpdated,
287 base::Unretained(media_router_ui_.get()))));
288
289 MediaRoute display_route_1("routeId1", media_source_1, "sinkId1", "desc 1",
290 true, "", true);
291 MediaRoute non_display_route_1("routeId2", media_source_2, "sinkId2",
292 "desc 2", true, "", false);
293 MediaRoute display_route_2("routeId3", media_source_3, "sinkId2", "desc 2",
294 true, "", true);
295 std::vector<MediaRoute> routes;
296 routes.push_back(display_route_1);
297 routes.push_back(non_display_route_1);
298 routes.push_back(display_route_2);
299
300 observer->OnRoutesUpdated(routes, std::vector<MediaRoute::Id>());
301
302 const auto& filtered_routes = media_router_ui_->routes();
303 ASSERT_EQ(2u, filtered_routes.size());
304 EXPECT_TRUE(display_route_1.Equals(filtered_routes[0]));
305 EXPECT_TRUE(filtered_routes[0].for_display());
306 EXPECT_TRUE(display_route_2.Equals(filtered_routes[1]));
307 EXPECT_TRUE(filtered_routes[1].for_display());
308
309 const auto& current_cast_modes = media_router_ui_->current_cast_modes();
310 ASSERT_EQ(2u, current_cast_modes.size());
311 auto cast_mode_entry =
312 current_cast_modes.find(display_route_1.media_route_id());
313 EXPECT_NE(end(current_cast_modes), cast_mode_entry);
314 EXPECT_EQ(MediaCastMode::TAB_MIRROR, cast_mode_entry->second);
315 cast_mode_entry =
316 current_cast_modes.find(non_display_route_1.media_route_id());
317 EXPECT_EQ(end(current_cast_modes), cast_mode_entry);
318 cast_mode_entry = current_cast_modes.find(display_route_2.media_route_id());
319 EXPECT_NE(end(current_cast_modes), cast_mode_entry);
320 EXPECT_EQ(MediaCastMode::DESKTOP_MIRROR, cast_mode_entry->second);
321
322 EXPECT_CALL(mock_router_, UnregisterMediaRoutesObserver(_)).Times(1);
323 observer.reset();
324 }
325
326 TEST_F(MediaRouterUITest, UIMediaRoutesObserverSkipsUnavailableCastModes) {
327 CreateMediaRouterUI(&profile_);
328 MediaSource media_source_1("mediaSource1");
329 MediaSource media_source_2("mediaSource2");
330 MediaSource media_source_3(MediaSourceForDesktop());
331 MockRoutesUpdatedCallback mock_callback;
332 std::unique_ptr<MediaRouterUI::UIMediaRoutesObserver> observer(
333 new MediaRouterUI::UIMediaRoutesObserver(
334 &mock_router_, MediaSource::Id(),
335 base::Bind(&MediaRouterUI::OnRoutesUpdated,
336 base::Unretained(media_router_ui_.get()))));
337
338 MediaRoute display_route_1("routeId1", media_source_1, "sinkId1", "desc 1",
339 true, "", true);
340 MediaRoute non_display_route_1("routeId2", media_source_2, "sinkId2",
341 "desc 2", true, "", false);
342 MediaRoute display_route_2("routeId3", media_source_3, "sinkId2", "desc 2",
343 true, "", true);
344 std::vector<MediaRoute> routes;
345 routes.push_back(display_route_1);
346 routes.push_back(non_display_route_1);
347 routes.push_back(display_route_2);
348
349 observer->OnRoutesUpdated(routes, std::vector<MediaRoute::Id>());
350
351 const auto& filtered_routes = media_router_ui_->routes();
352 ASSERT_EQ(2u, filtered_routes.size());
353 EXPECT_TRUE(display_route_1.Equals(filtered_routes[0]));
354 EXPECT_TRUE(filtered_routes[0].for_display());
355 EXPECT_TRUE(display_route_2.Equals(filtered_routes[1]));
356 EXPECT_TRUE(filtered_routes[1].for_display());
357
358 const auto& current_cast_modes = media_router_ui_->current_cast_modes();
359 ASSERT_EQ(1u, current_cast_modes.size());
360 auto cast_mode_entry =
361 current_cast_modes.find(display_route_1.media_route_id());
362 // No observer for source "mediaSource1" means no cast mode for this route.
363 EXPECT_EQ(end(current_cast_modes), cast_mode_entry);
364 cast_mode_entry =
365 current_cast_modes.find(non_display_route_1.media_route_id());
366 EXPECT_EQ(end(current_cast_modes), cast_mode_entry);
367 cast_mode_entry = current_cast_modes.find(display_route_2.media_route_id());
368 EXPECT_NE(end(current_cast_modes), cast_mode_entry);
369 EXPECT_EQ(MediaCastMode::DESKTOP_MIRROR, cast_mode_entry->second);
370
371 EXPECT_CALL(mock_router_, UnregisterMediaRoutesObserver(_)).Times(1);
372 observer.reset();
373 }
374
277 TEST_F(MediaRouterUITest, GetExtensionNameExtensionPresent) { 375 TEST_F(MediaRouterUITest, GetExtensionNameExtensionPresent) {
278 std::string id = "extensionid"; 376 std::string id = "extensionid";
279 GURL url = GURL("chrome-extension://" + id); 377 GURL url = GURL("chrome-extension://" + id);
280 std::unique_ptr<extensions::ExtensionRegistry> registry = 378 std::unique_ptr<extensions::ExtensionRegistry> registry =
281 base::WrapUnique(new extensions::ExtensionRegistry(nullptr)); 379 base::WrapUnique(new extensions::ExtensionRegistry(nullptr));
282 scoped_refptr<extensions::Extension> app = 380 scoped_refptr<extensions::Extension> app =
283 extensions::test_util::BuildApp(extensions::ExtensionBuilder()) 381 extensions::test_util::BuildApp(extensions::ExtensionBuilder())
284 .MergeManifest(extensions::DictionaryBuilder() 382 .MergeManifest(extensions::DictionaryBuilder()
285 .Set("name", "test app name") 383 .Set("name", "test app name")
286 .Build()) 384 .Build())
(...skipping 15 matching lines...) Expand all
302 } 400 }
303 401
304 TEST_F(MediaRouterUITest, GetExtensionNameEmptyWhenNotExtensionURL) { 402 TEST_F(MediaRouterUITest, GetExtensionNameEmptyWhenNotExtensionURL) {
305 GURL url = GURL("https://www.google.com"); 403 GURL url = GURL("https://www.google.com");
306 std::unique_ptr<extensions::ExtensionRegistry> registry = 404 std::unique_ptr<extensions::ExtensionRegistry> registry =
307 base::WrapUnique(new extensions::ExtensionRegistry(nullptr)); 405 base::WrapUnique(new extensions::ExtensionRegistry(nullptr));
308 406
309 EXPECT_EQ("", MediaRouterUI::GetExtensionName(url, registry.get())); 407 EXPECT_EQ("", MediaRouterUI::GetExtensionName(url, registry.get()));
310 } 408 }
311 } // namespace media_router 409 } // namespace media_router
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698