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

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: Rebase 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";
66 const char kOnRouteDetailsOpened[] = "onRouteDetailsOpened";
67 const char kPauseRoute[] = "pauseRoute";
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));
343 }
344
345 void MediaRouterWebUIMessageHandler::OnRouteControllerInvalidated() {
346 web_ui()->CallJavascriptFunctionUnsafe(kOnRouteControllerInvalidated,
imcheng 2017/04/22 00:22:51 Would this be called as a result of abnormal termi
imcheng 2017/04/22 00:22:51 Can you call the 1-arg version of CallJavascriptFu
takumif 2017/04/24 20:59:23 Acknowledged.
takumif 2017/04/24 20:59:23 Done.
347 base::Value());
348 }
349
317 void MediaRouterWebUIMessageHandler::RegisterMessages() { 350 void MediaRouterWebUIMessageHandler::RegisterMessages() {
318 web_ui()->RegisterMessageCallback( 351 web_ui()->RegisterMessageCallback(
319 kRequestInitialData, 352 kRequestInitialData,
320 base::Bind(&MediaRouterWebUIMessageHandler::OnRequestInitialData, 353 base::Bind(&MediaRouterWebUIMessageHandler::OnRequestInitialData,
321 base::Unretained(this))); 354 base::Unretained(this)));
322 web_ui()->RegisterMessageCallback( 355 web_ui()->RegisterMessageCallback(
323 kCreateRoute, 356 kCreateRoute,
324 base::Bind(&MediaRouterWebUIMessageHandler::OnCreateRoute, 357 base::Bind(&MediaRouterWebUIMessageHandler::OnCreateRoute,
325 base::Unretained(this))); 358 base::Unretained(this)));
326 web_ui()->RegisterMessageCallback( 359 web_ui()->RegisterMessageCallback(
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
393 &MediaRouterWebUIMessageHandler::OnReportTimeToInitialActionClose, 426 &MediaRouterWebUIMessageHandler::OnReportTimeToInitialActionClose,
394 base::Unretained(this))); 427 base::Unretained(this)));
395 web_ui()->RegisterMessageCallback( 428 web_ui()->RegisterMessageCallback(
396 kSearchSinksAndCreateRoute, 429 kSearchSinksAndCreateRoute,
397 base::Bind(&MediaRouterWebUIMessageHandler::OnSearchSinksAndCreateRoute, 430 base::Bind(&MediaRouterWebUIMessageHandler::OnSearchSinksAndCreateRoute,
398 base::Unretained(this))); 431 base::Unretained(this)));
399 web_ui()->RegisterMessageCallback( 432 web_ui()->RegisterMessageCallback(
400 kOnInitialDataReceived, 433 kOnInitialDataReceived,
401 base::Bind(&MediaRouterWebUIMessageHandler::OnInitialDataReceived, 434 base::Bind(&MediaRouterWebUIMessageHandler::OnInitialDataReceived,
402 base::Unretained(this))); 435 base::Unretained(this)));
436 web_ui()->RegisterMessageCallback(
437 kOnRouteDetailsClosed,
438 base::Bind(&MediaRouterWebUIMessageHandler::OnRouteDetailsClosed,
439 base::Unretained(this)));
440 web_ui()->RegisterMessageCallback(
441 kOnRouteDetailsOpened,
442 base::Bind(&MediaRouterWebUIMessageHandler::OnRouteDetailsOpened,
443 base::Unretained(this)));
444 web_ui()->RegisterMessageCallback(
445 kPauseRoute, base::Bind(&MediaRouterWebUIMessageHandler::OnPauseRoute,
446 base::Unretained(this)));
447 web_ui()->RegisterMessageCallback(
448 kPlayRoute, base::Bind(&MediaRouterWebUIMessageHandler::OnPlayRoute,
449 base::Unretained(this)));
450 web_ui()->RegisterMessageCallback(
451 kSeekRoute, base::Bind(&MediaRouterWebUIMessageHandler::OnSeekRoute,
452 base::Unretained(this)));
453 web_ui()->RegisterMessageCallback(
454 kSetRouteMute, base::Bind(&MediaRouterWebUIMessageHandler::OnSetRouteMute,
455 base::Unretained(this)));
456 web_ui()->RegisterMessageCallback(
457 kSetRouteVolume,
458 base::Bind(&MediaRouterWebUIMessageHandler::OnSetRouteVolume,
459 base::Unretained(this)));
403 } 460 }
404 461
405 void MediaRouterWebUIMessageHandler::OnRequestInitialData( 462 void MediaRouterWebUIMessageHandler::OnRequestInitialData(
406 const base::ListValue* args) { 463 const base::ListValue* args) {
407 DVLOG(1) << "OnRequestInitialData"; 464 DVLOG(1) << "OnRequestInitialData";
408 media_router_ui_->OnUIInitiallyLoaded(); 465 media_router_ui_->OnUIInitiallyLoaded();
409 base::DictionaryValue initial_data; 466 base::DictionaryValue initial_data;
410 467
411 // "No Cast devices found?" Chromecast help center page. 468 // "No Cast devices found?" Chromecast help center page.
412 initial_data.SetString("deviceMissingUrl", 469 initial_data.SetString("deviceMissingUrl",
(...skipping 14 matching lines...) Expand all
427 initial_data.Set("castModes", std::move(cast_modes_list)); 484 initial_data.Set("castModes", std::move(cast_modes_list));
428 485
429 // If the cast mode last chosen for the current origin is tab mirroring, 486 // 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 487 // that should be the cast mode initially selected in the dialog. Otherwise
431 // the initial cast mode should be chosen automatically by the dialog. 488 // the initial cast mode should be chosen automatically by the dialog.
432 bool use_tab_mirroring = 489 bool use_tab_mirroring =
433 base::ContainsKey(cast_modes, MediaCastMode::TAB_MIRROR) && 490 base::ContainsKey(cast_modes, MediaCastMode::TAB_MIRROR) &&
434 media_router_ui_->UserSelectedTabMirroringForCurrentOrigin(); 491 media_router_ui_->UserSelectedTabMirroringForCurrentOrigin();
435 initial_data.SetBoolean("useTabMirroring", use_tab_mirroring); 492 initial_data.SetBoolean("useTabMirroring", use_tab_mirroring);
436 493
494 initial_data.SetBoolean(
495 "useNewRouteControls",
496 base::FeatureList::IsEnabled(features::kMediaRouterNewRouteController));
497
437 web_ui()->CallJavascriptFunctionUnsafe(kSetInitialData, initial_data); 498 web_ui()->CallJavascriptFunctionUnsafe(kSetInitialData, initial_data);
438 media_router_ui_->UIInitialized(); 499 media_router_ui_->UIInitialized();
439 } 500 }
440 501
441 void MediaRouterWebUIMessageHandler::OnCreateRoute( 502 void MediaRouterWebUIMessageHandler::OnCreateRoute(
442 const base::ListValue* args) { 503 const base::ListValue* args) {
443 DVLOG(1) << "OnCreateRoute"; 504 DVLOG(1) << "OnCreateRoute";
444 const base::DictionaryValue* args_dict = nullptr; 505 const base::DictionaryValue* args_dict = nullptr;
445 std::string sink_id; 506 std::string sink_id;
446 int cast_mode_num = -1; 507 int cast_mode_num = -1;
(...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after
782 static_cast<MediaCastMode>(cast_mode_num)); 843 static_cast<MediaCastMode>(cast_mode_num));
783 } 844 }
784 845
785 void MediaRouterWebUIMessageHandler::OnInitialDataReceived( 846 void MediaRouterWebUIMessageHandler::OnInitialDataReceived(
786 const base::ListValue* args) { 847 const base::ListValue* args) {
787 DVLOG(1) << "OnInitialDataReceived"; 848 DVLOG(1) << "OnInitialDataReceived";
788 media_router_ui_->OnUIInitialDataReceived(); 849 media_router_ui_->OnUIInitialDataReceived();
789 MaybeUpdateFirstRunFlowData(); 850 MaybeUpdateFirstRunFlowData();
790 } 851 }
791 852
853 void MediaRouterWebUIMessageHandler::OnRouteDetailsClosed(
854 const base::ListValue* args) {
855 media_router_ui_->OnUIDetailsViewClosed();
856 }
857
858 void MediaRouterWebUIMessageHandler::OnRouteDetailsOpened(
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_->OnUIDetailsViewOpened(route_id);
868 }
869
870 void MediaRouterWebUIMessageHandler::OnPauseRoute(const base::ListValue* args) {
871 media_router_ui_->PauseRoute();
872 }
873
874 void MediaRouterWebUIMessageHandler::OnPlayRoute(const base::ListValue* args) {
875 media_router_ui_->PlayRoute();
876 }
877
878 void MediaRouterWebUIMessageHandler::OnSeekRoute(const base::ListValue* args) {
879 const base::DictionaryValue* args_dict = nullptr;
880 int time;
881 if (!args->GetDictionary(0, &args_dict) ||
882 !args_dict->GetInteger("time", &time)) {
883 DVLOG(1) << "Unable to extract time";
884 return;
885 }
886 media_router_ui_->SeekRoute(base::TimeDelta::FromSeconds(time));
887 }
888
889 void MediaRouterWebUIMessageHandler::OnSetRouteMute(
890 const base::ListValue* args) {
891 const base::DictionaryValue* args_dict = nullptr;
892 bool mute;
893 if (!args->GetDictionary(0, &args_dict) ||
894 !args_dict->GetBoolean("mute", &mute)) {
895 DVLOG(1) << "Unable to extract mute";
896 return;
897 }
898 media_router_ui_->SetRouteMute(mute);
899 }
900
901 void MediaRouterWebUIMessageHandler::OnSetRouteVolume(
902 const base::ListValue* args) {
903 const base::DictionaryValue* args_dict = nullptr;
904 double volume;
905 if (!args->GetDictionary(0, &args_dict) ||
906 !args_dict->GetDouble("volume", &volume)) {
907 DVLOG(1) << "Unable to extract volume";
908 return;
909 }
910 media_router_ui_->SetRouteVolume(volume);
911 }
912
792 bool MediaRouterWebUIMessageHandler::ActOnIssueType( 913 bool MediaRouterWebUIMessageHandler::ActOnIssueType(
793 IssueInfo::Action action_type, 914 IssueInfo::Action action_type,
794 const base::DictionaryValue* args) { 915 const base::DictionaryValue* args) {
795 if (action_type == IssueInfo::Action::LEARN_MORE) { 916 if (action_type == IssueInfo::Action::LEARN_MORE) {
796 std::string learn_more_url = GetLearnMoreUrl(args); 917 std::string learn_more_url = GetLearnMoreUrl(args);
797 if (learn_more_url.empty()) 918 if (learn_more_url.empty())
798 return false; 919 return false;
799 std::unique_ptr<base::ListValue> open_args(new base::ListValue); 920 std::unique_ptr<base::ListValue> open_args(new base::ListValue);
800 open_args->AppendString(learn_more_url); 921 open_args->AppendString(learn_more_url);
801 web_ui()->CallJavascriptFunctionUnsafe(kWindowOpen, *open_args); 922 web_ui()->CallJavascriptFunctionUnsafe(kWindowOpen, *open_args);
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
894 } 1015 }
895 1016
896 return value; 1017 return value;
897 } 1018 }
898 1019
899 void MediaRouterWebUIMessageHandler::SetWebUIForTest(content::WebUI* web_ui) { 1020 void MediaRouterWebUIMessageHandler::SetWebUIForTest(content::WebUI* web_ui) {
900 set_web_ui(web_ui); 1021 set_web_ui(web_ui);
901 } 1022 }
902 1023
903 } // namespace media_router 1024 } // namespace media_router
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698