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

Side by Side 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: Address final comments 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/macros.h" 5 #include "base/macros.h"
6 #include "base/strings/stringprintf.h" 6 #include "base/strings/stringprintf.h"
7 #include "chrome/browser/ui/browser_commands.h" 7 #include "chrome/browser/ui/browser_commands.h"
8 #include "chrome/browser/ui/tabs/tab_strip_model.h" 8 #include "chrome/browser/ui/tabs/tab_strip_model.h"
9 #include "chrome/browser/ui/webui/media_router/media_router_test.h" 9 #include "chrome/browser/ui/webui/media_router/media_router_test.h"
10 #include "chrome/browser/ui/webui/media_router/media_router_ui.h" 10 #include "chrome/browser/ui/webui/media_router/media_router_ui.h"
11 #include "chrome/browser/ui/webui/media_router/media_router_webui_message_handle r.h" 11 #include "chrome/browser/ui/webui/media_router/media_router_webui_message_handle r.h"
12 #include "content/public/browser/browser_context.h" 12 #include "content/public/browser/browser_context.h"
13 #include "content/public/test/test_web_ui.h" 13 #include "content/public/test/test_web_ui.h"
14 #include "extensions/common/constants.h" 14 #include "extensions/common/constants.h"
15 #include "testing/gmock/include/gmock/gmock.h" 15 #include "testing/gmock/include/gmock/gmock.h"
16 #include "testing/gtest/include/gtest/gtest.h" 16 #include "testing/gtest/include/gtest/gtest.h"
17 17
18 using testing::ReturnRef; 18 using testing::ReturnRef;
19 19
20 namespace media_router { 20 namespace media_router {
21 21
22 const char kProviderExtensionIdForTesting[] = "test_id"; 22 const char kProviderExtensionIdForTesting[] = "test_id";
23 const char kControllerPathForTesting[] = "test_path"; 23 const char kControllerPathForTesting[] = "test_path";
24 const std::string kUserEmailForTesting = "nobody@example.com";
25 const std::string kUserDomainForTesting = "example.com";
24 26
25 class MockMediaRouterUI : public MediaRouterUI { 27 class MockMediaRouterUI : public MediaRouterUI {
26 public: 28 public:
27 explicit MockMediaRouterUI(content::WebUI* web_ui) 29 explicit MockMediaRouterUI(content::WebUI* web_ui)
28 : MediaRouterUI(web_ui) {} 30 : MediaRouterUI(web_ui) {}
29 ~MockMediaRouterUI() {} 31 ~MockMediaRouterUI() {}
30 32
31 MOCK_CONST_METHOD0(GetRouteProviderExtensionId, const std::string&()); 33 MOCK_CONST_METHOD0(GetRouteProviderExtensionId, const std::string&());
32 }; 34 };
33 35
36 class TestMediaRouterWebUIMessageHandler
37 : public MediaRouterWebUIMessageHandler {
38 public:
39 explicit TestMediaRouterWebUIMessageHandler(MediaRouterUI* media_router_ui)
40 : MediaRouterWebUIMessageHandler(media_router_ui),
41 email_(kUserEmailForTesting),
42 domain_(kUserDomainForTesting) {}
43 ~TestMediaRouterWebUIMessageHandler() override = default;
44
45 AccountInfo GetAccountInfo() override {
46 AccountInfo info = AccountInfo();
47 info.account_id = info.gaia = info.email = email_;
48 info.hosted_domain = domain_;
49 info.full_name = info.given_name = "name";
50 info.locale = "locale";
51 info.picture_url = "picture";
52
53 return info;
54 }
55
56 void SetEmailAndDomain(const std::string& email, const std::string& domain) {
57 email_ = email;
58 domain_ = domain;
59 }
60
61 private:
62 std::string email_;
63 std::string domain_;
64 };
65
34 class MediaRouterWebUIMessageHandlerTest : public MediaRouterTest { 66 class MediaRouterWebUIMessageHandlerTest : public MediaRouterTest {
35 public: 67 public:
36 MediaRouterWebUIMessageHandlerTest() 68 MediaRouterWebUIMessageHandlerTest()
37 : web_ui_(new content::TestWebUI()), 69 : web_ui_(new content::TestWebUI()),
38 provider_extension_id_(kProviderExtensionIdForTesting) {} 70 provider_extension_id_(kProviderExtensionIdForTesting) {}
39 ~MediaRouterWebUIMessageHandlerTest() override {} 71 ~MediaRouterWebUIMessageHandlerTest() override {}
40 72
41 // BrowserWithTestWindowTest: 73 // BrowserWithTestWindowTest:
42 void SetUp() override { 74 void SetUp() override {
43 BrowserWithTestWindowTest::SetUp(); 75 BrowserWithTestWindowTest::SetUp();
44 chrome::NewTab(browser()); 76 chrome::NewTab(browser());
45 web_ui_->set_web_contents( 77 web_ui_->set_web_contents(
46 browser()->tab_strip_model()->GetActiveWebContents()); 78 browser()->tab_strip_model()->GetActiveWebContents());
47 mock_media_router_ui_.reset(new MockMediaRouterUI(web_ui_.get())); 79 mock_media_router_ui_.reset(new MockMediaRouterUI(web_ui_.get()));
48 handler_.reset( 80 handler_.reset(
49 new MediaRouterWebUIMessageHandler(mock_media_router_ui_.get())); 81 new TestMediaRouterWebUIMessageHandler(mock_media_router_ui_.get()));
50 handler_->SetWebUIForTest(web_ui_.get()); 82 handler_->SetWebUIForTest(web_ui_.get());
51 } 83 }
52 84
53 void TearDown() override { 85 void TearDown() override {
54 handler_.reset(); 86 handler_.reset();
55 mock_media_router_ui_.reset(); 87 mock_media_router_ui_.reset();
56 web_ui_.reset(); 88 web_ui_.reset();
57 BrowserWithTestWindowTest::TearDown(); 89 BrowserWithTestWindowTest::TearDown();
58 } 90 }
59 91
60 const std::string& provider_extension_id() const { 92 const std::string& provider_extension_id() const {
61 return provider_extension_id_; 93 return provider_extension_id_;
62 } 94 }
63 95
64 protected: 96 protected:
65 scoped_ptr<content::TestWebUI> web_ui_; 97 scoped_ptr<content::TestWebUI> web_ui_;
66 scoped_ptr<MockMediaRouterUI> mock_media_router_ui_; 98 scoped_ptr<MockMediaRouterUI> mock_media_router_ui_;
67 scoped_ptr<MediaRouterWebUIMessageHandler> handler_; 99 scoped_ptr<TestMediaRouterWebUIMessageHandler> handler_;
68 const std::string provider_extension_id_; 100 const std::string provider_extension_id_;
69 }; 101 };
70 102
71 TEST_F(MediaRouterWebUIMessageHandlerTest, UpdateSinks) { 103 TEST_F(MediaRouterWebUIMessageHandlerTest, UpdateSinks) {
72 MediaSink::Id sink_id("sinkId123"); 104 MediaSink::Id sink_id("sinkId123");
73 std::string sink_name("The sink"); 105 std::string sink_name("The sink");
74 106
75 std::vector<MediaSinkWithCastModes> media_sink_with_cast_modes_list; 107 std::vector<MediaSinkWithCastModes> media_sink_with_cast_modes_list;
76 MediaSinkWithCastModes media_sink_with_cast_modes( 108 MediaSinkWithCastModes media_sink_with_cast_modes(
77 MediaSink(sink_id, sink_name, MediaSink::IconType::CAST)); 109 MediaSink(sink_id, sink_name, MediaSink::IconType::CAST));
78 media_sink_with_cast_modes.cast_modes.insert(MediaCastMode::TAB_MIRROR); 110 media_sink_with_cast_modes.cast_modes.insert(MediaCastMode::TAB_MIRROR);
79 media_sink_with_cast_modes_list.push_back(media_sink_with_cast_modes); 111 media_sink_with_cast_modes_list.push_back(media_sink_with_cast_modes);
80 112
81 handler_->UpdateSinks(media_sink_with_cast_modes_list); 113 handler_->UpdateSinks(media_sink_with_cast_modes_list);
82 EXPECT_EQ(1u, web_ui_->call_data().size()); 114 EXPECT_EQ(1u, web_ui_->call_data().size());
83 const content::TestWebUI::CallData& call_data = *web_ui_->call_data()[0]; 115 const content::TestWebUI::CallData& call_data = *web_ui_->call_data()[0];
84 EXPECT_EQ("media_router.ui.setSinkList", call_data.function_name()); 116 EXPECT_EQ("media_router.ui.setSinkListAndIdentity",
117 call_data.function_name());
85 const base::Value* arg1 = call_data.arg1(); 118 const base::Value* arg1 = call_data.arg1();
119 const base::DictionaryValue* sinks_with_identity_value = nullptr;
120 ASSERT_TRUE(arg1->GetAsDictionary(&sinks_with_identity_value));
121
122 // Email is not displayed if there is no sinks with domain.
123 bool show_email = false;
124 bool actual_show_email = false;
125 EXPECT_TRUE(
126 sinks_with_identity_value->GetBoolean("showEmail", &actual_show_email));
127 EXPECT_EQ(show_email, actual_show_email);
128
129 // Domain is not displayed if there is no sinks with domain.
130 bool show_domain = false;
131 bool actual_show_domain = false;
132 EXPECT_TRUE(
133 sinks_with_identity_value->GetBoolean("showDomain", &actual_show_domain));
134 EXPECT_EQ(show_domain, actual_show_domain);
135
86 const base::ListValue* sinks_list_value = nullptr; 136 const base::ListValue* sinks_list_value = nullptr;
87 ASSERT_TRUE(arg1->GetAsList(&sinks_list_value)); 137 ASSERT_TRUE(sinks_with_identity_value->GetList("sinks", &sinks_list_value));
88 const base::DictionaryValue* sink_value = nullptr; 138 const base::DictionaryValue* sink_value = nullptr;
89 ASSERT_TRUE(sinks_list_value->GetDictionary(0, &sink_value)); 139 ASSERT_TRUE(sinks_list_value->GetDictionary(0, &sink_value));
90 140
91 std::string value; 141 std::string value;
92 EXPECT_TRUE(sink_value->GetString("id", &value)); 142 EXPECT_TRUE(sink_value->GetString("id", &value));
93 EXPECT_EQ(sink_id, value); 143 EXPECT_EQ(sink_id, value);
94 144
95 EXPECT_TRUE(sink_value->GetString("name", &value)); 145 EXPECT_TRUE(sink_value->GetString("name", &value));
96 EXPECT_EQ(sink_name, value); 146 EXPECT_EQ(sink_name, value);
97 147
98 int cast_mode_bits = -1; 148 int cast_mode_bits = -1;
99 ASSERT_TRUE(sink_value->GetInteger("castModes", &cast_mode_bits)); 149 ASSERT_TRUE(sink_value->GetInteger("castModes", &cast_mode_bits));
100 EXPECT_EQ(static_cast<int>(MediaCastMode::TAB_MIRROR), cast_mode_bits); 150 EXPECT_EQ(static_cast<int>(MediaCastMode::TAB_MIRROR), cast_mode_bits);
101 } 151 }
102 152
153 #if defined(GOOGLE_CHROME_BUILD)
154 TEST_F(MediaRouterWebUIMessageHandlerTest, UpdateSinksWithIdentity) {
155 MediaSink::Id sink_id("sinkId123");
156 std::string sink_name("The sink");
157
158 std::vector<MediaSinkWithCastModes> media_sink_with_cast_modes_list;
159 MediaSinkWithCastModes media_sink_with_cast_modes(
160 MediaSink(sink_id, sink_name, MediaSink::IconType::CAST));
161 media_sink_with_cast_modes.sink.set_domain(kUserDomainForTesting);
162 media_sink_with_cast_modes.cast_modes.insert(MediaCastMode::TAB_MIRROR);
163 media_sink_with_cast_modes_list.push_back(media_sink_with_cast_modes);
164
165 handler_->UpdateSinks(media_sink_with_cast_modes_list);
166 EXPECT_EQ(1u, web_ui_->call_data().size());
167 const content::TestWebUI::CallData& call_data = *web_ui_->call_data()[0];
168 EXPECT_EQ("media_router.ui.setSinkListAndIdentity",
169 call_data.function_name());
170 const base::Value* arg1 = call_data.arg1();
171 const base::DictionaryValue* sinks_with_identity_value = nullptr;
172 ASSERT_TRUE(arg1->GetAsDictionary(&sinks_with_identity_value));
173
174 bool show_email = true;
175 bool actual_show_email = false;
176 EXPECT_TRUE(
177 sinks_with_identity_value->GetBoolean("showEmail", &actual_show_email));
178 EXPECT_EQ(show_email, actual_show_email);
179
180 // Sink domain is not displayed if it matches user domain.
181 bool show_domain = false;
182 bool actual_show_domain = false;
183 EXPECT_TRUE(
184 sinks_with_identity_value->GetBoolean("showDomain", &actual_show_domain));
185 EXPECT_EQ(show_domain, actual_show_domain);
186
187 std::string value;
188 EXPECT_TRUE(sinks_with_identity_value->GetString("userEmail", &value));
189 EXPECT_EQ(kUserEmailForTesting, value);
190
191 EXPECT_TRUE(sinks_with_identity_value->GetString("userDomain", &value));
192 EXPECT_EQ(kUserDomainForTesting, value);
193 }
194
195 TEST_F(MediaRouterWebUIMessageHandlerTest, UpdateSinksWithIdentityAndDomain) {
196 MediaSink::Id sink_id("sinkId123");
197 std::string sink_name("The sink");
198 std::string domain_name("google.com");
199
200 std::vector<MediaSinkWithCastModes> media_sink_with_cast_modes_list;
201 MediaSinkWithCastModes media_sink_with_cast_modes(
202 MediaSink(sink_id, sink_name, MediaSink::IconType::CAST));
203 media_sink_with_cast_modes.sink.set_domain(domain_name);
204 media_sink_with_cast_modes.cast_modes.insert(MediaCastMode::TAB_MIRROR);
205 media_sink_with_cast_modes_list.push_back(media_sink_with_cast_modes);
206
207 handler_->UpdateSinks(media_sink_with_cast_modes_list);
208 EXPECT_EQ(1u, web_ui_->call_data().size());
209 const content::TestWebUI::CallData& call_data = *web_ui_->call_data()[0];
210 EXPECT_EQ("media_router.ui.setSinkListAndIdentity",
211 call_data.function_name());
212 const base::Value* arg1 = call_data.arg1();
213 const base::DictionaryValue* sinks_with_identity_value = nullptr;
214 ASSERT_TRUE(arg1->GetAsDictionary(&sinks_with_identity_value));
215
216 // Domain is displayed for sinks with domains that are not the user domain.
217 bool show_domain = true;
218 bool actual_show_domain = false;
219 EXPECT_TRUE(
220 sinks_with_identity_value->GetBoolean("showDomain", &actual_show_domain));
221 EXPECT_EQ(show_domain, actual_show_domain);
222
223 std::string value;
224 EXPECT_TRUE(sinks_with_identity_value->GetString("userDomain", &value));
225 EXPECT_EQ(kUserDomainForTesting, value);
226 }
227
228 TEST_F(MediaRouterWebUIMessageHandlerTest, UpdateSinksWithNoDomain) {
229 MediaSink::Id sink_id("sinkId123");
230 std::string sink_name("The sink");
231 std::string user_email("nobody@gmail.com");
232 std::string user_domain("NO_HOSTED_DOMAIN");
233 std::string domain_name("default");
234
235 handler_->SetEmailAndDomain(user_email, user_domain);
236
237 std::vector<MediaSinkWithCastModes> media_sink_with_cast_modes_list;
238 MediaSinkWithCastModes media_sink_with_cast_modes(
239 MediaSink(sink_id, sink_name, MediaSink::IconType::CAST));
240 media_sink_with_cast_modes.sink.set_domain(domain_name);
241 media_sink_with_cast_modes.cast_modes.insert(MediaCastMode::TAB_MIRROR);
242 media_sink_with_cast_modes_list.push_back(media_sink_with_cast_modes);
243
244 handler_->UpdateSinks(media_sink_with_cast_modes_list);
245 EXPECT_EQ(1u, web_ui_->call_data().size());
246 const content::TestWebUI::CallData& call_data = *web_ui_->call_data()[0];
247 EXPECT_EQ("media_router.ui.setSinkListAndIdentity",
248 call_data.function_name());
249 const base::Value* arg1 = call_data.arg1();
250 const base::DictionaryValue* sinks_with_identity_value = nullptr;
251 ASSERT_TRUE(arg1->GetAsDictionary(&sinks_with_identity_value));
252
253 const base::ListValue* sinks_list_value = nullptr;
254 ASSERT_TRUE(sinks_with_identity_value->GetList("sinks", &sinks_list_value));
255 const base::DictionaryValue* sink_value = nullptr;
256 ASSERT_TRUE(sinks_list_value->GetDictionary(0, &sink_value));
257
258 // Domain should not be shown if there were only default sink domains.
259 bool show_domain = false;
260 bool actual_show_domain = false;
261 EXPECT_TRUE(
262 sinks_with_identity_value->GetBoolean("showDomain", &actual_show_domain));
263 EXPECT_EQ(show_domain, actual_show_domain);
264
265 // Sink domain should be empty if user has no hosted domain.
266 std::string value;
267 EXPECT_TRUE(sink_value->GetString("domain", &value));
268 EXPECT_EQ(std::string(), value);
269
270 EXPECT_TRUE(sinks_with_identity_value->GetString("userDomain", &value));
271 EXPECT_EQ(user_domain, value);
272 }
273
274 TEST_F(MediaRouterWebUIMessageHandlerTest, UpdateSinksWithDefaultDomain) {
275 MediaSink::Id sink_id("sinkId123");
276 std::string sink_name("The sink");
277 std::string domain_name("default");
278
279 std::vector<MediaSinkWithCastModes> media_sink_with_cast_modes_list;
280 MediaSinkWithCastModes media_sink_with_cast_modes(
281 MediaSink(sink_id, sink_name, MediaSink::IconType::CAST));
282 media_sink_with_cast_modes.sink.set_domain(domain_name);
283 media_sink_with_cast_modes.cast_modes.insert(MediaCastMode::TAB_MIRROR);
284 media_sink_with_cast_modes_list.push_back(media_sink_with_cast_modes);
285
286 handler_->UpdateSinks(media_sink_with_cast_modes_list);
287 EXPECT_EQ(1u, web_ui_->call_data().size());
288 const content::TestWebUI::CallData& call_data = *web_ui_->call_data()[0];
289 EXPECT_EQ("media_router.ui.setSinkListAndIdentity",
290 call_data.function_name());
291 const base::Value* arg1 = call_data.arg1();
292 const base::DictionaryValue* sinks_with_identity_value = nullptr;
293 ASSERT_TRUE(arg1->GetAsDictionary(&sinks_with_identity_value));
294
295 const base::ListValue* sinks_list_value = nullptr;
296 ASSERT_TRUE(sinks_with_identity_value->GetList("sinks", &sinks_list_value));
297 const base::DictionaryValue* sink_value = nullptr;
298 ASSERT_TRUE(sinks_list_value->GetDictionary(0, &sink_value));
299
300 // Domain should not be shown if there were only default sink domains.
301 bool show_domain = false;
302 bool actual_show_domain = false;
303 EXPECT_TRUE(
304 sinks_with_identity_value->GetBoolean("showDomain", &actual_show_domain));
305 EXPECT_EQ(show_domain, actual_show_domain);
306
307 std::string value;
308 EXPECT_TRUE(sinks_with_identity_value->GetString("userDomain", &value));
309 EXPECT_EQ(kUserDomainForTesting, value);
310
311 // Sink domain should be updated from 'default' to user domain.
312 EXPECT_TRUE(sink_value->GetString("domain", &value));
313 EXPECT_EQ(kUserDomainForTesting, value);
314 }
315 #endif // defined(GOOGLE_CHROME_BUILD)
316
103 TEST_F(MediaRouterWebUIMessageHandlerTest, UpdateRoutes) { 317 TEST_F(MediaRouterWebUIMessageHandlerTest, UpdateRoutes) {
104 MediaRoute::Id route_id("routeId123"); 318 MediaRoute::Id route_id("routeId123");
105 MediaSink::Id sink_id("sinkId123"); 319 MediaSink::Id sink_id("sinkId123");
106 MediaSink sink(sink_id, "The sink", MediaSink::IconType::CAST); 320 MediaSink sink(sink_id, "The sink", MediaSink::IconType::CAST);
107 MediaSource media_source("mediaSource"); 321 MediaSource media_source("mediaSource");
108 std::string description("This is a route"); 322 std::string description("This is a route");
109 bool is_local = true; 323 bool is_local = true;
110 std::vector<MediaRoute> routes; 324 std::vector<MediaRoute> routes;
111 routes.push_back(MediaRoute(route_id, media_source, sink_id, 325 routes.push_back(MediaRoute(route_id, media_source, sink_id,
112 description, is_local, kControllerPathForTesting, 326 description, is_local, kControllerPathForTesting,
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
230 444
231 EXPECT_TRUE(issue_value->GetString("routeId", &value)); 445 EXPECT_TRUE(issue_value->GetString("routeId", &value));
232 EXPECT_EQ(route_id, value); 446 EXPECT_EQ(route_id, value);
233 447
234 bool actual_is_blocking = false; 448 bool actual_is_blocking = false;
235 EXPECT_TRUE(issue_value->GetBoolean("isBlocking", &actual_is_blocking)); 449 EXPECT_TRUE(issue_value->GetBoolean("isBlocking", &actual_is_blocking));
236 EXPECT_EQ(is_blocking, actual_is_blocking); 450 EXPECT_EQ(is_blocking, actual_is_blocking);
237 } 451 }
238 452
239 } // namespace media_router 453 } // namespace media_router
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698