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); |