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

Side by Side Diff: chrome/browser/media/router/offscreen_presentation_manager_unittest.cc

Issue 1314413005: [Presentation API] 1-UA presentation support + presenter APIs. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 4 years, 6 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
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include <vector>
6
7 #include "base/bind.h"
8 #include "chrome/browser/media/router/offscreen_presentation_manager.h"
9 #include "chrome/browser/media/router/test_helper.h"
10 #include "testing/gmock/include/gmock/gmock.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12
13 using testing::_;
14
15 namespace media_router {
16
17 using OffscreenPresentationConnection =
18 OffscreenPresentationManager::OffscreenPresentationConnection;
19
20 namespace {
21 const char kPresentationId[] = "presentationId";
22
23 } // namespace
24
25 class OffscreenPresentationManagerTest : public ::testing::Test {
26 public:
27 void OnReceiverConnectionAvailable(
28 std::unique_ptr<OffscreenPresentationConnection> connection) {
29 ASSERT_TRUE(connection);
30 receivers_.push_back(std::move(connection));
31 }
32
33 OffscreenPresentationManager* manager() { return &manager_; }
34 std::vector<std::unique_ptr<OffscreenPresentationConnection>>* receivers() {
35 return &receivers_;
36 }
37
38 MockPresentationConnectionStateChangedCallback*
39 mock_controller_state_change_callback() {
40 return &mock_controller_state_change_callback_;
41 }
42 MockPresentationConnectionStateChangedCallback*
43 mock_receiver_state_change_callback() {
44 return &mock_receiver_state_change_callback_;
45 }
46 MockPresentationMessagesCallback* mock_controller_messages_callback() {
47 return &mock_controller_messages_callback_;
48 }
49 MockPresentationMessagesCallback* mock_receiver_messages_callback() {
50 return &mock_receiver_messages_callback_;
51 }
52
53 private:
54 OffscreenPresentationManager manager_;
55 std::vector<std::unique_ptr<OffscreenPresentationConnection>> receivers_;
56 MockPresentationConnectionStateChangedCallback
57 mock_controller_state_change_callback_;
58 MockPresentationConnectionStateChangedCallback
59 mock_receiver_state_change_callback_;
60 MockPresentationMessagesCallback mock_controller_messages_callback_;
61 MockPresentationMessagesCallback mock_receiver_messages_callback_;
62 };
63
64 TEST_F(OffscreenPresentationManagerTest, RegisterReceiver) {
65 RenderFrameHostId controller_rfh_id(123, 456);
66 // Receiver hasn't registered yet.
67 EXPECT_FALSE(manager()->ConnectToOffscreenPresentation(kPresentationId,
68 controller_rfh_id));
69
70 manager()->RegisterOffscreenPresentationReceiver(
71 kPresentationId,
72 base::Bind(
73 &OffscreenPresentationManagerTest::OnReceiverConnectionAvailable,
74 base::Unretained(this)));
75
76 // Registered receiver, but controller hasn't connected yet.
77 EXPECT_EQ(0u, receivers()->size());
78
79 std::unique_ptr<OffscreenPresentationConnection> controller_connection =
80 manager()->ConnectToOffscreenPresentation(kPresentationId,
81 controller_rfh_id);
82 EXPECT_TRUE(controller_connection);
83 EXPECT_EQ(1u, receivers()->size());
84
85 // A frame can only have one OffscreenPresentationConnection at a time.
86 EXPECT_FALSE(manager()->ConnectToOffscreenPresentation(kPresentationId,
87 controller_rfh_id));
88
89 RenderFrameHostId controller_rfh_id2(234, 567);
90 std::unique_ptr<OffscreenPresentationConnection> controller_connection2 =
91 manager()->ConnectToOffscreenPresentation(kPresentationId,
92 controller_rfh_id2);
93 EXPECT_TRUE(controller_connection2);
94 EXPECT_EQ(2u, receivers()->size());
95
96 // All connections must be destroyed before unregistering receiver.
97 receivers()->clear();
98 manager()->UnregisterOffscreenPresentationReceiver(kPresentationId);
99
100 // Receiver has unregistered, so controller can't connect anymore.
101 RenderFrameHostId controller_rfh_id3(345, 678);
102 EXPECT_FALSE(manager()->ConnectToOffscreenPresentation(kPresentationId,
103 controller_rfh_id3));
104 }
105
106 TEST_F(OffscreenPresentationManagerTest, ReceiverListenForStateChange) {
107 manager()->RegisterOffscreenPresentationReceiver(
108 kPresentationId,
109 base::Bind(
110 &OffscreenPresentationManagerTest::OnReceiverConnectionAvailable,
111 base::Unretained(this)));
112
113 RenderFrameHostId controller_rfh_id(123, 456);
114 std::unique_ptr<OffscreenPresentationConnection> controller_connection =
115 manager()->ConnectToOffscreenPresentation(kPresentationId,
116 controller_rfh_id);
117 ASSERT_TRUE(controller_connection);
118 ASSERT_EQ(1u, receivers()->size());
119
120 (*receivers())[0]->ListenForStateChange(
121 base::Bind(&MockPresentationConnectionStateChangedCallback::Run,
122 base::Unretained(mock_receiver_state_change_callback())));
123 controller_connection->ListenForStateChange(
124 base::Bind(&MockPresentationConnectionStateChangedCallback::Run,
125 base::Unretained(mock_controller_state_change_callback())));
126
127 content::PresentationConnectionStateChangeInfo info(
128 content::PRESENTATION_CONNECTION_STATE_TERMINATED);
129 EXPECT_CALL(*mock_receiver_state_change_callback(),
130 Run(StateChageInfoEquals(info)));
131 EXPECT_CALL(*mock_controller_state_change_callback(), Run(_)).Times(0);
132 controller_connection->RemoveFromPresentation(info);
133 }
134
135 TEST_F(OffscreenPresentationManagerTest, ControllerListenForStateChange) {
136 manager()->RegisterOffscreenPresentationReceiver(
137 kPresentationId,
138 base::Bind(
139 &OffscreenPresentationManagerTest::OnReceiverConnectionAvailable,
140 base::Unretained(this)));
141
142 RenderFrameHostId controller_rfh_id(123, 456);
143 std::unique_ptr<OffscreenPresentationConnection> controller_connection =
144 manager()->ConnectToOffscreenPresentation(kPresentationId,
145 controller_rfh_id);
146 ASSERT_TRUE(controller_connection);
147 ASSERT_EQ(1u, receivers()->size());
148
149 (*receivers())[0]->ListenForStateChange(
150 base::Bind(&MockPresentationConnectionStateChangedCallback::Run,
151 base::Unretained(mock_receiver_state_change_callback())));
152 controller_connection->ListenForStateChange(
153 base::Bind(&MockPresentationConnectionStateChangedCallback::Run,
154 base::Unretained(mock_controller_state_change_callback())));
155
156 // Destroying an OffscreenPresentationConnection will automatically call
157 // |RemoveFromPresentation|.
158 content::PresentationConnectionStateChangeInfo info(
159 content::PRESENTATION_CONNECTION_STATE_CLOSED);
160 info.close_reason = content::PRESENTATION_CONNECTION_CLOSE_REASON_WENT_AWAY;
161 EXPECT_CALL(*mock_controller_state_change_callback(),
162 Run(StateChageInfoEquals(info)));
163 EXPECT_CALL(*mock_receiver_state_change_callback(), Run(_)).Times(0);
164 receivers()->clear();
165 }
166
167 TEST_F(OffscreenPresentationManagerTest, ListenForAndSendMessages) {
168 manager()->RegisterOffscreenPresentationReceiver(
169 kPresentationId,
170 base::Bind(
171 &OffscreenPresentationManagerTest::OnReceiverConnectionAvailable,
172 base::Unretained(this)));
173
174 RenderFrameHostId controller_rfh_id(123, 456);
175 std::unique_ptr<OffscreenPresentationConnection> controller_connection =
176 manager()->ConnectToOffscreenPresentation(kPresentationId,
177 controller_rfh_id);
178 ASSERT_TRUE(controller_connection);
179 ASSERT_EQ(1u, receivers()->size());
180
181 (*receivers())[0]->ListenForMessages(
182 base::Bind(&MockPresentationMessagesCallback::OnMessagesReceived,
183 base::Unretained(mock_receiver_messages_callback())));
184 controller_connection->ListenForMessages(
185 base::Bind(&MockPresentationMessagesCallback::OnMessagesReceived,
186 base::Unretained(mock_controller_messages_callback())));
187
188 std::string sender_message_text("from controller to receiver");
189 std::unique_ptr<content::PresentationSessionMessage> message(
190 new content::PresentationSessionMessage(
191 content::PresentationMessageType::TEXT));
192 message->message = sender_message_text;
193 EXPECT_CALL(*mock_controller_messages_callback(), OnMessageSent(true));
194 EXPECT_CALL(*mock_receiver_messages_callback(),
195 DoOnMessagesReceived(sender_message_text));
196 EXPECT_CALL(*mock_controller_messages_callback(), DoOnMessagesReceived(_))
197 .Times(0);
198 controller_connection->SendMessage(
199 std::move(message),
200 base::Bind(&MockPresentationMessagesCallback::OnMessageSent,
201 base::Unretained(mock_controller_messages_callback())));
202 EXPECT_TRUE(testing::Mock::VerifyAndClearExpectations(
203 mock_controller_messages_callback()));
204 EXPECT_TRUE(testing::Mock::VerifyAndClearExpectations(
205 mock_receiver_messages_callback()));
206
207 std::string receiver_message_text("from receiver to controller");
208 message.reset(new content::PresentationSessionMessage(
209 content::PresentationMessageType::TEXT));
210 message->message = receiver_message_text;
211 EXPECT_CALL(*mock_receiver_messages_callback(), OnMessageSent(true));
212 EXPECT_CALL(*mock_controller_messages_callback(),
213 DoOnMessagesReceived(receiver_message_text));
214 EXPECT_CALL(*mock_receiver_messages_callback(), DoOnMessagesReceived(_))
215 .Times(0);
216 (*receivers())[0]->SendMessage(
217 std::move(message),
218 base::Bind(&MockPresentationMessagesCallback::OnMessageSent,
219 base::Unretained(mock_receiver_messages_callback())));
220 EXPECT_TRUE(testing::Mock::VerifyAndClearExpectations(
221 mock_controller_messages_callback()));
222 EXPECT_TRUE(testing::Mock::VerifyAndClearExpectations(
223 mock_receiver_messages_callback()));
224
225 // Can't send/receive messages after either side has left.
226 receivers()->clear();
227 message.reset(new content::PresentationSessionMessage(
228 content::PresentationMessageType::TEXT));
229 message->message = sender_message_text;
230 EXPECT_CALL(*mock_controller_messages_callback(), OnMessageSent(false));
231 EXPECT_CALL(*mock_receiver_messages_callback(), DoOnMessagesReceived(_))
232 .Times(0);
233 EXPECT_CALL(*mock_controller_messages_callback(), DoOnMessagesReceived(_))
234 .Times(0);
235 controller_connection->SendMessage(
236 std::move(message),
237 base::Bind(&MockPresentationMessagesCallback::OnMessageSent,
238 base::Unretained(mock_controller_messages_callback())));
239 }
240
241 } // namespace media_router
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698