Chromium Code Reviews| 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 7be4f3302903c383a71bda1e697580f9481cdaaa..746a9928c4466bf54af70d856cc61f830190734e 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 |
| @@ -63,15 +63,26 @@ const char kSetInitialData[] = "media_router.ui.setInitialData"; |
| const char kOnCreateRouteResponseReceived[] = |
| "media_router.ui.onCreateRouteResponseReceived"; |
| const char kSetIssue[] = "media_router.ui.setIssue"; |
| -const char kSetSinkList[] = "media_router.ui.setSinkList"; |
| +const char kSetSinkListAndIdentityVisibility[] = |
| + "media_router.ui.setSinkListAndIdentityVisibility"; |
| const char kSetRouteList[] = "media_router.ui.setRouteList"; |
| const char kSetCastModeList[] = "media_router.ui.setCastModeList"; |
| const char kUpdateMaxHeight[] = "media_router.ui.updateMaxHeight"; |
| const char kWindowOpen[] = "window.open"; |
| -scoped_ptr<base::ListValue> SinksToValue( |
| +scoped_ptr<base::DictionaryValue> SinksToValue( |
| const std::vector<MediaSinkWithCastModes>& sinks) { |
| + |
| + Profile* profile = Profile::FromWebUI(web_ui()); |
| + SigninManagerBase* signin_manager = |
| + SigninManagerFactory::GetForProfile(profile); |
| + std::string userDomain = |
| + signin_manager->GetAuthenticatedAccountInfo().hosted_domain; |
| + |
| + scoped_ptr<base::DictionaryValue> sink_list_and_identity( |
| + new base::DictionaryValue); |
| scoped_ptr<base::ListValue> value(new base::ListValue); |
| + int identityVisibility = 0; |
| for (const MediaSinkWithCastModes& sink_with_cast_modes : sinks) { |
| scoped_ptr<base::DictionaryValue> sink_val(new base::DictionaryValue); |
| @@ -82,8 +93,20 @@ scoped_ptr<base::ListValue> SinksToValue( |
| sink_val->SetInteger("iconType", sink.icon_type()); |
| if (!sink.description().empty()) |
| sink_val->SetString("description", sink.description()); |
| - if (!sink.domain().empty()) |
| - sink_val->SetString("domain", sink.domain()); |
| + if (!sink.domain().empty()) { |
| + std::string domain = sink.domain(); |
| + // Convert default domains to user domain |
| + if (sink.domain() == "default") |
| + domain = userDomain; |
| + |
| + sink_val->SetString("domain", domain); |
| + |
| + // Don't reset visibliity to 1 if it was already 2 |
|
apacible
2016/02/13 08:13:02
nit: "visibility" misspelled
amp
2016/02/16 22:19:12
Done.
|
| + if (identityVisibility == 0) |
|
apacible
2016/02/13 08:13:02
Declare identity visibility options as enums here
amp
2016/02/16 22:19:12
Done. I declared a local enum to this class but d
|
| + identityVisibility = 1; |
| + if (domain != userDomain) |
| + identityVisibility = 2; |
| + } |
| int cast_mode_bits = 0; |
| for (MediaCastMode cast_mode : sink_with_cast_modes.cast_modes) |
| @@ -93,7 +116,10 @@ scoped_ptr<base::ListValue> SinksToValue( |
| value->Append(sink_val.release()); |
| } |
| - return value; |
| + sink_list_and_identity->Set("sinks", sinks); |
| + sink_list_and_identity->SetInteger("identityVisibility", |
| + identityVisibility); |
| + return sink_list_and_identity; |
| } |
| scoped_ptr<base::DictionaryValue> RouteToValue( |
| @@ -207,8 +233,9 @@ MediaRouterWebUIMessageHandler::~MediaRouterWebUIMessageHandler() { |
| void MediaRouterWebUIMessageHandler::UpdateSinks( |
| const std::vector<MediaSinkWithCastModes>& sinks) { |
| DVLOG(2) << "UpdateSinks"; |
| - scoped_ptr<base::ListValue> sinks_val(SinksToValue(sinks)); |
| - web_ui()->CallJavascriptFunction(kSetSinkList, *sinks_val); |
| + scoped_ptr<base::DictionaryValue> sinks_val(SinksToValue(sinks)); |
| + web_ui()->CallJavascriptFunction( |
| + kSetSinkListAndIdentityVisibility, *sinks_val); |
| } |
| void MediaRouterWebUIMessageHandler::UpdateRoutes( |
| @@ -349,8 +376,14 @@ void MediaRouterWebUIMessageHandler::OnRequestInitialData( |
| initial_data.SetString("deviceMissingUrl", |
| base::StringPrintf(kHelpPageUrlPrefix, 3249268)); |
| - scoped_ptr<base::ListValue> sinks(SinksToValue(media_router_ui_->sinks())); |
| - initial_data.Set("sinks", sinks.release()); |
| + scoped_ptr<base::DictionaryValue> sinks_with_identity(SinksToValue( |
| + media_router_ui_->sinks())); |
| + const base::ListValue* sinks_val = nullptr; |
| + sinks_with_identity->GetList("sinks", &sinks_val); |
| + int identity_visibility = -1; |
| + sinks_with_identity->GetInteger("identityVisibility", &identity_visibility); |
| + initial_data.Set("sinks", &sinks_val); |
| + initial_data.SetInteger("identityVisibility", identity_visibility); |
| scoped_ptr<base::ListValue> routes(RoutesToValue(media_router_ui_->routes(), |
| media_router_ui_->joinable_route_ids(), |
| @@ -376,14 +409,18 @@ void MediaRouterWebUIMessageHandler::OnRequestInitialData( |
| // enabled. If the user enables sync after acknowledging the first run flow, |
| // this is treated as the user opting into Google services, including cloud |
| // services, if the browser is a Chrome branded build. |
| + SigninManagerBase* signin_manager = |
| + SigninManagerFactory::GetForProfile(profile); |
| if (!profile->GetPrefs()->GetBoolean( |
| prefs::kMediaRouterCloudServicesPrefSet) && |
| profile->IsSyncAllowed()) { |
| - SigninManagerBase* signin_manager = |
| - SigninManagerFactory::GetForProfile(profile); |
| show_cloud_pref = signin_manager && signin_manager->IsAuthenticated() && |
| ProfileSyncServiceFactory::GetForProfile(profile)->IsSyncActive(); |
| } |
| + initial_data.SetString("userEmail", |
| + signin_manager->GetAuthenticatedAccountInfo().email); |
| + initial_data.SetString("userDomain", |
| + signin_manager->GetAuthenticatedAccountInfo().hosted_domain); |
| #endif // defined(GOOGLE_CHROME_BUILD) |
| initial_data.SetBoolean("showFirstRunFlowCloudPref", show_cloud_pref); |