Index: chrome/browser/ui/webui/media_router/media_router_webui_message_handler_unittest.cc |
diff --git a/chrome/browser/ui/webui/media_router/media_router_webui_message_handler_unittest.cc b/chrome/browser/ui/webui/media_router/media_router_webui_message_handler_unittest.cc |
index 85ce69af48c1bd8ac7f788798a4e28f985a20e72..f0066f128f6d0f025d4a46a4f129b683b9a37d86 100644 |
--- a/chrome/browser/ui/webui/media_router/media_router_webui_message_handler_unittest.cc |
+++ b/chrome/browser/ui/webui/media_router/media_router_webui_message_handler_unittest.cc |
@@ -21,6 +21,8 @@ namespace media_router { |
const char kProviderExtensionIdForTesting[] = "test_id"; |
const char kControllerPathForTesting[] = "test_path"; |
+const std::string kUserEmailForTesting = "nobody@example.com"; |
+const std::string kUserDomainForTesting = "example.com"; |
class MockMediaRouterUI : public MediaRouterUI { |
public: |
@@ -31,6 +33,36 @@ class MockMediaRouterUI : public MediaRouterUI { |
MOCK_CONST_METHOD0(GetRouteProviderExtensionId, const std::string&()); |
}; |
+class TestMediaRouterWebUIMessageHandler |
+ : public MediaRouterWebUIMessageHandler { |
+ public: |
+ explicit TestMediaRouterWebUIMessageHandler(MediaRouterUI* media_router_ui) |
+ : MediaRouterWebUIMessageHandler(media_router_ui), |
+ email_(kUserEmailForTesting), |
+ domain_(kUserDomainForTesting) {} |
+ ~TestMediaRouterWebUIMessageHandler() override = default; |
+ |
+ AccountInfo GetAccountInfo() override { |
+ AccountInfo info = AccountInfo(); |
+ info.account_id = info.gaia = info.email = email_; |
+ info.hosted_domain = domain_; |
+ info.full_name = info.given_name = "name"; |
+ info.locale = "locale"; |
+ info.picture_url = "picture"; |
+ |
+ return info; |
+ } |
+ |
+ void SetEmailAndDomain(const std::string& email, const std::string& domain) { |
+ email_ = email; |
+ domain_ = domain; |
+ } |
+ |
+ private: |
+ std::string email_; |
+ std::string domain_; |
+}; |
+ |
class MediaRouterWebUIMessageHandlerTest : public MediaRouterTest { |
public: |
MediaRouterWebUIMessageHandlerTest() |
@@ -46,7 +78,7 @@ class MediaRouterWebUIMessageHandlerTest : public MediaRouterTest { |
browser()->tab_strip_model()->GetActiveWebContents()); |
mock_media_router_ui_.reset(new MockMediaRouterUI(web_ui_.get())); |
handler_.reset( |
- new MediaRouterWebUIMessageHandler(mock_media_router_ui_.get())); |
+ new TestMediaRouterWebUIMessageHandler(mock_media_router_ui_.get())); |
handler_->SetWebUIForTest(web_ui_.get()); |
} |
@@ -64,7 +96,7 @@ class MediaRouterWebUIMessageHandlerTest : public MediaRouterTest { |
protected: |
scoped_ptr<content::TestWebUI> web_ui_; |
scoped_ptr<MockMediaRouterUI> mock_media_router_ui_; |
- scoped_ptr<MediaRouterWebUIMessageHandler> handler_; |
+ scoped_ptr<TestMediaRouterWebUIMessageHandler> handler_; |
const std::string provider_extension_id_; |
}; |
@@ -81,10 +113,28 @@ TEST_F(MediaRouterWebUIMessageHandlerTest, UpdateSinks) { |
handler_->UpdateSinks(media_sink_with_cast_modes_list); |
EXPECT_EQ(1u, web_ui_->call_data().size()); |
const content::TestWebUI::CallData& call_data = *web_ui_->call_data()[0]; |
- EXPECT_EQ("media_router.ui.setSinkList", call_data.function_name()); |
+ EXPECT_EQ("media_router.ui.setSinkListAndIdentity", |
+ call_data.function_name()); |
const base::Value* arg1 = call_data.arg1(); |
+ const base::DictionaryValue* sinks_with_identity_value = nullptr; |
+ ASSERT_TRUE(arg1->GetAsDictionary(&sinks_with_identity_value)); |
+ |
+ // Email is not displayed if there is no sinks with domain. |
+ bool show_email = false; |
+ bool actual_show_email = false; |
+ EXPECT_TRUE( |
+ sinks_with_identity_value->GetBoolean("showEmail", &actual_show_email)); |
+ EXPECT_EQ(show_email, actual_show_email); |
+ |
+ // Domain is not displayed if there is no sinks with domain. |
+ bool show_domain = false; |
+ bool actual_show_domain = false; |
+ EXPECT_TRUE( |
+ sinks_with_identity_value->GetBoolean("showDomain", &actual_show_domain)); |
+ EXPECT_EQ(show_domain, actual_show_domain); |
+ |
const base::ListValue* sinks_list_value = nullptr; |
- ASSERT_TRUE(arg1->GetAsList(&sinks_list_value)); |
+ ASSERT_TRUE(sinks_with_identity_value->GetList("sinks", &sinks_list_value)); |
const base::DictionaryValue* sink_value = nullptr; |
ASSERT_TRUE(sinks_list_value->GetDictionary(0, &sink_value)); |
@@ -100,6 +150,170 @@ TEST_F(MediaRouterWebUIMessageHandlerTest, UpdateSinks) { |
EXPECT_EQ(static_cast<int>(MediaCastMode::TAB_MIRROR), cast_mode_bits); |
} |
+#if defined(GOOGLE_CHROME_BUILD) |
+TEST_F(MediaRouterWebUIMessageHandlerTest, UpdateSinksWithIdentity) { |
+ MediaSink::Id sink_id("sinkId123"); |
+ std::string sink_name("The sink"); |
+ |
+ std::vector<MediaSinkWithCastModes> media_sink_with_cast_modes_list; |
+ MediaSinkWithCastModes media_sink_with_cast_modes( |
+ MediaSink(sink_id, sink_name, MediaSink::IconType::CAST)); |
+ media_sink_with_cast_modes.sink.set_domain(kUserDomainForTesting); |
+ media_sink_with_cast_modes.cast_modes.insert(MediaCastMode::TAB_MIRROR); |
+ media_sink_with_cast_modes_list.push_back(media_sink_with_cast_modes); |
+ |
+ handler_->UpdateSinks(media_sink_with_cast_modes_list); |
+ EXPECT_EQ(1u, web_ui_->call_data().size()); |
+ const content::TestWebUI::CallData& call_data = *web_ui_->call_data()[0]; |
+ EXPECT_EQ("media_router.ui.setSinkListAndIdentity", |
+ call_data.function_name()); |
+ const base::Value* arg1 = call_data.arg1(); |
+ const base::DictionaryValue* sinks_with_identity_value = nullptr; |
+ ASSERT_TRUE(arg1->GetAsDictionary(&sinks_with_identity_value)); |
+ |
+ bool show_email = true; |
+ bool actual_show_email = false; |
+ EXPECT_TRUE( |
+ sinks_with_identity_value->GetBoolean("showEmail", &actual_show_email)); |
+ EXPECT_EQ(show_email, actual_show_email); |
+ |
+ // Sink domain is not displayed if it matches user domain. |
+ bool show_domain = false; |
+ bool actual_show_domain = false; |
+ EXPECT_TRUE( |
+ sinks_with_identity_value->GetBoolean("showDomain", &actual_show_domain)); |
+ EXPECT_EQ(show_domain, actual_show_domain); |
+ |
+ std::string value; |
+ EXPECT_TRUE(sinks_with_identity_value->GetString("userEmail", &value)); |
+ EXPECT_EQ(kUserEmailForTesting, value); |
+ |
+ EXPECT_TRUE(sinks_with_identity_value->GetString("userDomain", &value)); |
+ EXPECT_EQ(kUserDomainForTesting, value); |
+} |
+ |
+TEST_F(MediaRouterWebUIMessageHandlerTest, UpdateSinksWithIdentityAndDomain) { |
+ MediaSink::Id sink_id("sinkId123"); |
+ std::string sink_name("The sink"); |
+ std::string domain_name("google.com"); |
+ |
+ std::vector<MediaSinkWithCastModes> media_sink_with_cast_modes_list; |
+ MediaSinkWithCastModes media_sink_with_cast_modes( |
+ MediaSink(sink_id, sink_name, MediaSink::IconType::CAST)); |
+ media_sink_with_cast_modes.sink.set_domain(domain_name); |
+ media_sink_with_cast_modes.cast_modes.insert(MediaCastMode::TAB_MIRROR); |
+ media_sink_with_cast_modes_list.push_back(media_sink_with_cast_modes); |
+ |
+ handler_->UpdateSinks(media_sink_with_cast_modes_list); |
+ EXPECT_EQ(1u, web_ui_->call_data().size()); |
+ const content::TestWebUI::CallData& call_data = *web_ui_->call_data()[0]; |
+ EXPECT_EQ("media_router.ui.setSinkListAndIdentity", |
+ call_data.function_name()); |
+ const base::Value* arg1 = call_data.arg1(); |
+ const base::DictionaryValue* sinks_with_identity_value = nullptr; |
+ ASSERT_TRUE(arg1->GetAsDictionary(&sinks_with_identity_value)); |
+ |
+ // Domain is displayed for sinks with domains that are not the user domain. |
+ bool show_domain = true; |
+ bool actual_show_domain = false; |
+ EXPECT_TRUE( |
+ sinks_with_identity_value->GetBoolean("showDomain", &actual_show_domain)); |
+ EXPECT_EQ(show_domain, actual_show_domain); |
+ |
+ std::string value; |
+ EXPECT_TRUE(sinks_with_identity_value->GetString("userDomain", &value)); |
+ EXPECT_EQ(kUserDomainForTesting, value); |
+} |
+ |
+TEST_F(MediaRouterWebUIMessageHandlerTest, UpdateSinksWithNoDomain) { |
+ MediaSink::Id sink_id("sinkId123"); |
+ std::string sink_name("The sink"); |
+ std::string user_email("nobody@gmail.com"); |
+ std::string user_domain("NO_HOSTED_DOMAIN"); |
+ std::string domain_name("default"); |
+ |
+ handler_->SetEmailAndDomain(user_email, user_domain); |
+ |
+ std::vector<MediaSinkWithCastModes> media_sink_with_cast_modes_list; |
+ MediaSinkWithCastModes media_sink_with_cast_modes( |
+ MediaSink(sink_id, sink_name, MediaSink::IconType::CAST)); |
+ media_sink_with_cast_modes.sink.set_domain(domain_name); |
+ media_sink_with_cast_modes.cast_modes.insert(MediaCastMode::TAB_MIRROR); |
+ media_sink_with_cast_modes_list.push_back(media_sink_with_cast_modes); |
+ |
+ handler_->UpdateSinks(media_sink_with_cast_modes_list); |
+ EXPECT_EQ(1u, web_ui_->call_data().size()); |
+ const content::TestWebUI::CallData& call_data = *web_ui_->call_data()[0]; |
+ EXPECT_EQ("media_router.ui.setSinkListAndIdentity", |
+ call_data.function_name()); |
+ const base::Value* arg1 = call_data.arg1(); |
+ const base::DictionaryValue* sinks_with_identity_value = nullptr; |
+ ASSERT_TRUE(arg1->GetAsDictionary(&sinks_with_identity_value)); |
+ |
+ const base::ListValue* sinks_list_value = nullptr; |
+ ASSERT_TRUE(sinks_with_identity_value->GetList("sinks", &sinks_list_value)); |
+ const base::DictionaryValue* sink_value = nullptr; |
+ ASSERT_TRUE(sinks_list_value->GetDictionary(0, &sink_value)); |
+ |
+ // Domain should not be shown if there were only default sink domains. |
+ bool show_domain = false; |
+ bool actual_show_domain = false; |
+ EXPECT_TRUE( |
+ sinks_with_identity_value->GetBoolean("showDomain", &actual_show_domain)); |
+ EXPECT_EQ(show_domain, actual_show_domain); |
+ |
+ // Sink domain should be empty if user has no hosted domain. |
+ std::string value; |
+ EXPECT_TRUE(sink_value->GetString("domain", &value)); |
+ EXPECT_EQ(std::string(), value); |
+ |
+ EXPECT_TRUE(sinks_with_identity_value->GetString("userDomain", &value)); |
+ EXPECT_EQ(user_domain, value); |
+} |
+ |
+TEST_F(MediaRouterWebUIMessageHandlerTest, UpdateSinksWithDefaultDomain) { |
+ MediaSink::Id sink_id("sinkId123"); |
+ std::string sink_name("The sink"); |
+ std::string domain_name("default"); |
+ |
+ std::vector<MediaSinkWithCastModes> media_sink_with_cast_modes_list; |
+ MediaSinkWithCastModes media_sink_with_cast_modes( |
+ MediaSink(sink_id, sink_name, MediaSink::IconType::CAST)); |
+ media_sink_with_cast_modes.sink.set_domain(domain_name); |
+ media_sink_with_cast_modes.cast_modes.insert(MediaCastMode::TAB_MIRROR); |
+ media_sink_with_cast_modes_list.push_back(media_sink_with_cast_modes); |
+ |
+ handler_->UpdateSinks(media_sink_with_cast_modes_list); |
+ EXPECT_EQ(1u, web_ui_->call_data().size()); |
+ const content::TestWebUI::CallData& call_data = *web_ui_->call_data()[0]; |
+ EXPECT_EQ("media_router.ui.setSinkListAndIdentity", |
+ call_data.function_name()); |
+ const base::Value* arg1 = call_data.arg1(); |
+ const base::DictionaryValue* sinks_with_identity_value = nullptr; |
+ ASSERT_TRUE(arg1->GetAsDictionary(&sinks_with_identity_value)); |
+ |
+ const base::ListValue* sinks_list_value = nullptr; |
+ ASSERT_TRUE(sinks_with_identity_value->GetList("sinks", &sinks_list_value)); |
+ const base::DictionaryValue* sink_value = nullptr; |
+ ASSERT_TRUE(sinks_list_value->GetDictionary(0, &sink_value)); |
+ |
+ // Domain should not be shown if there were only default sink domains. |
+ bool show_domain = false; |
+ bool actual_show_domain = false; |
+ EXPECT_TRUE( |
+ sinks_with_identity_value->GetBoolean("showDomain", &actual_show_domain)); |
+ EXPECT_EQ(show_domain, actual_show_domain); |
+ |
+ std::string value; |
+ EXPECT_TRUE(sinks_with_identity_value->GetString("userDomain", &value)); |
+ EXPECT_EQ(kUserDomainForTesting, value); |
+ |
+ // Sink domain should be updated from 'default' to user domain. |
+ EXPECT_TRUE(sink_value->GetString("domain", &value)); |
+ EXPECT_EQ(kUserDomainForTesting, value); |
+} |
+#endif // defined(GOOGLE_CHROME_BUILD) |
+ |
TEST_F(MediaRouterWebUIMessageHandlerTest, UpdateRoutes) { |
MediaRoute::Id route_id("routeId123"); |
MediaSink::Id sink_id("sinkId123"); |