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

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

Issue 1415103006: Non-Local Join for Media Router and Presentation API (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Ready for Review Created 5 years, 1 month 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 9c9092ec8a6cba272760df5e17922870690fdfb4..f079e149fa98e11be6096e222aa96f26a2930b41 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
@@ -27,6 +27,7 @@ const char kRequestInitialData[] = "requestInitialData";
const char kCreateRoute[] = "requestRoute";
const char kActOnIssue[] = "actOnIssue";
const char kCloseRoute[] = "closeRoute";
+const char kJoinRoute[] = "joinRoute";
const char kCloseDialog[] = "closeDialog";
const char kReportSinkCount[] = "reportSinkCount";
@@ -88,6 +89,17 @@ scoped_ptr<base::DictionaryValue> RouteToValue(
return dictionary.Pass();
}
+scoped_ptr<base::ListValue> RouteIdsToValue(
+ const std::vector<MediaRoute::Id>& route_ids) {
+ scoped_ptr<base::ListValue> value(new base::ListValue);
+
+ for (const MediaRoute::Id& route_id : route_ids) {
+ value->Append(new base::StringValue(route_id));
+ }
+
+ return value.Pass();
+}
+
scoped_ptr<base::ListValue> RoutesToValue(
const std::vector<MediaRoute>& routes, const std::string& extension_id) {
scoped_ptr<base::ListValue> value(new base::ListValue);
@@ -179,11 +191,14 @@ void MediaRouterWebUIMessageHandler::UpdateSinks(
}
void MediaRouterWebUIMessageHandler::UpdateRoutes(
- const std::vector<MediaRoute>& routes) {
- DVLOG(2) << "UpdateRoutes";
+ const std::vector<MediaRoute>& routes,
+ const std::vector<MediaRoute::Id>& joinable_route_ids) {
scoped_ptr<base::ListValue> routes_val(RoutesToValue(routes,
media_router_ui_->GetRouteProviderExtensionId()));
- web_ui()->CallJavascriptFunction(kSetRouteList, *routes_val);
+ scoped_ptr<base::ListValue> joinable_routes_ids_val(
+ RouteIdsToValue(joinable_route_ids));
+ web_ui()->CallJavascriptFunction(
+ kSetRouteList, *routes_val, *joinable_routes_ids_val);
}
void MediaRouterWebUIMessageHandler::UpdateCastModes(
@@ -249,6 +264,10 @@ void MediaRouterWebUIMessageHandler::RegisterMessages() {
base::Bind(&MediaRouterWebUIMessageHandler::OnCloseRoute,
base::Unretained(this)));
web_ui()->RegisterMessageCallback(
+ kJoinRoute,
+ base::Bind(&MediaRouterWebUIMessageHandler::OnJoinRoute,
+ base::Unretained(this)));
+ web_ui()->RegisterMessageCallback(
kCloseDialog,
base::Bind(&MediaRouterWebUIMessageHandler::OnCloseDialog,
base::Unretained(this)));
@@ -274,6 +293,11 @@ void MediaRouterWebUIMessageHandler::OnRequestInitialData(
media_router_ui_->GetRouteProviderExtensionId()));
initial_data.Set("routes", routes.release());
+
+ scoped_ptr<base::ListValue> joinable_route_ids(
+ RouteIdsToValue(media_router_ui_->joinable_route_ids()));
+ initial_data.Set("joinableRouteIds", joinable_route_ids.release());
+
const std::set<MediaCastMode> cast_modes = media_router_ui_->cast_modes();
scoped_ptr<base::ListValue> cast_modes_list(
CastModesToValue(cast_modes, media_router_ui_->GetFrameURLHost()));
@@ -360,8 +384,52 @@ void MediaRouterWebUIMessageHandler::OnActOnIssue(
media_router_ui_->ClearIssue(issue_id);
}
-void MediaRouterWebUIMessageHandler::OnCloseRoute(
- const base::ListValue* args) {
+void MediaRouterWebUIMessageHandler::OnJoinRoute(const base::ListValue* args) {
+ DVLOG(1) << "OnJoinRoute";
+ const base::DictionaryValue* args_dict = nullptr;
+ std::string route_id;
+ std::string sink_id;
+ if (!args->GetDictionary(0, &args_dict) ||
+ !args_dict->GetString("sinkId", &sink_id) ||
+ !args_dict->GetString("routeId", &route_id)) {
+ DVLOG(1) << "Unable to extract args.";
+ return;
+ }
+
+ if (sink_id.empty()) {
+ DVLOG(1) << "Media Route UI did not respond with a "
+ << "valid sink ID. Aborting.";
+ return;
+ }
+
+ if (route_id.empty()) {
+ DVLOG(1) << "Media Route UI did not respond with a "
+ << "valid route ID. Aborting.";
+ return;
+ }
+
+ MediaRouterUI* media_router_ui =
+ static_cast<MediaRouterUI*>(web_ui()->GetController());
+ if (media_router_ui->HasPendingRouteRequest()) {
+ DVLOG(1) << "UI already has pending route request. Ignoring.";
+ Issue issue(
+ l10n_util::GetStringUTF8(IDS_MEDIA_ROUTER_ISSUE_PENDING_ROUTE),
+ std::string(), IssueAction(IssueAction::TYPE_DISMISS),
+ std::vector<IssueAction>(), std::string(), Issue::NOTIFICATION,
+ false, std::string());
+ media_router_ui_->AddIssue(issue);
+ return;
+ }
+
+ DVLOG(2) << __FUNCTION__ << ": sink id: " << sink_id
+ << ", route id: " << route_id;
+
+ if (!media_router_ui_->JoinRoute(sink_id, route_id)) {
+ DVLOG(1) << "Error initiating route join request.";
+ }
+}
+
+void MediaRouterWebUIMessageHandler::OnCloseRoute(const base::ListValue* args) {
DVLOG(1) << "OnCloseRoute";
const base::DictionaryValue* args_dict = nullptr;
std::string route_id;

Powered by Google App Engine
This is Rietveld 408576698