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

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: Review Fixes 2 Created 5 years 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 4c911f91eaafa04685bba485086dc294027472ea..c3f0da93922e33f87d277426abcad0c3189157d1 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";
@@ -66,13 +67,14 @@ scoped_ptr<base::ListValue> SinksToValue(
}
scoped_ptr<base::DictionaryValue> RouteToValue(
- const MediaRoute& route, const std::string& extension_id) {
+ const MediaRoute& route, bool canJoin, const std::string& extension_id) {
scoped_ptr<base::DictionaryValue> dictionary(new base::DictionaryValue);
dictionary->SetString("id", route.media_route_id());
dictionary->SetString("sinkId", route.media_sink_id());
dictionary->SetString("description", route.description());
dictionary->SetBoolean("isLocal", route.is_local());
+ dictionary->SetBoolean("canJoin", canJoin);
const std::string& custom_path = route.custom_controller_path();
@@ -89,12 +91,15 @@ scoped_ptr<base::DictionaryValue> RouteToValue(
}
scoped_ptr<base::ListValue> RoutesToValue(
- const std::vector<MediaRoute>& routes, const std::string& extension_id) {
+ const std::vector<MediaRoute>& routes,
+ const std::vector<MediaRoute::Id>& joinable_route_ids,
+ const std::string& extension_id) {
scoped_ptr<base::ListValue> value(new base::ListValue);
for (const MediaRoute& route : routes) {
+ bool canJoin = ContainsValue(joinable_route_ids, route.media_route_id());
scoped_ptr<base::DictionaryValue> route_val(RouteToValue(route,
- extension_id));
+ canJoin, extension_id));
value->Append(route_val.release());
}
@@ -179,11 +184,13 @@ 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,
+ joinable_route_ids,
media_router_ui_->GetRouteProviderExtensionId()));
- web_ui()->CallJavascriptFunction(kSetRouteList, *routes_val);
+ web_ui()->CallJavascriptFunction(
+ kSetRouteList, *routes_val);
apacible 2015/12/09 19:56:25 nit: Move back to previous line.
matt.boetger 2015/12/16 00:21:08 Done.
}
void MediaRouterWebUIMessageHandler::UpdateCastModes(
@@ -200,7 +207,7 @@ void MediaRouterWebUIMessageHandler::OnCreateRouteResponseReceived(
const MediaRoute* route) {
DVLOG(2) << "OnCreateRouteResponseReceived";
if (route) {
- scoped_ptr<base::DictionaryValue> route_value(RouteToValue(*route,
+ scoped_ptr<base::DictionaryValue> route_value(RouteToValue(*route, false,
media_router_ui_->GetRouteProviderExtensionId()));
web_ui()->CallJavascriptFunction(kOnCreateRouteResponseReceived,
base::StringValue(sink_id), *route_value);
@@ -249,6 +256,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)));
@@ -271,6 +282,7 @@ void MediaRouterWebUIMessageHandler::OnRequestInitialData(
initial_data.Set("sinks", sinks.release());
scoped_ptr<base::ListValue> routes(RoutesToValue(media_router_ui_->routes(),
+ media_router_ui_->joinable_route_ids(),
media_router_ui_->GetRouteProviderExtensionId()));
initial_data.Set("routes", routes.release());
@@ -361,8 +373,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)) {
apacible 2015/12/09 19:56:25 Do we want to surface an error if we fail to join?
matt.boetger 2015/12/16 00:21:08 There is a TODO for imcheng in the CreateRoute met
apacible 2015/12/18 22:34:19 Acknowledged.
+ 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