| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 <string> | 5 #include <string> |
| 6 | 6 |
| 7 #include "base/memory/ref_counted.h" | 7 #include "base/memory/ref_counted.h" |
| 8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
| 9 #include "base/memory/scoped_vector.h" | 9 #include "base/memory/scoped_vector.h" |
| 10 #include "net/base/net_util.h" | 10 #include "net/base/net_util.h" |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 125 SSLSocketDataProvider ssl_data2(ASYNC, ERR_SSL_PROTOCOL_ERROR); | 125 SSLSocketDataProvider ssl_data2(ASYNC, ERR_SSL_PROTOCOL_ERROR); |
| 126 mock_socket_factory_.AddSSLSocketDataProvider(&ssl_data2); | 126 mock_socket_factory_.AddSSLSocketDataProvider(&ssl_data2); |
| 127 StaticSocketDataProvider data2(NULL, 0, NULL, 0); | 127 StaticSocketDataProvider data2(NULL, 0, NULL, 0); |
| 128 mock_socket_factory_.AddSocketDataProvider(&data2); | 128 mock_socket_factory_.AddSocketDataProvider(&data2); |
| 129 | 129 |
| 130 scoped_refptr<HttpNetworkSession> session( | 130 scoped_refptr<HttpNetworkSession> session( |
| 131 new HttpNetworkSession(session_params_)); | 131 new HttpNetworkSession(session_params_)); |
| 132 scoped_ptr<HttpNetworkTransaction> trans( | 132 scoped_ptr<HttpNetworkTransaction> trans( |
| 133 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 133 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 134 | 134 |
| 135 SSLConfig& ssl_config = GetServerSSLConfig(trans.get()); | |
| 136 ssl_config.unrestricted_ssl3_fallback_enabled = false; | |
| 137 | |
| 138 TestCompletionCallback callback; | 135 TestCompletionCallback callback; |
| 139 // This will consume only |ssl_data1|. |ssl_data2| will not be consumed. | 136 // This will consume only |ssl_data1|. |ssl_data2| will not be consumed. |
| 140 int rv = callback.GetResult( | 137 int rv = callback.GetResult( |
| 141 trans->Start(GetRequestInfo("https://www.google.com/"), | 138 trans->Start(GetRequestInfo("https://www.google.com/"), |
| 142 callback.callback(), BoundNetLog())); | 139 callback.callback(), BoundNetLog())); |
| 143 EXPECT_EQ(ERR_SSL_PROTOCOL_ERROR, rv); | 140 EXPECT_EQ(ERR_SSL_PROTOCOL_ERROR, rv); |
| 144 | 141 |
| 145 SocketDataProviderArray<SocketDataProvider>& mock_data = | 142 SocketDataProviderArray<SocketDataProvider>& mock_data = |
| 146 mock_socket_factory_.mock_data(); | 143 mock_socket_factory_.mock_data(); |
| 147 // Confirms that only |ssl_data1| is consumed. | 144 // Confirms that only |ssl_data1| is consumed. |
| 148 EXPECT_EQ(1u, mock_data.next_index()); | 145 EXPECT_EQ(1u, mock_data.next_index()); |
| 149 | 146 |
| 147 SSLConfig& ssl_config = GetServerSSLConfig(trans.get()); |
| 150 // |version_max| never fallbacks to SSLv3 for Google properties. | 148 // |version_max| never fallbacks to SSLv3 for Google properties. |
| 151 EXPECT_EQ(SSL_PROTOCOL_VERSION_TLS1, ssl_config.version_max); | 149 EXPECT_EQ(SSL_PROTOCOL_VERSION_TLS1, ssl_config.version_max); |
| 152 EXPECT_FALSE(ssl_config.version_fallback); | 150 EXPECT_FALSE(ssl_config.version_fallback); |
| 153 } | 151 } |
| 154 | 152 |
| 155 // Tests that HttpNetworkTransaction attempts to fallback to SSL 3.0 | 153 // Tests that HttpNetworkTransaction attempts to fallback to SSL 3.0 |
| 156 // when a TLS 1.0 handshake fails and: | 154 // when a TLS 1.0 handshake fails and: |
| 157 // * the site is pinned to the Google pin list (indicating that | 155 // * the site is pinned to the Google pin list (indicating that |
| 158 // it is a Google site); | 156 // it is a Google site); |
| 159 // * unrestricted SSL 3.0 fallback is enabled. | 157 // * unrestricted SSL 3.0 fallback is enabled. |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 218 SSLSocketDataProvider ssl_data2(ASYNC, ERR_SSL_PROTOCOL_ERROR); | 216 SSLSocketDataProvider ssl_data2(ASYNC, ERR_SSL_PROTOCOL_ERROR); |
| 219 mock_socket_factory_.AddSSLSocketDataProvider(&ssl_data2); | 217 mock_socket_factory_.AddSSLSocketDataProvider(&ssl_data2); |
| 220 StaticSocketDataProvider data2(NULL, 0, NULL, 0); | 218 StaticSocketDataProvider data2(NULL, 0, NULL, 0); |
| 221 mock_socket_factory_.AddSocketDataProvider(&data2); | 219 mock_socket_factory_.AddSocketDataProvider(&data2); |
| 222 | 220 |
| 223 scoped_refptr<HttpNetworkSession> session( | 221 scoped_refptr<HttpNetworkSession> session( |
| 224 new HttpNetworkSession(session_params_)); | 222 new HttpNetworkSession(session_params_)); |
| 225 scoped_ptr<HttpNetworkTransaction> trans( | 223 scoped_ptr<HttpNetworkTransaction> trans( |
| 226 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 224 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 227 | 225 |
| 228 SSLConfig& ssl_config = GetServerSSLConfig(trans.get()); | |
| 229 ssl_config.unrestricted_ssl3_fallback_enabled = false; | |
| 230 | |
| 231 TestCompletionCallback callback; | 226 TestCompletionCallback callback; |
| 232 // This will consume |ssl_data1| and |ssl_data2|. | 227 // This will consume |ssl_data1| and |ssl_data2|. |
| 233 int rv = callback.GetResult( | 228 int rv = callback.GetResult( |
| 234 trans->Start(GetRequestInfo("https://www.paypal.com/"), | 229 trans->Start(GetRequestInfo("https://www.paypal.com/"), |
| 235 callback.callback(), BoundNetLog())); | 230 callback.callback(), BoundNetLog())); |
| 236 EXPECT_EQ(ERR_SSL_PROTOCOL_ERROR, rv); | 231 EXPECT_EQ(ERR_SSL_PROTOCOL_ERROR, rv); |
| 237 | 232 |
| 238 SocketDataProviderArray<SocketDataProvider>& mock_data = | 233 SocketDataProviderArray<SocketDataProvider>& mock_data = |
| 239 mock_socket_factory_.mock_data(); | 234 mock_socket_factory_.mock_data(); |
| 240 // Confirms that both |ssl_data1| and |ssl_data2| are consumed. | 235 // Confirms that both |ssl_data1| and |ssl_data2| are consumed. |
| 241 EXPECT_EQ(2u, mock_data.next_index()); | 236 EXPECT_EQ(2u, mock_data.next_index()); |
| 242 | 237 |
| 238 SSLConfig& ssl_config = GetServerSSLConfig(trans.get()); |
| 243 // |version_max| fallbacks to SSL 3.0. | 239 // |version_max| fallbacks to SSL 3.0. |
| 244 EXPECT_EQ(SSL_PROTOCOL_VERSION_SSL3, ssl_config.version_max); | 240 EXPECT_EQ(SSL_PROTOCOL_VERSION_SSL3, ssl_config.version_max); |
| 245 EXPECT_TRUE(ssl_config.version_fallback); | 241 EXPECT_TRUE(ssl_config.version_fallback); |
| 246 } | 242 } |
| 247 | 243 |
| 248 // Tests that HttpNetworkTransaction attempts to fallback from | 244 // Tests that HttpNetworkTransaction attempts to fallback from |
| 249 // TLS 1.1 to TLS 1.0, then from TLS 1.0 to SSL 3.0. | 245 // TLS 1.1 to TLS 1.0, then from TLS 1.0 to SSL 3.0. |
| 250 TEST_F(HttpNetworkTransactionSSLTest, SSLFallback) { | 246 TEST_F(HttpNetworkTransactionSSLTest, SSLFallback) { |
| 251 ssl_config_service_ = new TLS11SSLConfigService; | 247 ssl_config_service_ = new TLS11SSLConfigService; |
| 252 session_params_.ssl_config_service = ssl_config_service_.get(); | 248 session_params_.ssl_config_service = ssl_config_service_.get(); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 271 SSLSocketDataProvider ssl_data3(ASYNC, ERR_SSL_PROTOCOL_ERROR); | 267 SSLSocketDataProvider ssl_data3(ASYNC, ERR_SSL_PROTOCOL_ERROR); |
| 272 mock_socket_factory_.AddSSLSocketDataProvider(&ssl_data3); | 268 mock_socket_factory_.AddSSLSocketDataProvider(&ssl_data3); |
| 273 StaticSocketDataProvider data3(NULL, 0, NULL, 0); | 269 StaticSocketDataProvider data3(NULL, 0, NULL, 0); |
| 274 mock_socket_factory_.AddSocketDataProvider(&data3); | 270 mock_socket_factory_.AddSocketDataProvider(&data3); |
| 275 | 271 |
| 276 scoped_refptr<HttpNetworkSession> session( | 272 scoped_refptr<HttpNetworkSession> session( |
| 277 new HttpNetworkSession(session_params_)); | 273 new HttpNetworkSession(session_params_)); |
| 278 scoped_ptr<HttpNetworkTransaction> trans( | 274 scoped_ptr<HttpNetworkTransaction> trans( |
| 279 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 275 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 280 | 276 |
| 281 SSLConfig& ssl_config = GetServerSSLConfig(trans.get()); | |
| 282 ssl_config.unrestricted_ssl3_fallback_enabled = true; | |
| 283 | |
| 284 TestCompletionCallback callback; | 277 TestCompletionCallback callback; |
| 285 // This will consume |ssl_data1|, |ssl_data2| and |ssl_data3|. | 278 // This will consume |ssl_data1|, |ssl_data2| and |ssl_data3|. |
| 286 int rv = callback.GetResult( | 279 int rv = callback.GetResult( |
| 287 trans->Start(GetRequestInfo("https://www.paypal.com/"), | 280 trans->Start(GetRequestInfo("https://www.paypal.com/"), |
| 288 callback.callback(), BoundNetLog())); | 281 callback.callback(), BoundNetLog())); |
| 289 EXPECT_EQ(ERR_SSL_PROTOCOL_ERROR, rv); | 282 EXPECT_EQ(ERR_SSL_PROTOCOL_ERROR, rv); |
| 290 | 283 |
| 291 SocketDataProviderArray<SocketDataProvider>& mock_data = | 284 SocketDataProviderArray<SocketDataProvider>& mock_data = |
| 292 mock_socket_factory_.mock_data(); | 285 mock_socket_factory_.mock_data(); |
| 293 // Confirms that |ssl_data1|, |ssl_data2| and |ssl_data3| are consumed. | 286 // Confirms that |ssl_data1|, |ssl_data2| and |ssl_data3| are consumed. |
| 294 EXPECT_EQ(3u, mock_data.next_index()); | 287 EXPECT_EQ(3u, mock_data.next_index()); |
| 295 | 288 |
| 289 SSLConfig& ssl_config = GetServerSSLConfig(trans.get()); |
| 296 // |version_max| fallbacks to SSL 3.0. | 290 // |version_max| fallbacks to SSL 3.0. |
| 297 EXPECT_EQ(SSL_PROTOCOL_VERSION_SSL3, ssl_config.version_max); | 291 EXPECT_EQ(SSL_PROTOCOL_VERSION_SSL3, ssl_config.version_max); |
| 298 EXPECT_TRUE(ssl_config.version_fallback); | 292 EXPECT_TRUE(ssl_config.version_fallback); |
| 299 } | 293 } |
| 300 | 294 |
| 301 } // namespace net | 295 } // namespace net |
| 302 | 296 |
| OLD | NEW |