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

Unified Diff: chrome/browser/ui/webui/media_router/media_router_webui_message_handler_unittest.cc

Issue 1680743006: [Media Router] Show user email in header if cloud sink is present. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix ellipsis direction for LTR Created 4 years, 10 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 side-by-side diff with in-line comments
Download patch
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");

Powered by Google App Engine
This is Rietveld 408576698