| 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_policy |= 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 |