OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "extensions/browser/api/cast_channel/cast_socket.h" | 5 #include "extensions/browser/api/cast_channel/cast_socket.h" |
6 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/memory/weak_ptr.h" | 9 #include "base/memory/weak_ptr.h" |
10 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
11 #include "base/run_loop.h" | 11 #include "base/run_loop.h" |
12 #include "base/strings/string_number_conversions.h" | 12 #include "base/strings/string_number_conversions.h" |
13 #include "base/sys_byteorder.h" | 13 #include "base/sys_byteorder.h" |
14 #include "base/test/simple_test_tick_clock.h" | 14 #include "base/test/simple_test_tick_clock.h" |
15 #include "base/timer/mock_timer.h" | 15 #include "base/timer/mock_timer.h" |
| 16 #include "extensions/browser/api/cast_channel/cast_auth_util.h" |
16 #include "extensions/browser/api/cast_channel/cast_framer.h" | 17 #include "extensions/browser/api/cast_channel/cast_framer.h" |
17 #include "extensions/browser/api/cast_channel/cast_message_util.h" | 18 #include "extensions/browser/api/cast_channel/cast_message_util.h" |
18 #include "extensions/browser/api/cast_channel/cast_transport.h" | 19 #include "extensions/browser/api/cast_channel/cast_transport.h" |
19 #include "extensions/browser/api/cast_channel/logger.h" | 20 #include "extensions/browser/api/cast_channel/logger.h" |
20 #include "extensions/browser/api/cast_channel/test_util.h" | 21 #include "extensions/browser/api/cast_channel/test_util.h" |
21 #include "extensions/common/api/cast_channel/cast_channel.pb.h" | 22 #include "extensions/common/api/cast_channel/cast_channel.pb.h" |
22 #include "net/base/address_list.h" | 23 #include "net/base/address_list.h" |
23 #include "net/base/capturing_net_log.h" | 24 #include "net/base/capturing_net_log.h" |
24 #include "net/base/net_errors.h" | 25 #include "net/base/net_errors.h" |
25 #include "net/base/net_util.h" | 26 #include "net/base/net_util.h" |
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
168 MOCK_METHOD1(OnConnectComplete, void(ChannelError error_state)); | 169 MOCK_METHOD1(OnConnectComplete, void(ChannelError error_state)); |
169 MOCK_METHOD1(OnWriteComplete, void(int result)); | 170 MOCK_METHOD1(OnWriteComplete, void(int result)); |
170 MOCK_METHOD1(OnReadComplete, void(int result)); | 171 MOCK_METHOD1(OnReadComplete, void(int result)); |
171 | 172 |
172 private: | 173 private: |
173 DISALLOW_COPY_AND_ASSIGN(CompleteHandler); | 174 DISALLOW_COPY_AND_ASSIGN(CompleteHandler); |
174 }; | 175 }; |
175 | 176 |
176 class TestCastSocket : public CastSocketImpl { | 177 class TestCastSocket : public CastSocketImpl { |
177 public: | 178 public: |
178 static scoped_ptr<TestCastSocket> Create(Logger* logger) { | 179 static scoped_ptr<TestCastSocket> Create( |
| 180 Logger* logger, |
| 181 long device_capabilities = cast_channel::CastDeviceCapability::NONE) { |
179 return scoped_ptr<TestCastSocket>( | 182 return scoped_ptr<TestCastSocket>( |
180 new TestCastSocket(CreateIPEndPointForTest(), CHANNEL_AUTH_TYPE_SSL, | 183 new TestCastSocket(CreateIPEndPointForTest(), CHANNEL_AUTH_TYPE_SSL, |
181 kDistantTimeoutMillis, logger)); | 184 kDistantTimeoutMillis, logger, device_capabilities)); |
182 } | 185 } |
183 | 186 |
184 static scoped_ptr<TestCastSocket> CreateSecure(Logger* logger) { | 187 static scoped_ptr<TestCastSocket> CreateSecure( |
| 188 Logger* logger, |
| 189 long device_capabilities = cast_channel::CastDeviceCapability::NONE) { |
185 return scoped_ptr<TestCastSocket>(new TestCastSocket( | 190 return scoped_ptr<TestCastSocket>(new TestCastSocket( |
186 CreateIPEndPointForTest(), CHANNEL_AUTH_TYPE_SSL_VERIFIED, | 191 CreateIPEndPointForTest(), CHANNEL_AUTH_TYPE_SSL_VERIFIED, |
187 kDistantTimeoutMillis, logger)); | 192 kDistantTimeoutMillis, logger, device_capabilities)); |
188 } | 193 } |
189 | 194 |
190 explicit TestCastSocket(const net::IPEndPoint& ip_endpoint, | 195 explicit TestCastSocket(const net::IPEndPoint& ip_endpoint, |
191 ChannelAuthType channel_auth, | 196 ChannelAuthType channel_auth, |
192 int64 timeout_ms, | 197 int64 timeout_ms, |
193 Logger* logger) | 198 Logger* logger, |
| 199 long device_capabilities) |
194 : CastSocketImpl("some_extension_id", | 200 : CastSocketImpl("some_extension_id", |
195 ip_endpoint, | 201 ip_endpoint, |
196 channel_auth, | 202 channel_auth, |
197 &capturing_net_log_, | 203 &capturing_net_log_, |
198 base::TimeDelta::FromMilliseconds(timeout_ms), | 204 base::TimeDelta::FromMilliseconds(timeout_ms), |
199 logger), | 205 logger, |
| 206 device_capabilities), |
200 ip_(ip_endpoint), | 207 ip_(ip_endpoint), |
201 connect_index_(0), | 208 connect_index_(0), |
202 extract_cert_result_(true), | 209 extract_cert_result_(true), |
203 verify_challenge_result_(true), | 210 verify_challenge_result_(true), |
204 verify_challenge_disallow_(false), | 211 verify_challenge_disallow_(false), |
205 tcp_unresponsive_(false), | 212 tcp_unresponsive_(false), |
206 mock_timer_(new base::MockTimer(false, false)), | 213 mock_timer_(new base::MockTimer(false, false)), |
207 mock_transport_(NULL) {} | 214 mock_transport_(NULL) {} |
208 | 215 |
209 ~TestCastSocket() override {} | 216 ~TestCastSocket() override {} |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
255 } | 262 } |
256 | 263 |
257 void SetVerifyChallengeResult(bool value) { | 264 void SetVerifyChallengeResult(bool value) { |
258 verify_challenge_result_ = value; | 265 verify_challenge_result_ = value; |
259 } | 266 } |
260 | 267 |
261 void TriggerTimeout() { | 268 void TriggerTimeout() { |
262 mock_timer_->Fire(); | 269 mock_timer_->Fire(); |
263 } | 270 } |
264 | 271 |
| 272 bool TestVerifyChannelPolicyNone() { |
| 273 AuthResult authResult; |
| 274 return VerifyChannelPolicy(authResult); |
| 275 } |
| 276 |
| 277 bool TestVerifyChannelPolicyAudioOnly() { |
| 278 AuthResult authResult; |
| 279 authResult.channel_policies |= AuthResult::POLICY_AUDIO_ONLY; |
| 280 return VerifyChannelPolicy(authResult); |
| 281 } |
| 282 |
265 void DisallowVerifyChallengeResult() { verify_challenge_disallow_ = true; } | 283 void DisallowVerifyChallengeResult() { verify_challenge_disallow_ = true; } |
266 | 284 |
267 MockCastTransport* GetMockTransport() { | 285 MockCastTransport* GetMockTransport() { |
268 CHECK(mock_transport_); | 286 CHECK(mock_transport_); |
269 return mock_transport_; | 287 return mock_transport_; |
270 } | 288 } |
271 | 289 |
272 private: | 290 private: |
273 scoped_ptr<net::TCPClientSocket> CreateTcpSocket() override { | 291 scoped_ptr<net::TCPClientSocket> CreateTcpSocket() override { |
274 if (tcp_unresponsive_) { | 292 if (tcp_unresponsive_) { |
(...skipping 579 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
854 // Send the test message through a real transport object. | 872 // Send the test message through a real transport object. |
855 EXPECT_CALL(handler_, OnWriteComplete(net::OK)); | 873 EXPECT_CALL(handler_, OnWriteComplete(net::OK)); |
856 socket_->transport()->SendMessage( | 874 socket_->transport()->SendMessage( |
857 test_message, base::Bind(&CompleteHandler::OnWriteComplete, | 875 test_message, base::Bind(&CompleteHandler::OnWriteComplete, |
858 base::Unretained(&handler_))); | 876 base::Unretained(&handler_))); |
859 RunPendingTasks(); | 877 RunPendingTasks(); |
860 | 878 |
861 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); | 879 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); |
862 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); | 880 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); |
863 } | 881 } |
| 882 |
| 883 // Tests channel policy verification for device with no capabilities. |
| 884 TEST_F(CastSocketTest, TestChannelPolicyVerificationCapabilitiesNone) { |
| 885 socket_ = |
| 886 TestCastSocket::Create(logger_, cast_channel::CastDeviceCapability::NONE); |
| 887 EXPECT_TRUE(socket_->TestVerifyChannelPolicyNone()); |
| 888 EXPECT_TRUE(socket_->TestVerifyChannelPolicyAudioOnly()); |
| 889 } |
| 890 |
| 891 // Tests channel policy verification for device with video out capability. |
| 892 TEST_F(CastSocketTest, TestChannelPolicyVerificationCapabilitiesVideoOut) { |
| 893 socket_ = TestCastSocket::Create( |
| 894 logger_, cast_channel::CastDeviceCapability::VIDEO_OUT); |
| 895 EXPECT_TRUE(socket_->TestVerifyChannelPolicyNone()); |
| 896 EXPECT_FALSE(socket_->TestVerifyChannelPolicyAudioOnly()); |
| 897 } |
864 } // namespace cast_channel | 898 } // namespace cast_channel |
865 } // namespace core_api | 899 } // namespace core_api |
866 } // namespace extensions | 900 } // namespace extensions |
OLD | NEW |