| Index: chrome/browser/ui/webui/media_router/media_router_webui_message_handler.cc
|
| diff --git a/chrome/browser/ui/webui/media_router/media_router_webui_message_handler.cc b/chrome/browser/ui/webui/media_router/media_router_webui_message_handler.cc
|
| index 1e22dd81652226a9da6b7aee4cf05b898a4ac8c9..9b537efe5ad534ea3a50c3094bbca51c94602648 100644
|
| --- a/chrome/browser/ui/webui/media_router/media_router_webui_message_handler.cc
|
| +++ b/chrome/browser/ui/webui/media_router/media_router_webui_message_handler.cc
|
| @@ -21,7 +21,7 @@
|
| #include "chrome/browser/sync/profile_sync_service_factory.h"
|
| #include "chrome/browser/ui/webui/media_router/media_cast_mode.h"
|
| #include "chrome/browser/ui/webui/media_router/media_router_ui.h"
|
| -#include "chrome/common/media_router/issue.h"
|
| +#include "chrome/common/chrome_features.h"
|
| #include "chrome/common/pref_names.h"
|
| #include "chrome/grit/generated_resources.h"
|
| #include "components/browser_sync/profile_sync_service.h"
|
| @@ -62,11 +62,20 @@ const char kReportTimeToClickSink[] = "reportTimeToClickSink";
|
| const char kReportTimeToInitialActionClose[] = "reportTimeToInitialActionClose";
|
| const char kSearchSinksAndCreateRoute[] = "searchSinksAndCreateRoute";
|
| const char kOnInitialDataReceived[] = "onInitialDataReceived";
|
| +const char kOnMediaControllerAvailable[] = "onMediaControllerAvailable";
|
| +const char kOnMediaControllerClosed[] = "onMediaControllerClosed";
|
| +const char kPauseCurrentMedia[] = "pauseCurrentMedia";
|
| +const char kPlayCurrentMedia[] = "playCurrentMedia";
|
| +const char kSeekCurrentMedia[] = "seekCurrentMedia";
|
| +const char kSetCurrentMediaMute[] = "setCurrentMediaMute";
|
| +const char kSetCurrentMediaVolume[] = "setCurrentMediaVolume";
|
|
|
| // JS function names.
|
| const char kSetInitialData[] = "media_router.ui.setInitialData";
|
| const char kOnCreateRouteResponseReceived[] =
|
| "media_router.ui.onCreateRouteResponseReceived";
|
| +const char kOnRouteControllerInvalidated[] =
|
| + "media_router.ui.onRouteControllerInvalidated";
|
| const char kReceiveSearchResult[] = "media_router.ui.receiveSearchResult";
|
| const char kSetFirstRunFlowData[] = "media_router.ui.setFirstRunFlowData";
|
| const char kSetIssue[] = "media_router.ui.setIssue";
|
| @@ -74,6 +83,7 @@ const char kSetSinkListAndIdentity[] = "media_router.ui.setSinkListAndIdentity";
|
| const char kSetRouteList[] = "media_router.ui.setRouteList";
|
| const char kSetCastModeList[] = "media_router.ui.setCastModeList";
|
| const char kUpdateMaxHeight[] = "media_router.ui.updateMaxHeight";
|
| +const char kUpdateRouteStatus[] = "media_router.ui.updateRouteStatus";
|
| const char kWindowOpen[] = "window.open";
|
|
|
| std::unique_ptr<base::DictionaryValue> SinksAndIdentityToValue(
|
| @@ -314,6 +324,30 @@ void MediaRouterWebUIMessageHandler::UpdateMaxDialogHeight(int height) {
|
| web_ui()->CallJavascriptFunctionUnsafe(kUpdateMaxHeight, base::Value(height));
|
| }
|
|
|
| +void MediaRouterWebUIMessageHandler::UpdateMediaRouteStatus(
|
| + const MediaStatus& status) {
|
| + current_media_status_ = base::make_optional<MediaStatus>(MediaStatus(status));
|
| +
|
| + base::DictionaryValue status_value;
|
| + status_value.SetString("title", status.title);
|
| + status_value.SetString("description", status.description);
|
| + status_value.SetBoolean("canPlayPause", status.can_play_pause);
|
| + status_value.SetBoolean("canMute", status.can_mute);
|
| + status_value.SetBoolean("canSetVolume", status.can_set_volume);
|
| + status_value.SetBoolean("canSeek", status.can_seek);
|
| + status_value.SetBoolean("isPaused", status.is_paused);
|
| + status_value.SetBoolean("isMuted", status.is_muted);
|
| + status_value.SetInteger("duration", status.duration.InSeconds());
|
| + status_value.SetInteger("currentTime", status.current_time.InSeconds());
|
| + status_value.SetDouble("volume", status.volume);
|
| + web_ui()->CallJavascriptFunctionUnsafe(kUpdateRouteStatus,
|
| + std::move(status_value));
|
| +}
|
| +
|
| +void MediaRouterWebUIMessageHandler::OnRouteControllerInvalidated() {
|
| + web_ui()->CallJavascriptFunctionUnsafe(kOnRouteControllerInvalidated);
|
| +}
|
| +
|
| void MediaRouterWebUIMessageHandler::RegisterMessages() {
|
| web_ui()->RegisterMessageCallback(
|
| kRequestInitialData,
|
| @@ -400,6 +434,34 @@ void MediaRouterWebUIMessageHandler::RegisterMessages() {
|
| kOnInitialDataReceived,
|
| base::Bind(&MediaRouterWebUIMessageHandler::OnInitialDataReceived,
|
| base::Unretained(this)));
|
| + web_ui()->RegisterMessageCallback(
|
| + kOnMediaControllerAvailable,
|
| + base::Bind(&MediaRouterWebUIMessageHandler::OnMediaControllerAvailable,
|
| + base::Unretained(this)));
|
| + web_ui()->RegisterMessageCallback(
|
| + kOnMediaControllerClosed,
|
| + base::Bind(&MediaRouterWebUIMessageHandler::OnMediaControllerClosed,
|
| + base::Unretained(this)));
|
| + web_ui()->RegisterMessageCallback(
|
| + kPauseCurrentMedia,
|
| + base::Bind(&MediaRouterWebUIMessageHandler::OnPauseCurrentMedia,
|
| + base::Unretained(this)));
|
| + web_ui()->RegisterMessageCallback(
|
| + kPlayCurrentMedia,
|
| + base::Bind(&MediaRouterWebUIMessageHandler::OnPlayCurrentMedia,
|
| + base::Unretained(this)));
|
| + web_ui()->RegisterMessageCallback(
|
| + kSeekCurrentMedia,
|
| + base::Bind(&MediaRouterWebUIMessageHandler::OnSeekCurrentMedia,
|
| + base::Unretained(this)));
|
| + web_ui()->RegisterMessageCallback(
|
| + kSetCurrentMediaMute,
|
| + base::Bind(&MediaRouterWebUIMessageHandler::OnSetCurrentMediaMute,
|
| + base::Unretained(this)));
|
| + web_ui()->RegisterMessageCallback(
|
| + kSetCurrentMediaVolume,
|
| + base::Bind(&MediaRouterWebUIMessageHandler::OnSetCurrentMediaVolume,
|
| + base::Unretained(this)));
|
| }
|
|
|
| void MediaRouterWebUIMessageHandler::OnRequestInitialData(
|
| @@ -434,6 +496,10 @@ void MediaRouterWebUIMessageHandler::OnRequestInitialData(
|
| media_router_ui_->UserSelectedTabMirroringForCurrentOrigin();
|
| initial_data.SetBoolean("useTabMirroring", use_tab_mirroring);
|
|
|
| + initial_data.SetBoolean(
|
| + "useNewRouteControls",
|
| + base::FeatureList::IsEnabled(features::kMediaRouterUIRouteController));
|
| +
|
| web_ui()->CallJavascriptFunctionUnsafe(kSetInitialData, initial_data);
|
| media_router_ui_->UIInitialized();
|
| }
|
| @@ -789,6 +855,89 @@ void MediaRouterWebUIMessageHandler::OnInitialDataReceived(
|
| MaybeUpdateFirstRunFlowData();
|
| }
|
|
|
| +void MediaRouterWebUIMessageHandler::OnMediaControllerAvailable(
|
| + const base::ListValue* args) {
|
| + const base::DictionaryValue* args_dict = nullptr;
|
| + std::string route_id;
|
| + if (!args->GetDictionary(0, &args_dict) ||
|
| + !args_dict->GetString("routeId", &route_id)) {
|
| + DVLOG(1) << "Unable to extract media route ID";
|
| + return;
|
| + }
|
| + media_router_ui_->OnMediaControllerUIAvailable(route_id);
|
| +}
|
| +
|
| +void MediaRouterWebUIMessageHandler::OnMediaControllerClosed(
|
| + const base::ListValue* args) {
|
| + current_media_status_.reset();
|
| + media_router_ui_->OnMediaControllerUIClosed();
|
| +}
|
| +
|
| +void MediaRouterWebUIMessageHandler::OnPauseCurrentMedia(
|
| + const base::ListValue* args) {
|
| + const MediaRouteController* route_controller =
|
| + media_router_ui_->GetMediaRouteController();
|
| + if (route_controller)
|
| + route_controller->Pause();
|
| +}
|
| +
|
| +void MediaRouterWebUIMessageHandler::OnPlayCurrentMedia(
|
| + const base::ListValue* args) {
|
| + const MediaRouteController* route_controller =
|
| + media_router_ui_->GetMediaRouteController();
|
| + if (route_controller)
|
| + route_controller->Play();
|
| +}
|
| +
|
| +void MediaRouterWebUIMessageHandler::OnSeekCurrentMedia(
|
| + const base::ListValue* args) {
|
| + const base::DictionaryValue* args_dict = nullptr;
|
| + int time;
|
| + if (!args->GetDictionary(0, &args_dict) ||
|
| + !args_dict->GetInteger("time", &time)) {
|
| + DVLOG(1) << "Unable to extract time";
|
| + return;
|
| + }
|
| + base::TimeDelta time_delta = base::TimeDelta::FromSeconds(time);
|
| + const MediaRouteController* route_controller =
|
| + media_router_ui_->GetMediaRouteController();
|
| + if (route_controller && current_media_status_ &&
|
| + time_delta >= base::TimeDelta() &&
|
| + time_delta <= current_media_status_->duration) {
|
| + route_controller->Seek(time_delta);
|
| + }
|
| +}
|
| +
|
| +void MediaRouterWebUIMessageHandler::OnSetCurrentMediaMute(
|
| + const base::ListValue* args) {
|
| + const base::DictionaryValue* args_dict = nullptr;
|
| + bool mute;
|
| + if (!args->GetDictionary(0, &args_dict) ||
|
| + !args_dict->GetBoolean("mute", &mute)) {
|
| + DVLOG(1) << "Unable to extract mute";
|
| + return;
|
| + }
|
| + const MediaRouteController* route_controller =
|
| + media_router_ui_->GetMediaRouteController();
|
| + if (route_controller)
|
| + route_controller->SetMute(mute);
|
| +}
|
| +
|
| +void MediaRouterWebUIMessageHandler::OnSetCurrentMediaVolume(
|
| + const base::ListValue* args) {
|
| + const base::DictionaryValue* args_dict = nullptr;
|
| + double volume;
|
| + if (!args->GetDictionary(0, &args_dict) ||
|
| + !args_dict->GetDouble("volume", &volume)) {
|
| + DVLOG(1) << "Unable to extract volume";
|
| + return;
|
| + }
|
| + const MediaRouteController* route_controller =
|
| + media_router_ui_->GetMediaRouteController();
|
| + if (route_controller && volume >= 0 && volume <= 1)
|
| + route_controller->SetVolume(volume);
|
| +}
|
| +
|
| bool MediaRouterWebUIMessageHandler::ActOnIssueType(
|
| IssueInfo::Action action_type,
|
| const base::DictionaryValue* args) {
|
|
|