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

Side by Side Diff: chrome/browser/ui/webui/media_router/media_router_webui_message_handler.cc

Issue 1273423004: Shows a launch spinner next to a sink once it is selected to create a route. The launch spinner sur… (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 4 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/webui/media_router/media_router_webui_message_handle r.h" 5 #include "chrome/browser/ui/webui/media_router/media_router_webui_message_handle r.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/strings/stringprintf.h" 10 #include "base/strings/stringprintf.h"
11 #include "chrome/browser/ui/webui/media_router/media_router_ui.h" 11 #include "chrome/browser/ui/webui/media_router/media_router_ui.h"
12 12
13 namespace media_router { 13 namespace media_router {
14 14
15 namespace { 15 namespace {
16 16
17 const char kHelpPageUrlPrefix[] = 17 const char kHelpPageUrlPrefix[] =
18 "https://support.google.com/chromecast/answer/%d"; 18 "https://support.google.com/chromecast/answer/%d";
19 19
20 // Message names. 20 // Message names.
21 const char kRequestInitialData[] = "requestInitialData"; 21 const char kRequestInitialData[] = "requestInitialData";
22 const char kCreateRoute[] = "requestRoute"; 22 const char kCreateRoute[] = "requestRoute";
23 const char kActOnIssue[] = "actOnIssue"; 23 const char kActOnIssue[] = "actOnIssue";
24 const char kCloseRoute[] = "closeRoute"; 24 const char kCloseRoute[] = "closeRoute";
25 const char kCloseDialog[] = "closeDialog"; 25 const char kCloseDialog[] = "closeDialog";
26 26
27 // JS function names. 27 // JS function names.
28 const char kSetInitialData[] = "media_router.ui.setInitialData"; 28 const char kSetInitialData[] = "media_router.ui.setInitialData";
29 const char kAddRoute[] = "media_router.ui.addRoute"; 29 const char kOnCreateRouteResponseReceived[] =
30 "media_router.ui.onCreateRouteResponseReceived";
30 const char kSetIssue[] = "media_router.ui.setIssue"; 31 const char kSetIssue[] = "media_router.ui.setIssue";
31 const char kSetSinkList[] = "media_router.ui.setSinkList"; 32 const char kSetSinkList[] = "media_router.ui.setSinkList";
32 const char kSetRouteList[] = "media_router.ui.setRouteList"; 33 const char kSetRouteList[] = "media_router.ui.setRouteList";
33 const char kSetCastModeList[] = "media_router.ui.setCastModeList"; 34 const char kSetCastModeList[] = "media_router.ui.setCastModeList";
34 const char kWindowOpen[] = "window.open"; 35 const char kWindowOpen[] = "window.open";
35 36
36 scoped_ptr<base::ListValue> SinksToValue( 37 scoped_ptr<base::ListValue> SinksToValue(
37 const std::vector<MediaSinkWithCastModes>& sinks) { 38 const std::vector<MediaSinkWithCastModes>& sinks,
39 const std::set<MediaSink::Id>& sink_ids_in_launch) {
38 scoped_ptr<base::ListValue> value(new base::ListValue); 40 scoped_ptr<base::ListValue> value(new base::ListValue);
39 41
40 for (const MediaSinkWithCastModes& sink_with_cast_modes : sinks) { 42 for (const MediaSinkWithCastModes& sink_with_cast_modes : sinks) {
41 scoped_ptr<base::DictionaryValue> sink_val(new base::DictionaryValue); 43 scoped_ptr<base::DictionaryValue> sink_val(new base::DictionaryValue);
42 44
43 const MediaSink& sink = sink_with_cast_modes.sink; 45 const MediaSink& sink = sink_with_cast_modes.sink;
44 sink_val->SetString("id", sink.id()); 46 sink_val->SetString("id", sink.id());
45 sink_val->SetString("name", sink.name()); 47 sink_val->SetString("name", sink.name());
48 sink_val->SetBoolean("isLaunching", sink_ids_in_launch.find(sink.id()) !=
49 sink_ids_in_launch.end());
46 50
47 scoped_ptr<base::ListValue> cast_modes_val(new base::ListValue); 51 scoped_ptr<base::ListValue> cast_modes_val(new base::ListValue);
48 for (MediaCastMode cast_mode : sink_with_cast_modes.cast_modes) 52 for (MediaCastMode cast_mode : sink_with_cast_modes.cast_modes)
49 cast_modes_val->AppendInteger(cast_mode); 53 cast_modes_val->AppendInteger(cast_mode);
50 sink_val->Set("castModes", cast_modes_val.Pass()); 54 sink_val->Set("castModes", cast_modes_val.Pass());
51 55
52 value->Append(sink_val.release()); 56 value->Append(sink_val.release());
53 } 57 }
54 58
55 return value.Pass(); 59 return value.Pass();
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
144 MediaRouterWebUIMessageHandler::MediaRouterWebUIMessageHandler() 148 MediaRouterWebUIMessageHandler::MediaRouterWebUIMessageHandler()
145 : dialog_closing_(false) { 149 : dialog_closing_(false) {
146 } 150 }
147 151
148 MediaRouterWebUIMessageHandler::~MediaRouterWebUIMessageHandler() { 152 MediaRouterWebUIMessageHandler::~MediaRouterWebUIMessageHandler() {
149 } 153 }
150 154
151 void MediaRouterWebUIMessageHandler::UpdateSinks( 155 void MediaRouterWebUIMessageHandler::UpdateSinks(
152 const std::vector<MediaSinkWithCastModes>& sinks) { 156 const std::vector<MediaSinkWithCastModes>& sinks) {
153 DVLOG(2) << "UpdateSinks"; 157 DVLOG(2) << "UpdateSinks";
154 scoped_ptr<base::ListValue> sinks_val(SinksToValue(sinks)); 158 scoped_ptr<base::ListValue> sinks_val(
159 SinksToValue(sinks, GetMediaRouterUI()->GetSinkIdsInLaunch()));
155 web_ui()->CallJavascriptFunction(kSetSinkList, *sinks_val); 160 web_ui()->CallJavascriptFunction(kSetSinkList, *sinks_val);
156 } 161 }
157 162
158 void MediaRouterWebUIMessageHandler::UpdateRoutes( 163 void MediaRouterWebUIMessageHandler::UpdateRoutes(
159 const std::vector<MediaRoute>& routes) { 164 const std::vector<MediaRoute>& routes) {
160 DVLOG(2) << "UpdateRoutes"; 165 DVLOG(2) << "UpdateRoutes";
161 scoped_ptr<base::ListValue> routes_val(RoutesToValue(routes)); 166 scoped_ptr<base::ListValue> routes_val(RoutesToValue(routes));
162 web_ui()->CallJavascriptFunction(kSetRouteList, *routes_val); 167 web_ui()->CallJavascriptFunction(kSetRouteList, *routes_val);
163 } 168 }
164 169
165 void MediaRouterWebUIMessageHandler::UpdateCastModes( 170 void MediaRouterWebUIMessageHandler::UpdateCastModes(
166 const CastModeSet& cast_modes, 171 const CastModeSet& cast_modes,
167 const std::string& source_host) { 172 const std::string& source_host) {
168 DVLOG(2) << "UpdateCastModes"; 173 DVLOG(2) << "UpdateCastModes";
169 scoped_ptr<base::ListValue> cast_modes_val( 174 scoped_ptr<base::ListValue> cast_modes_val(
170 CastModesToValue(cast_modes, source_host)); 175 CastModesToValue(cast_modes, source_host));
171 web_ui()->CallJavascriptFunction(kSetCastModeList, *cast_modes_val); 176 web_ui()->CallJavascriptFunction(kSetCastModeList, *cast_modes_val);
172 } 177 }
173 178
174 void MediaRouterWebUIMessageHandler::AddRoute(const MediaRoute& route) { 179 void MediaRouterWebUIMessageHandler::OnCreateRouteResponseReceived(
175 DVLOG(2) << "AddRoute"; 180 const MediaSink::Id& sink_id,
176 scoped_ptr<base::DictionaryValue> route_value(RouteToValue(route)); 181 const MediaRoute* route) {
177 web_ui()->CallJavascriptFunction(kAddRoute, *route_value); 182 DVLOG(2) << "OnCreateRouteResponseReceived";
183 scoped_ptr<base::StringValue> sink_id_value(new base::StringValue(sink_id));
Kevin M 2015/08/08 00:35:57 I don't think scoped_ptr + heap allocation are nee
haibinlu 2015/08/08 01:25:39 Done.
184 if (route) {
185 scoped_ptr<base::DictionaryValue> route_value(RouteToValue(*route));
186 web_ui()->CallJavascriptFunction(kOnCreateRouteResponseReceived,
187 *sink_id_value, *route_value);
188 } else {
189 web_ui()->CallJavascriptFunction(kOnCreateRouteResponseReceived,
190 *sink_id_value,
191 *base::Value::CreateNullValue());
192 }
178 } 193 }
179 194
180 void MediaRouterWebUIMessageHandler::UpdateIssue(const Issue* issue) { 195 void MediaRouterWebUIMessageHandler::UpdateIssue(const Issue* issue) {
181 DVLOG(2) << "UpdateIssue"; 196 DVLOG(2) << "UpdateIssue";
182 if (issue) { 197 if (issue) {
183 scoped_ptr<base::DictionaryValue> issue_val(IssueToValue(*issue)); 198 scoped_ptr<base::DictionaryValue> issue_val(IssueToValue(*issue));
184 web_ui()->CallJavascriptFunction(kSetIssue, *issue_val); 199 web_ui()->CallJavascriptFunction(kSetIssue, *issue_val);
185 } else { 200 } else {
186 // Clears the issue in the WebUI. 201 // Clears the issue in the WebUI.
187 web_ui()->CallJavascriptFunction(kSetIssue); 202 web_ui()->CallJavascriptFunction(kSetIssue);
(...skipping 27 matching lines...) Expand all
215 const base::ListValue* args) { 230 const base::ListValue* args) {
216 DVLOG(1) << "OnRequestInitialData"; 231 DVLOG(1) << "OnRequestInitialData";
217 MediaRouterUI* media_router_ui = GetMediaRouterUI(); 232 MediaRouterUI* media_router_ui = GetMediaRouterUI();
218 233
219 base::DictionaryValue initial_data; 234 base::DictionaryValue initial_data;
220 235
221 initial_data.SetString("headerText", media_router_ui->GetInitialHeaderText()); 236 initial_data.SetString("headerText", media_router_ui->GetInitialHeaderText());
222 initial_data.SetString("headerTextTooltip", 237 initial_data.SetString("headerTextTooltip",
223 media_router_ui->GetInitialHeaderTextTooltip()); 238 media_router_ui->GetInitialHeaderTextTooltip());
224 239
225 scoped_ptr<base::ListValue> sinks(SinksToValue(media_router_ui->sinks())); 240 scoped_ptr<base::ListValue> sinks(SinksToValue(
241 media_router_ui->sinks(), media_router_ui->GetSinkIdsInLaunch()));
Kevin M 2015/08/08 00:35:57 I think it might be cleaner to have media_router_u
haibinlu 2015/08/08 01:25:39 If we add inLaunching in the sink object, it is be
226 initial_data.Set("sinks", sinks.release()); 242 initial_data.Set("sinks", sinks.release());
227 243
228 scoped_ptr<base::ListValue> routes(RoutesToValue(media_router_ui->routes())); 244 scoped_ptr<base::ListValue> routes(RoutesToValue(media_router_ui->routes()));
229 initial_data.Set("routes", routes.release()); 245 initial_data.Set("routes", routes.release());
230 246
231 scoped_ptr<base::ListValue> cast_modes(CastModesToValue( 247 scoped_ptr<base::ListValue> cast_modes(CastModesToValue(
232 media_router_ui->cast_modes(), 248 media_router_ui->cast_modes(),
233 // TODO(imcheng): Use media_router_ui->source_host() once DEFAULT mode 249 // TODO(imcheng): Use media_router_ui->source_host() once DEFAULT mode
234 // is upstreamed. 250 // is upstreamed.
235 std::string())); 251 std::string()));
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
351 } 367 }
352 368
353 MediaRouterUI* MediaRouterWebUIMessageHandler::GetMediaRouterUI() { 369 MediaRouterUI* MediaRouterWebUIMessageHandler::GetMediaRouterUI() {
354 MediaRouterUI* media_router_ui = 370 MediaRouterUI* media_router_ui =
355 static_cast<MediaRouterUI*>(web_ui()->GetController()); 371 static_cast<MediaRouterUI*>(web_ui()->GetController());
356 DCHECK(media_router_ui); 372 DCHECK(media_router_ui);
357 return media_router_ui; 373 return media_router_ui;
358 } 374 }
359 375
360 } // namespace media_router 376 } // namespace media_router
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698