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

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

Issue 2862513002: Revert of [Media Router] Custom Controls 3 - add plumbing through MRUI and MRWebUIMessageHandler (Closed)
Patch Set: Created 3 years, 7 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/chrome_features.h" 24 #include "chrome/common/media_router/issue.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 kOnMediaControllerAvailable[] = "onMediaControllerAvailable";
66 const char kOnMediaControllerClosed[] = "onMediaControllerClosed";
67 const char kPauseCurrentMedia[] = "pauseCurrentMedia";
68 const char kPlayCurrentMedia[] = "playCurrentMedia";
69 const char kSeekCurrentMedia[] = "seekCurrentMedia";
70 const char kSetCurrentMediaMute[] = "setCurrentMediaMute";
71 const char kSetCurrentMediaVolume[] = "setCurrentMediaVolume";
72 65
73 // JS function names. 66 // JS function names.
74 const char kSetInitialData[] = "media_router.ui.setInitialData"; 67 const char kSetInitialData[] = "media_router.ui.setInitialData";
75 const char kOnCreateRouteResponseReceived[] = 68 const char kOnCreateRouteResponseReceived[] =
76 "media_router.ui.onCreateRouteResponseReceived"; 69 "media_router.ui.onCreateRouteResponseReceived";
77 const char kOnRouteControllerInvalidated[] =
78 "media_router.ui.onRouteControllerInvalidated";
79 const char kReceiveSearchResult[] = "media_router.ui.receiveSearchResult"; 70 const char kReceiveSearchResult[] = "media_router.ui.receiveSearchResult";
80 const char kSetFirstRunFlowData[] = "media_router.ui.setFirstRunFlowData"; 71 const char kSetFirstRunFlowData[] = "media_router.ui.setFirstRunFlowData";
81 const char kSetIssue[] = "media_router.ui.setIssue"; 72 const char kSetIssue[] = "media_router.ui.setIssue";
82 const char kSetSinkListAndIdentity[] = "media_router.ui.setSinkListAndIdentity"; 73 const char kSetSinkListAndIdentity[] = "media_router.ui.setSinkListAndIdentity";
83 const char kSetRouteList[] = "media_router.ui.setRouteList"; 74 const char kSetRouteList[] = "media_router.ui.setRouteList";
84 const char kSetCastModeList[] = "media_router.ui.setCastModeList"; 75 const char kSetCastModeList[] = "media_router.ui.setCastModeList";
85 const char kUpdateMaxHeight[] = "media_router.ui.updateMaxHeight"; 76 const char kUpdateMaxHeight[] = "media_router.ui.updateMaxHeight";
86 const char kUpdateRouteStatus[] = "media_router.ui.updateRouteStatus";
87 const char kWindowOpen[] = "window.open"; 77 const char kWindowOpen[] = "window.open";
88 78
89 std::unique_ptr<base::DictionaryValue> SinksAndIdentityToValue( 79 std::unique_ptr<base::DictionaryValue> SinksAndIdentityToValue(
90 const std::vector<MediaSinkWithCastModes>& sinks, 80 const std::vector<MediaSinkWithCastModes>& sinks,
91 const AccountInfo& account_info) { 81 const AccountInfo& account_info) {
92 std::unique_ptr<base::DictionaryValue> sink_list_and_identity( 82 std::unique_ptr<base::DictionaryValue> sink_list_and_identity(
93 new base::DictionaryValue); 83 new base::DictionaryValue);
94 bool show_email = false; 84 bool show_email = false;
95 bool show_domain = false; 85 bool show_domain = false;
96 std::string user_domain; 86 std::string user_domain;
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
317 void MediaRouterWebUIMessageHandler::ClearIssue() { 307 void MediaRouterWebUIMessageHandler::ClearIssue() {
318 DVLOG(2) << "ClearIssue"; 308 DVLOG(2) << "ClearIssue";
319 web_ui()->CallJavascriptFunctionUnsafe(kSetIssue, base::Value()); 309 web_ui()->CallJavascriptFunctionUnsafe(kSetIssue, base::Value());
320 } 310 }
321 311
322 void MediaRouterWebUIMessageHandler::UpdateMaxDialogHeight(int height) { 312 void MediaRouterWebUIMessageHandler::UpdateMaxDialogHeight(int height) {
323 DVLOG(2) << "UpdateMaxDialogHeight"; 313 DVLOG(2) << "UpdateMaxDialogHeight";
324 web_ui()->CallJavascriptFunctionUnsafe(kUpdateMaxHeight, base::Value(height)); 314 web_ui()->CallJavascriptFunctionUnsafe(kUpdateMaxHeight, base::Value(height));
325 } 315 }
326 316
327 void MediaRouterWebUIMessageHandler::UpdateMediaRouteStatus(
328 const MediaStatus& status) {
329 current_media_status_ = base::make_optional<MediaStatus>(MediaStatus(status));
330
331 base::DictionaryValue status_value;
332 status_value.SetString("title", status.title);
333 status_value.SetString("description", status.description);
334 status_value.SetBoolean("canPlayPause", status.can_play_pause);
335 status_value.SetBoolean("canMute", status.can_mute);
336 status_value.SetBoolean("canSetVolume", status.can_set_volume);
337 status_value.SetBoolean("canSeek", status.can_seek);
338 status_value.SetBoolean("isPaused", status.is_paused);
339 status_value.SetBoolean("isMuted", status.is_muted);
340 status_value.SetInteger("duration", status.duration.InSeconds());
341 status_value.SetInteger("currentTime", status.current_time.InSeconds());
342 status_value.SetDouble("volume", status.volume);
343 web_ui()->CallJavascriptFunctionUnsafe(kUpdateRouteStatus,
344 std::move(status_value));
345 }
346
347 void MediaRouterWebUIMessageHandler::OnRouteControllerInvalidated() {
348 web_ui()->CallJavascriptFunctionUnsafe(kOnRouteControllerInvalidated);
349 }
350
351 void MediaRouterWebUIMessageHandler::RegisterMessages() { 317 void MediaRouterWebUIMessageHandler::RegisterMessages() {
352 web_ui()->RegisterMessageCallback( 318 web_ui()->RegisterMessageCallback(
353 kRequestInitialData, 319 kRequestInitialData,
354 base::Bind(&MediaRouterWebUIMessageHandler::OnRequestInitialData, 320 base::Bind(&MediaRouterWebUIMessageHandler::OnRequestInitialData,
355 base::Unretained(this))); 321 base::Unretained(this)));
356 web_ui()->RegisterMessageCallback( 322 web_ui()->RegisterMessageCallback(
357 kCreateRoute, 323 kCreateRoute,
358 base::Bind(&MediaRouterWebUIMessageHandler::OnCreateRoute, 324 base::Bind(&MediaRouterWebUIMessageHandler::OnCreateRoute,
359 base::Unretained(this))); 325 base::Unretained(this)));
360 web_ui()->RegisterMessageCallback( 326 web_ui()->RegisterMessageCallback(
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
427 &MediaRouterWebUIMessageHandler::OnReportTimeToInitialActionClose, 393 &MediaRouterWebUIMessageHandler::OnReportTimeToInitialActionClose,
428 base::Unretained(this))); 394 base::Unretained(this)));
429 web_ui()->RegisterMessageCallback( 395 web_ui()->RegisterMessageCallback(
430 kSearchSinksAndCreateRoute, 396 kSearchSinksAndCreateRoute,
431 base::Bind(&MediaRouterWebUIMessageHandler::OnSearchSinksAndCreateRoute, 397 base::Bind(&MediaRouterWebUIMessageHandler::OnSearchSinksAndCreateRoute,
432 base::Unretained(this))); 398 base::Unretained(this)));
433 web_ui()->RegisterMessageCallback( 399 web_ui()->RegisterMessageCallback(
434 kOnInitialDataReceived, 400 kOnInitialDataReceived,
435 base::Bind(&MediaRouterWebUIMessageHandler::OnInitialDataReceived, 401 base::Bind(&MediaRouterWebUIMessageHandler::OnInitialDataReceived,
436 base::Unretained(this))); 402 base::Unretained(this)));
437 web_ui()->RegisterMessageCallback(
438 kOnMediaControllerAvailable,
439 base::Bind(&MediaRouterWebUIMessageHandler::OnMediaControllerAvailable,
440 base::Unretained(this)));
441 web_ui()->RegisterMessageCallback(
442 kOnMediaControllerClosed,
443 base::Bind(&MediaRouterWebUIMessageHandler::OnMediaControllerClosed,
444 base::Unretained(this)));
445 web_ui()->RegisterMessageCallback(
446 kPauseCurrentMedia,
447 base::Bind(&MediaRouterWebUIMessageHandler::OnPauseCurrentMedia,
448 base::Unretained(this)));
449 web_ui()->RegisterMessageCallback(
450 kPlayCurrentMedia,
451 base::Bind(&MediaRouterWebUIMessageHandler::OnPlayCurrentMedia,
452 base::Unretained(this)));
453 web_ui()->RegisterMessageCallback(
454 kSeekCurrentMedia,
455 base::Bind(&MediaRouterWebUIMessageHandler::OnSeekCurrentMedia,
456 base::Unretained(this)));
457 web_ui()->RegisterMessageCallback(
458 kSetCurrentMediaMute,
459 base::Bind(&MediaRouterWebUIMessageHandler::OnSetCurrentMediaMute,
460 base::Unretained(this)));
461 web_ui()->RegisterMessageCallback(
462 kSetCurrentMediaVolume,
463 base::Bind(&MediaRouterWebUIMessageHandler::OnSetCurrentMediaVolume,
464 base::Unretained(this)));
465 } 403 }
466 404
467 void MediaRouterWebUIMessageHandler::OnRequestInitialData( 405 void MediaRouterWebUIMessageHandler::OnRequestInitialData(
468 const base::ListValue* args) { 406 const base::ListValue* args) {
469 DVLOG(1) << "OnRequestInitialData"; 407 DVLOG(1) << "OnRequestInitialData";
470 media_router_ui_->OnUIInitiallyLoaded(); 408 media_router_ui_->OnUIInitiallyLoaded();
471 base::DictionaryValue initial_data; 409 base::DictionaryValue initial_data;
472 410
473 // "No Cast devices found?" Chromecast help center page. 411 // "No Cast devices found?" Chromecast help center page.
474 initial_data.SetString("deviceMissingUrl", 412 initial_data.SetString("deviceMissingUrl",
(...skipping 14 matching lines...) Expand all
489 initial_data.Set("castModes", std::move(cast_modes_list)); 427 initial_data.Set("castModes", std::move(cast_modes_list));
490 428
491 // If the cast mode last chosen for the current origin is tab mirroring, 429 // If the cast mode last chosen for the current origin is tab mirroring,
492 // that should be the cast mode initially selected in the dialog. Otherwise 430 // that should be the cast mode initially selected in the dialog. Otherwise
493 // the initial cast mode should be chosen automatically by the dialog. 431 // the initial cast mode should be chosen automatically by the dialog.
494 bool use_tab_mirroring = 432 bool use_tab_mirroring =
495 base::ContainsKey(cast_modes, MediaCastMode::TAB_MIRROR) && 433 base::ContainsKey(cast_modes, MediaCastMode::TAB_MIRROR) &&
496 media_router_ui_->UserSelectedTabMirroringForCurrentOrigin(); 434 media_router_ui_->UserSelectedTabMirroringForCurrentOrigin();
497 initial_data.SetBoolean("useTabMirroring", use_tab_mirroring); 435 initial_data.SetBoolean("useTabMirroring", use_tab_mirroring);
498 436
499 initial_data.SetBoolean(
500 "useNewRouteControls",
501 base::FeatureList::IsEnabled(features::kMediaRouterUIRouteController));
502
503 web_ui()->CallJavascriptFunctionUnsafe(kSetInitialData, initial_data); 437 web_ui()->CallJavascriptFunctionUnsafe(kSetInitialData, initial_data);
504 media_router_ui_->UIInitialized(); 438 media_router_ui_->UIInitialized();
505 } 439 }
506 440
507 void MediaRouterWebUIMessageHandler::OnCreateRoute( 441 void MediaRouterWebUIMessageHandler::OnCreateRoute(
508 const base::ListValue* args) { 442 const base::ListValue* args) {
509 DVLOG(1) << "OnCreateRoute"; 443 DVLOG(1) << "OnCreateRoute";
510 const base::DictionaryValue* args_dict = nullptr; 444 const base::DictionaryValue* args_dict = nullptr;
511 std::string sink_id; 445 std::string sink_id;
512 int cast_mode_num = -1; 446 int cast_mode_num = -1;
(...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after
848 static_cast<MediaCastMode>(cast_mode_num)); 782 static_cast<MediaCastMode>(cast_mode_num));
849 } 783 }
850 784
851 void MediaRouterWebUIMessageHandler::OnInitialDataReceived( 785 void MediaRouterWebUIMessageHandler::OnInitialDataReceived(
852 const base::ListValue* args) { 786 const base::ListValue* args) {
853 DVLOG(1) << "OnInitialDataReceived"; 787 DVLOG(1) << "OnInitialDataReceived";
854 media_router_ui_->OnUIInitialDataReceived(); 788 media_router_ui_->OnUIInitialDataReceived();
855 MaybeUpdateFirstRunFlowData(); 789 MaybeUpdateFirstRunFlowData();
856 } 790 }
857 791
858 void MediaRouterWebUIMessageHandler::OnMediaControllerAvailable(
859 const base::ListValue* args) {
860 const base::DictionaryValue* args_dict = nullptr;
861 std::string route_id;
862 if (!args->GetDictionary(0, &args_dict) ||
863 !args_dict->GetString("routeId", &route_id)) {
864 DVLOG(1) << "Unable to extract media route ID";
865 return;
866 }
867 media_router_ui_->OnMediaControllerUIAvailable(route_id);
868 }
869
870 void MediaRouterWebUIMessageHandler::OnMediaControllerClosed(
871 const base::ListValue* args) {
872 current_media_status_.reset();
873 media_router_ui_->OnMediaControllerUIClosed();
874 }
875
876 void MediaRouterWebUIMessageHandler::OnPauseCurrentMedia(
877 const base::ListValue* args) {
878 const MediaRouteController* route_controller =
879 media_router_ui_->GetMediaRouteController();
880 if (route_controller)
881 route_controller->Pause();
882 }
883
884 void MediaRouterWebUIMessageHandler::OnPlayCurrentMedia(
885 const base::ListValue* args) {
886 const MediaRouteController* route_controller =
887 media_router_ui_->GetMediaRouteController();
888 if (route_controller)
889 route_controller->Play();
890 }
891
892 void MediaRouterWebUIMessageHandler::OnSeekCurrentMedia(
893 const base::ListValue* args) {
894 const base::DictionaryValue* args_dict = nullptr;
895 int time;
896 if (!args->GetDictionary(0, &args_dict) ||
897 !args_dict->GetInteger("time", &time)) {
898 DVLOG(1) << "Unable to extract time";
899 return;
900 }
901 base::TimeDelta time_delta = base::TimeDelta::FromSeconds(time);
902 const MediaRouteController* route_controller =
903 media_router_ui_->GetMediaRouteController();
904 if (route_controller && current_media_status_ &&
905 time_delta >= base::TimeDelta() &&
906 time_delta <= current_media_status_->duration) {
907 route_controller->Seek(time_delta);
908 }
909 }
910
911 void MediaRouterWebUIMessageHandler::OnSetCurrentMediaMute(
912 const base::ListValue* args) {
913 const base::DictionaryValue* args_dict = nullptr;
914 bool mute;
915 if (!args->GetDictionary(0, &args_dict) ||
916 !args_dict->GetBoolean("mute", &mute)) {
917 DVLOG(1) << "Unable to extract mute";
918 return;
919 }
920 const MediaRouteController* route_controller =
921 media_router_ui_->GetMediaRouteController();
922 if (route_controller)
923 route_controller->SetMute(mute);
924 }
925
926 void MediaRouterWebUIMessageHandler::OnSetCurrentMediaVolume(
927 const base::ListValue* args) {
928 const base::DictionaryValue* args_dict = nullptr;
929 double volume;
930 if (!args->GetDictionary(0, &args_dict) ||
931 !args_dict->GetDouble("volume", &volume)) {
932 DVLOG(1) << "Unable to extract volume";
933 return;
934 }
935 const MediaRouteController* route_controller =
936 media_router_ui_->GetMediaRouteController();
937 if (route_controller && volume >= 0 && volume <= 1)
938 route_controller->SetVolume(volume);
939 }
940
941 bool MediaRouterWebUIMessageHandler::ActOnIssueType( 792 bool MediaRouterWebUIMessageHandler::ActOnIssueType(
942 IssueInfo::Action action_type, 793 IssueInfo::Action action_type,
943 const base::DictionaryValue* args) { 794 const base::DictionaryValue* args) {
944 if (action_type == IssueInfo::Action::LEARN_MORE) { 795 if (action_type == IssueInfo::Action::LEARN_MORE) {
945 std::string learn_more_url = GetLearnMoreUrl(args); 796 std::string learn_more_url = GetLearnMoreUrl(args);
946 if (learn_more_url.empty()) 797 if (learn_more_url.empty())
947 return false; 798 return false;
948 std::unique_ptr<base::ListValue> open_args(new base::ListValue); 799 std::unique_ptr<base::ListValue> open_args(new base::ListValue);
949 open_args->AppendString(learn_more_url); 800 open_args->AppendString(learn_more_url);
950 web_ui()->CallJavascriptFunctionUnsafe(kWindowOpen, *open_args); 801 web_ui()->CallJavascriptFunctionUnsafe(kWindowOpen, *open_args);
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
1043 } 894 }
1044 895
1045 return value; 896 return value;
1046 } 897 }
1047 898
1048 void MediaRouterWebUIMessageHandler::SetWebUIForTest(content::WebUI* web_ui) { 899 void MediaRouterWebUIMessageHandler::SetWebUIForTest(content::WebUI* web_ui) {
1049 set_web_ui(web_ui); 900 set_web_ui(web_ui);
1050 } 901 }
1051 902
1052 } // namespace media_router 903 } // namespace media_router
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698