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

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: Fixing ChromeOS System Tray Test Created 4 years, 11 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 0a5026e46400675f61013f0ecc604ce243c78e96..b99a04900deacf4f47980b112816064d5775601e 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
@@ -29,6 +29,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 kReportClickedSinkIndex[] = "reportClickedSinkIndex";
const char kReportNavigateToView[] = "reportNavigateToView";
@@ -74,12 +75,13 @@ 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();
if (!custom_path.empty()) {
@@ -95,12 +97,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());
}
@@ -185,9 +190,10 @@ 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);
}
@@ -206,7 +212,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);
@@ -250,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)));
@@ -289,6 +299,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());
@@ -376,8 +387,51 @@ 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;
+ }
+
+ if (!media_router_ui_->ConnectRoute(sink_id, route_id)) {
+ // TODO(boetger): Need to add an issue if failed to initiate a JoinRoute
+ // request.
+ 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