Chromium Code Reviews| 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..b835fe54cd3f3bec01154c227d252011a84e3ae3 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 |
| @@ -4,11 +4,17 @@ |
| #include "base/macros.h" |
| #include "base/strings/stringprintf.h" |
| +#include "base/strings/utf_string_conversions.h" |
|
apacible
2016/02/25 00:16:02
Are all of these needed?
amp
2016/02/25 03:01:15
Oops, no. This was from a previous patch that req
|
| +#include "chrome/browser/prefs/browser_prefs.h" |
| +#include "chrome/browser/signin/fake_signin_manager_builder.h" |
| +#include "chrome/browser/signin/signin_manager_factory.h" |
| #include "chrome/browser/ui/browser_commands.h" |
| #include "chrome/browser/ui/tabs/tab_strip_model.h" |
| #include "chrome/browser/ui/webui/media_router/media_router_test.h" |
| #include "chrome/browser/ui/webui/media_router/media_router_ui.h" |
| #include "chrome/browser/ui/webui/media_router/media_router_webui_message_handler.h" |
| +#include "chrome/test/base/testing_browser_process.h" |
| +#include "components/signin/core/browser/signin_manager.h" |
| #include "content/public/browser/browser_context.h" |
| #include "content/public/test/test_web_ui.h" |
| #include "extensions/common/constants.h" |
| @@ -31,6 +37,37 @@ 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_("nobody@example.com"), |
| + domain_("example.com") {} |
| + ~TestMediaRouterWebUIMessageHandler() override = default; |
| + |
| + AccountInfo GetAccountInfo() override { |
| + AccountInfo info = AccountInfo(); |
| + info.account_id = info.gaia = info.email = email_; |
| + info.hosted_domain = domain_; |
| + // info.hosted_domain = "NO_HOSTED_DOMAIN"; |
|
apacible
2016/02/25 00:16:02
nit: Remove comment.
amp
2016/02/25 03:01:15
Done.
|
| + 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 +83,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 +101,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 +118,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 +155,176 @@ 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::string user_email("nobody@example.com"); |
|
apacible
2016/02/25 00:16:02
Pull out the actual user email/domain into constan
amp
2016/02/25 03:01:15
Done.
|
| + std::string domain_name("example.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)); |
| + |
| + 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(user_email, value); |
| + |
| + EXPECT_TRUE(sinks_with_identity_value->GetString("userDomain", &value)); |
| + EXPECT_EQ(domain_name, value); |
| +} |
| + |
| +TEST_F(MediaRouterWebUIMessageHandlerTest, UpdateSinksWithIdentityAndDomain) { |
| + MediaSink::Id sink_id("sinkId123"); |
| + std::string sink_name("The sink"); |
| + std::string user_email("nobody@example.com"); |
| + std::string user_domain("example.com"); |
| + 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(user_domain, value); |
| +} |
| + |
| +TEST_F(MediaRouterWebUIMessageHandlerTest, UpdateSinksWithNoDomain) { |
| + MediaSink::Id sink_id("sinkId123"); |
| + std::string sink_name("The sink"); |
| + std::string user_email("nobody@example.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 user_email("nobody@example.com"); |
| + std::string user_domain("example.com"); |
| + 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(user_domain, value); |
| + |
| + // Sink domain should be updated from 'default' to user_domain. |
| + EXPECT_TRUE(sink_value->GetString("domain", &value)); |
| + EXPECT_EQ(user_domain, value); |
| +} |
| +#endif // defined(GOOGLE_CHROME_BUILD) |
| + |
| TEST_F(MediaRouterWebUIMessageHandlerTest, UpdateRoutes) { |
| MediaRoute::Id route_id("routeId123"); |
| MediaSink::Id sink_id("sinkId123"); |