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

Unified Diff: chrome/browser/ui/webui/media_router/media_router_webui_message_handler.cc

Issue 2859953002: Reland [Media Router] Custom Controls 3 - add plumbing through MRUI and MRWebUIMessageHandler (Closed)
Patch Set: Fix test failures 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 side-by-side diff with in-line comments
Download patch
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) {

Powered by Google App Engine
This is Rietveld 408576698