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

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

Issue 2731033002: [Media Router] Custom Controls 3 - add plumbing through MRUI and MRWebUIMessageHandler (Closed)
Patch Set: Address Derek's comments Created 3 years, 8 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_webui_message_handle r.h" 5 #include "chrome/browser/ui/webui/media_router/media_router_webui_message_handle r.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <string> 8 #include <string>
9 #include <utility> 9 #include <utility>
10 10
11 #include "base/bind.h" 11 #include "base/bind.h"
12 #include "base/metrics/histogram_macros.h" 12 #include "base/metrics/histogram_macros.h"
13 #include "base/metrics/sparse_histogram.h" 13 #include "base/metrics/sparse_histogram.h"
14 #include "base/metrics/user_metrics.h" 14 #include "base/metrics/user_metrics.h"
15 #include "base/strings/string_util.h" 15 #include "base/strings/string_util.h"
16 #include "base/strings/stringprintf.h" 16 #include "base/strings/stringprintf.h"
17 #include "base/values.h" 17 #include "base/values.h"
18 #include "chrome/browser/media/router/media_router_metrics.h" 18 #include "chrome/browser/media/router/media_router_metrics.h"
19 #include "chrome/browser/profiles/profile.h" 19 #include "chrome/browser/profiles/profile.h"
20 #include "chrome/browser/signin/signin_manager_factory.h" 20 #include "chrome/browser/signin/signin_manager_factory.h"
21 #include "chrome/browser/sync/profile_sync_service_factory.h" 21 #include "chrome/browser/sync/profile_sync_service_factory.h"
22 #include "chrome/browser/ui/webui/media_router/media_cast_mode.h" 22 #include "chrome/browser/ui/webui/media_router/media_cast_mode.h"
23 #include "chrome/browser/ui/webui/media_router/media_router_ui.h" 23 #include "chrome/browser/ui/webui/media_router/media_router_ui.h"
24 #include "chrome/common/media_router/issue.h" 24 #include "chrome/common/chrome_features.h"
25 #include "chrome/common/pref_names.h" 25 #include "chrome/common/pref_names.h"
26 #include "chrome/grit/generated_resources.h" 26 #include "chrome/grit/generated_resources.h"
27 #include "components/browser_sync/profile_sync_service.h" 27 #include "components/browser_sync/profile_sync_service.h"
28 #include "components/prefs/pref_service.h" 28 #include "components/prefs/pref_service.h"
29 #include "components/signin/core/browser/signin_manager.h" 29 #include "components/signin/core/browser/signin_manager.h"
30 #include "content/public/browser/web_ui.h" 30 #include "content/public/browser/web_ui.h"
31 #include "extensions/common/constants.h" 31 #include "extensions/common/constants.h"
32 #include "ui/base/l10n/l10n_util.h" 32 #include "ui/base/l10n/l10n_util.h"
33 33
34 namespace media_router { 34 namespace media_router {
(...skipping 20 matching lines...) Expand all
55 const char kReportInitialState[] = "reportInitialState"; 55 const char kReportInitialState[] = "reportInitialState";
56 const char kReportNavigateToView[] = "reportNavigateToView"; 56 const char kReportNavigateToView[] = "reportNavigateToView";
57 const char kReportRouteCreationOutcome[] = "reportRouteCreationOutcome"; 57 const char kReportRouteCreationOutcome[] = "reportRouteCreationOutcome";
58 const char kReportRouteCreation[] = "reportRouteCreation"; 58 const char kReportRouteCreation[] = "reportRouteCreation";
59 const char kReportSelectedCastMode[] = "reportSelectedCastMode"; 59 const char kReportSelectedCastMode[] = "reportSelectedCastMode";
60 const char kReportSinkCount[] = "reportSinkCount"; 60 const char kReportSinkCount[] = "reportSinkCount";
61 const char kReportTimeToClickSink[] = "reportTimeToClickSink"; 61 const char kReportTimeToClickSink[] = "reportTimeToClickSink";
62 const char kReportTimeToInitialActionClose[] = "reportTimeToInitialActionClose"; 62 const char kReportTimeToInitialActionClose[] = "reportTimeToInitialActionClose";
63 const char kSearchSinksAndCreateRoute[] = "searchSinksAndCreateRoute"; 63 const char kSearchSinksAndCreateRoute[] = "searchSinksAndCreateRoute";
64 const char kOnInitialDataReceived[] = "onInitialDataReceived"; 64 const char kOnInitialDataReceived[] = "onInitialDataReceived";
65 const char kOnRouteDetailsClosed[] = "onRouteDetailsClosed";
mark a. foltz 2017/04/26 21:01:19 onMediaControllerAvailable
takumif 2017/04/27 03:04:18 Done.
66 const char kOnRouteDetailsOpened[] = "onRouteDetailsOpened";
mark a. foltz 2017/04/26 21:01:18 OnMediaControllerClosed
takumif 2017/04/27 03:04:18 Done.
67 const char kPauseRoute[] = "pauseRoute";
mark a. foltz 2017/04/26 21:01:19 Prefer pauseCurrentMedia, playCurrentMedia, etc.
takumif 2017/04/27 03:04:17 Done.
68 const char kPlayRoute[] = "playRoute";
69 const char kSeekRoute[] = "seekRoute";
70 const char kSetRouteMute[] = "setRouteMute";
71 const char kSetRouteVolume[] = "setRouteVolume";
65 72
66 // JS function names. 73 // JS function names.
67 const char kSetInitialData[] = "media_router.ui.setInitialData"; 74 const char kSetInitialData[] = "media_router.ui.setInitialData";
68 const char kOnCreateRouteResponseReceived[] = 75 const char kOnCreateRouteResponseReceived[] =
69 "media_router.ui.onCreateRouteResponseReceived"; 76 "media_router.ui.onCreateRouteResponseReceived";
77 const char kOnRouteControllerInvalidated[] =
78 "media_router.ui.onRouteControllerInvalidated";
70 const char kReceiveSearchResult[] = "media_router.ui.receiveSearchResult"; 79 const char kReceiveSearchResult[] = "media_router.ui.receiveSearchResult";
71 const char kSetFirstRunFlowData[] = "media_router.ui.setFirstRunFlowData"; 80 const char kSetFirstRunFlowData[] = "media_router.ui.setFirstRunFlowData";
72 const char kSetIssue[] = "media_router.ui.setIssue"; 81 const char kSetIssue[] = "media_router.ui.setIssue";
73 const char kSetSinkListAndIdentity[] = "media_router.ui.setSinkListAndIdentity"; 82 const char kSetSinkListAndIdentity[] = "media_router.ui.setSinkListAndIdentity";
74 const char kSetRouteList[] = "media_router.ui.setRouteList"; 83 const char kSetRouteList[] = "media_router.ui.setRouteList";
75 const char kSetCastModeList[] = "media_router.ui.setCastModeList"; 84 const char kSetCastModeList[] = "media_router.ui.setCastModeList";
76 const char kUpdateMaxHeight[] = "media_router.ui.updateMaxHeight"; 85 const char kUpdateMaxHeight[] = "media_router.ui.updateMaxHeight";
86 const char kUpdateRouteStatus[] = "media_router.ui.updateRouteStatus";
77 const char kWindowOpen[] = "window.open"; 87 const char kWindowOpen[] = "window.open";
78 88
79 std::unique_ptr<base::DictionaryValue> SinksAndIdentityToValue( 89 std::unique_ptr<base::DictionaryValue> SinksAndIdentityToValue(
80 const std::vector<MediaSinkWithCastModes>& sinks, 90 const std::vector<MediaSinkWithCastModes>& sinks,
81 const AccountInfo& account_info) { 91 const AccountInfo& account_info) {
82 std::unique_ptr<base::DictionaryValue> sink_list_and_identity( 92 std::unique_ptr<base::DictionaryValue> sink_list_and_identity(
83 new base::DictionaryValue); 93 new base::DictionaryValue);
84 bool show_email = false; 94 bool show_email = false;
85 bool show_domain = false; 95 bool show_domain = false;
86 std::string user_domain; 96 std::string user_domain;
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
307 void MediaRouterWebUIMessageHandler::ClearIssue() { 317 void MediaRouterWebUIMessageHandler::ClearIssue() {
308 DVLOG(2) << "ClearIssue"; 318 DVLOG(2) << "ClearIssue";
309 web_ui()->CallJavascriptFunctionUnsafe(kSetIssue, base::Value()); 319 web_ui()->CallJavascriptFunctionUnsafe(kSetIssue, base::Value());
310 } 320 }
311 321
312 void MediaRouterWebUIMessageHandler::UpdateMaxDialogHeight(int height) { 322 void MediaRouterWebUIMessageHandler::UpdateMaxDialogHeight(int height) {
313 DVLOG(2) << "UpdateMaxDialogHeight"; 323 DVLOG(2) << "UpdateMaxDialogHeight";
314 web_ui()->CallJavascriptFunctionUnsafe(kUpdateMaxHeight, base::Value(height)); 324 web_ui()->CallJavascriptFunctionUnsafe(kUpdateMaxHeight, base::Value(height));
315 } 325 }
316 326
327 void MediaRouterWebUIMessageHandler::UpdateMediaRouteStatus(
328 const MediaStatus& status) {
329 base::DictionaryValue status_value;
330 status_value.SetString("title", status.title);
331 status_value.SetString("description", status.description);
332 status_value.SetBoolean("canPlayPause", status.can_play_pause);
333 status_value.SetBoolean("canMute", status.can_mute);
334 status_value.SetBoolean("canSetVolume", status.can_set_volume);
335 status_value.SetBoolean("canSeek", status.can_seek);
336 status_value.SetBoolean("isPaused", status.is_paused);
337 status_value.SetBoolean("isMuted", status.is_muted);
338 status_value.SetInteger("duration", status.duration.InSeconds());
339 status_value.SetInteger("currentTime", status.current_time.InSeconds());
340 status_value.SetDouble("volume", status.volume);
341 web_ui()->CallJavascriptFunctionUnsafe(kUpdateRouteStatus,
342 std::move(status_value));
mark a. foltz 2017/04/26 21:01:19 imcheng@: What did we conclude about migrating Web
imcheng 2017/04/26 21:48:39 We can migrate to Mojo, but just weren't sure how
343 }
344
345 void MediaRouterWebUIMessageHandler::OnRouteControllerInvalidated() {
346 web_ui()->CallJavascriptFunctionUnsafe(kOnRouteControllerInvalidated);
347 }
348
317 void MediaRouterWebUIMessageHandler::RegisterMessages() { 349 void MediaRouterWebUIMessageHandler::RegisterMessages() {
318 web_ui()->RegisterMessageCallback( 350 web_ui()->RegisterMessageCallback(
319 kRequestInitialData, 351 kRequestInitialData,
320 base::Bind(&MediaRouterWebUIMessageHandler::OnRequestInitialData, 352 base::Bind(&MediaRouterWebUIMessageHandler::OnRequestInitialData,
321 base::Unretained(this))); 353 base::Unretained(this)));
322 web_ui()->RegisterMessageCallback( 354 web_ui()->RegisterMessageCallback(
323 kCreateRoute, 355 kCreateRoute,
324 base::Bind(&MediaRouterWebUIMessageHandler::OnCreateRoute, 356 base::Bind(&MediaRouterWebUIMessageHandler::OnCreateRoute,
325 base::Unretained(this))); 357 base::Unretained(this)));
326 web_ui()->RegisterMessageCallback( 358 web_ui()->RegisterMessageCallback(
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
393 &MediaRouterWebUIMessageHandler::OnReportTimeToInitialActionClose, 425 &MediaRouterWebUIMessageHandler::OnReportTimeToInitialActionClose,
394 base::Unretained(this))); 426 base::Unretained(this)));
395 web_ui()->RegisterMessageCallback( 427 web_ui()->RegisterMessageCallback(
396 kSearchSinksAndCreateRoute, 428 kSearchSinksAndCreateRoute,
397 base::Bind(&MediaRouterWebUIMessageHandler::OnSearchSinksAndCreateRoute, 429 base::Bind(&MediaRouterWebUIMessageHandler::OnSearchSinksAndCreateRoute,
398 base::Unretained(this))); 430 base::Unretained(this)));
399 web_ui()->RegisterMessageCallback( 431 web_ui()->RegisterMessageCallback(
400 kOnInitialDataReceived, 432 kOnInitialDataReceived,
401 base::Bind(&MediaRouterWebUIMessageHandler::OnInitialDataReceived, 433 base::Bind(&MediaRouterWebUIMessageHandler::OnInitialDataReceived,
402 base::Unretained(this))); 434 base::Unretained(this)));
435 web_ui()->RegisterMessageCallback(
436 kOnRouteDetailsClosed,
437 base::Bind(&MediaRouterWebUIMessageHandler::OnRouteDetailsClosed,
438 base::Unretained(this)));
439 web_ui()->RegisterMessageCallback(
440 kOnRouteDetailsOpened,
441 base::Bind(&MediaRouterWebUIMessageHandler::OnRouteDetailsOpened,
442 base::Unretained(this)));
443 web_ui()->RegisterMessageCallback(
444 kPauseRoute, base::Bind(&MediaRouterWebUIMessageHandler::OnPauseRoute,
445 base::Unretained(this)));
446 web_ui()->RegisterMessageCallback(
447 kPlayRoute, base::Bind(&MediaRouterWebUIMessageHandler::OnPlayRoute,
448 base::Unretained(this)));
449 web_ui()->RegisterMessageCallback(
450 kSeekRoute, base::Bind(&MediaRouterWebUIMessageHandler::OnSeekRoute,
451 base::Unretained(this)));
452 web_ui()->RegisterMessageCallback(
453 kSetRouteMute, base::Bind(&MediaRouterWebUIMessageHandler::OnSetRouteMute,
454 base::Unretained(this)));
455 web_ui()->RegisterMessageCallback(
456 kSetRouteVolume,
457 base::Bind(&MediaRouterWebUIMessageHandler::OnSetRouteVolume,
458 base::Unretained(this)));
403 } 459 }
404 460
405 void MediaRouterWebUIMessageHandler::OnRequestInitialData( 461 void MediaRouterWebUIMessageHandler::OnRequestInitialData(
406 const base::ListValue* args) { 462 const base::ListValue* args) {
407 DVLOG(1) << "OnRequestInitialData"; 463 DVLOG(1) << "OnRequestInitialData";
408 media_router_ui_->OnUIInitiallyLoaded(); 464 media_router_ui_->OnUIInitiallyLoaded();
409 base::DictionaryValue initial_data; 465 base::DictionaryValue initial_data;
410 466
411 // "No Cast devices found?" Chromecast help center page. 467 // "No Cast devices found?" Chromecast help center page.
412 initial_data.SetString("deviceMissingUrl", 468 initial_data.SetString("deviceMissingUrl",
(...skipping 14 matching lines...) Expand all
427 initial_data.Set("castModes", std::move(cast_modes_list)); 483 initial_data.Set("castModes", std::move(cast_modes_list));
428 484
429 // If the cast mode last chosen for the current origin is tab mirroring, 485 // If the cast mode last chosen for the current origin is tab mirroring,
430 // that should be the cast mode initially selected in the dialog. Otherwise 486 // that should be the cast mode initially selected in the dialog. Otherwise
431 // the initial cast mode should be chosen automatically by the dialog. 487 // the initial cast mode should be chosen automatically by the dialog.
432 bool use_tab_mirroring = 488 bool use_tab_mirroring =
433 base::ContainsKey(cast_modes, MediaCastMode::TAB_MIRROR) && 489 base::ContainsKey(cast_modes, MediaCastMode::TAB_MIRROR) &&
434 media_router_ui_->UserSelectedTabMirroringForCurrentOrigin(); 490 media_router_ui_->UserSelectedTabMirroringForCurrentOrigin();
435 initial_data.SetBoolean("useTabMirroring", use_tab_mirroring); 491 initial_data.SetBoolean("useTabMirroring", use_tab_mirroring);
436 492
493 initial_data.SetBoolean(
494 "useNewRouteControls",
495 base::FeatureList::IsEnabled(features::kMediaRouterUIRouteController));
496
437 web_ui()->CallJavascriptFunctionUnsafe(kSetInitialData, initial_data); 497 web_ui()->CallJavascriptFunctionUnsafe(kSetInitialData, initial_data);
438 media_router_ui_->UIInitialized(); 498 media_router_ui_->UIInitialized();
439 } 499 }
440 500
441 void MediaRouterWebUIMessageHandler::OnCreateRoute( 501 void MediaRouterWebUIMessageHandler::OnCreateRoute(
442 const base::ListValue* args) { 502 const base::ListValue* args) {
443 DVLOG(1) << "OnCreateRoute"; 503 DVLOG(1) << "OnCreateRoute";
444 const base::DictionaryValue* args_dict = nullptr; 504 const base::DictionaryValue* args_dict = nullptr;
445 std::string sink_id; 505 std::string sink_id;
446 int cast_mode_num = -1; 506 int cast_mode_num = -1;
(...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after
782 static_cast<MediaCastMode>(cast_mode_num)); 842 static_cast<MediaCastMode>(cast_mode_num));
783 } 843 }
784 844
785 void MediaRouterWebUIMessageHandler::OnInitialDataReceived( 845 void MediaRouterWebUIMessageHandler::OnInitialDataReceived(
786 const base::ListValue* args) { 846 const base::ListValue* args) {
787 DVLOG(1) << "OnInitialDataReceived"; 847 DVLOG(1) << "OnInitialDataReceived";
788 media_router_ui_->OnUIInitialDataReceived(); 848 media_router_ui_->OnUIInitialDataReceived();
789 MaybeUpdateFirstRunFlowData(); 849 MaybeUpdateFirstRunFlowData();
790 } 850 }
791 851
852 void MediaRouterWebUIMessageHandler::OnRouteDetailsClosed(
853 const base::ListValue* args) {
854 media_router_ui_->OnUIDetailsViewClosed();
855 }
856
857 void MediaRouterWebUIMessageHandler::OnRouteDetailsOpened(
858 const base::ListValue* args) {
859 const base::DictionaryValue* args_dict = nullptr;
860 std::string route_id;
861 if (!args->GetDictionary(0, &args_dict) ||
862 !args_dict->GetString("routeId", &route_id)) {
863 DVLOG(1) << "Unable to extract media route ID";
864 return;
865 }
866 media_router_ui_->OnUIDetailsViewOpened(route_id);
867 }
868
869 void MediaRouterWebUIMessageHandler::OnPauseRoute(const base::ListValue* args) {
870 media_router_ui_->PauseRoute();
871 }
872
873 void MediaRouterWebUIMessageHandler::OnPlayRoute(const base::ListValue* args) {
874 media_router_ui_->PlayRoute();
875 }
876
877 void MediaRouterWebUIMessageHandler::OnSeekRoute(const base::ListValue* args) {
878 const base::DictionaryValue* args_dict = nullptr;
879 int time;
880 if (!args->GetDictionary(0, &args_dict) ||
881 !args_dict->GetInteger("time", &time)) {
882 DVLOG(1) << "Unable to extract time";
883 return;
884 }
885 media_router_ui_->SeekRoute(base::TimeDelta::FromSeconds(time));
886 }
887
888 void MediaRouterWebUIMessageHandler::OnSetRouteMute(
889 const base::ListValue* args) {
890 const base::DictionaryValue* args_dict = nullptr;
891 bool mute;
892 if (!args->GetDictionary(0, &args_dict) ||
893 !args_dict->GetBoolean("mute", &mute)) {
894 DVLOG(1) << "Unable to extract mute";
895 return;
896 }
897 media_router_ui_->SetRouteMute(mute);
898 }
899
900 void MediaRouterWebUIMessageHandler::OnSetRouteVolume(
901 const base::ListValue* args) {
902 const base::DictionaryValue* args_dict = nullptr;
903 double volume;
904 if (!args->GetDictionary(0, &args_dict) ||
905 !args_dict->GetDouble("volume", &volume)) {
906 DVLOG(1) << "Unable to extract volume";
907 return;
908 }
909 media_router_ui_->SetRouteVolume(volume);
910 }
911
792 bool MediaRouterWebUIMessageHandler::ActOnIssueType( 912 bool MediaRouterWebUIMessageHandler::ActOnIssueType(
793 IssueInfo::Action action_type, 913 IssueInfo::Action action_type,
794 const base::DictionaryValue* args) { 914 const base::DictionaryValue* args) {
795 if (action_type == IssueInfo::Action::LEARN_MORE) { 915 if (action_type == IssueInfo::Action::LEARN_MORE) {
796 std::string learn_more_url = GetLearnMoreUrl(args); 916 std::string learn_more_url = GetLearnMoreUrl(args);
797 if (learn_more_url.empty()) 917 if (learn_more_url.empty())
798 return false; 918 return false;
799 std::unique_ptr<base::ListValue> open_args(new base::ListValue); 919 std::unique_ptr<base::ListValue> open_args(new base::ListValue);
800 open_args->AppendString(learn_more_url); 920 open_args->AppendString(learn_more_url);
801 web_ui()->CallJavascriptFunctionUnsafe(kWindowOpen, *open_args); 921 web_ui()->CallJavascriptFunctionUnsafe(kWindowOpen, *open_args);
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
894 } 1014 }
895 1015
896 return value; 1016 return value;
897 } 1017 }
898 1018
899 void MediaRouterWebUIMessageHandler::SetWebUIForTest(content::WebUI* web_ui) { 1019 void MediaRouterWebUIMessageHandler::SetWebUIForTest(content::WebUI* web_ui) {
900 set_web_ui(web_ui); 1020 set_web_ui(web_ui);
901 } 1021 }
902 1022
903 } // namespace media_router 1023 } // namespace media_router
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698