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

Side by Side Diff: net/http/http_stream_factory_impl_unittest.cc

Issue 2067843003: Require a CTVerifier and CTPolicyEnforcer for TLS/QUIC sockets (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixup 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
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 "net/http/http_stream_factory_impl.h" 5 #include "net/http/http_stream_factory_impl.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 #include <string> 8 #include <string>
9 #include <utility> 9 #include <utility>
10 #include <vector> 10 #include <vector>
11 11
12 #include "base/compiler_specific.h" 12 #include "base/compiler_specific.h"
13 #include "base/macros.h" 13 #include "base/macros.h"
14 #include "base/run_loop.h" 14 #include "base/run_loop.h"
15 #include "net/base/port_util.h" 15 #include "net/base/port_util.h"
16 #include "net/base/test_completion_callback.h" 16 #include "net/base/test_completion_callback.h"
17 #include "net/base/test_data_directory.h" 17 #include "net/base/test_data_directory.h"
18 #include "net/cert/ct_policy_enforcer.h"
18 #include "net/cert/mock_cert_verifier.h" 19 #include "net/cert/mock_cert_verifier.h"
20 #include "net/cert/multi_log_ct_verifier.h"
19 #include "net/dns/mock_host_resolver.h" 21 #include "net/dns/mock_host_resolver.h"
20 #include "net/http/bidirectional_stream_impl.h" 22 #include "net/http/bidirectional_stream_impl.h"
21 #include "net/http/bidirectional_stream_request_info.h" 23 #include "net/http/bidirectional_stream_request_info.h"
22 #include "net/http/http_auth_handler_factory.h" 24 #include "net/http/http_auth_handler_factory.h"
23 #include "net/http/http_network_session.h" 25 #include "net/http/http_network_session.h"
24 #include "net/http/http_network_session_peer.h" 26 #include "net/http/http_network_session_peer.h"
25 #include "net/http/http_network_transaction.h" 27 #include "net/http/http_network_transaction.h"
26 #include "net/http/http_request_info.h" 28 #include "net/http/http_request_info.h"
27 #include "net/http/http_server_properties.h" 29 #include "net/http/http_server_properties.h"
28 #include "net/http/http_server_properties_impl.h" 30 #include "net/http/http_server_properties_impl.h"
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after
355 HttpNetworkSession* session) { 357 HttpNetworkSession* session) {
356 GURL url = test.ssl ? GURL("https://www.google.com") : 358 GURL url = test.ssl ? GURL("https://www.google.com") :
357 GURL("http://www.google.com"); 359 GURL("http://www.google.com");
358 PreconnectHelperForURL(test.num_streams, url, session); 360 PreconnectHelperForURL(test.num_streams, url, session);
359 } 361 }
360 362
361 template<typename ParentPool> 363 template<typename ParentPool>
362 class CapturePreconnectsSocketPool : public ParentPool { 364 class CapturePreconnectsSocketPool : public ParentPool {
363 public: 365 public:
364 CapturePreconnectsSocketPool(HostResolver* host_resolver, 366 CapturePreconnectsSocketPool(HostResolver* host_resolver,
365 CertVerifier* cert_verifier); 367 CertVerifier* cert_verifier,
368 TransportSecurityState* transport_security_state,
369 CTVerifier* cert_transparency_verifier,
370 CTPolicyEnforcer* ct_policy_enforcer);
366 371
367 int last_num_streams() const { 372 int last_num_streams() const {
368 return last_num_streams_; 373 return last_num_streams_;
369 } 374 }
370 375
371 int RequestSocket(const std::string& group_name, 376 int RequestSocket(const std::string& group_name,
372 const void* socket_params, 377 const void* socket_params,
373 RequestPriority priority, 378 RequestPriority priority,
374 ClientSocketPool::RespectLimits respect_limits, 379 ClientSocketPool::RespectLimits respect_limits,
375 ClientSocketHandle* handle, 380 ClientSocketHandle* handle,
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
422 typedef CapturePreconnectsSocketPool<HttpProxyClientSocketPool> 427 typedef CapturePreconnectsSocketPool<HttpProxyClientSocketPool>
423 CapturePreconnectsHttpProxySocketPool; 428 CapturePreconnectsHttpProxySocketPool;
424 typedef CapturePreconnectsSocketPool<SOCKSClientSocketPool> 429 typedef CapturePreconnectsSocketPool<SOCKSClientSocketPool>
425 CapturePreconnectsSOCKSSocketPool; 430 CapturePreconnectsSOCKSSocketPool;
426 typedef CapturePreconnectsSocketPool<SSLClientSocketPool> 431 typedef CapturePreconnectsSocketPool<SSLClientSocketPool>
427 CapturePreconnectsSSLSocketPool; 432 CapturePreconnectsSSLSocketPool;
428 433
429 template <typename ParentPool> 434 template <typename ParentPool>
430 CapturePreconnectsSocketPool<ParentPool>::CapturePreconnectsSocketPool( 435 CapturePreconnectsSocketPool<ParentPool>::CapturePreconnectsSocketPool(
431 HostResolver* host_resolver, 436 HostResolver* host_resolver,
432 CertVerifier* /* cert_verifier */) 437 CertVerifier*,
438 TransportSecurityState*,
439 CTVerifier*,
440 CTPolicyEnforcer*)
433 : ParentPool(0, 0, host_resolver, nullptr, nullptr, nullptr), 441 : ParentPool(0, 0, host_resolver, nullptr, nullptr, nullptr),
434 last_num_streams_(-1) {} 442 last_num_streams_(-1) {}
435 443
436 template <> 444 template <>
437 CapturePreconnectsHttpProxySocketPool::CapturePreconnectsSocketPool( 445 CapturePreconnectsHttpProxySocketPool::CapturePreconnectsSocketPool(
438 HostResolver* /* host_resolver */, 446 HostResolver*,
439 CertVerifier* /* cert_verifier */) 447 CertVerifier*,
448 TransportSecurityState*,
449 CTVerifier*,
450 CTPolicyEnforcer*)
440 : HttpProxyClientSocketPool(0, 0, nullptr, nullptr, nullptr), 451 : HttpProxyClientSocketPool(0, 0, nullptr, nullptr, nullptr),
441 last_num_streams_(-1) { 452 last_num_streams_(-1) {}
442 }
443 453
444 template <> 454 template <>
445 CapturePreconnectsSSLSocketPool::CapturePreconnectsSocketPool( 455 CapturePreconnectsSSLSocketPool::CapturePreconnectsSocketPool(
446 HostResolver* /* host_resolver */, 456 HostResolver* /* host_resolver */,
447 CertVerifier* cert_verifier) 457 CertVerifier* cert_verifier,
458 TransportSecurityState* transport_security_state,
459 CTVerifier* cert_transparency_verifier,
460 CTPolicyEnforcer* ct_policy_enforcer)
448 : SSLClientSocketPool(0, 461 : SSLClientSocketPool(0,
449 0, 462 0,
450 cert_verifier, 463 cert_verifier,
451 nullptr, // channel_id_store 464 nullptr, // channel_id_store
452 nullptr, // transport_security_state 465 transport_security_state,
453 nullptr, // cert_transparency_verifier 466 cert_transparency_verifier,
454 nullptr, // ct_policy_enforcer 467 ct_policy_enforcer,
455 std::string(), // ssl_session_cache_shard 468 std::string(), // ssl_session_cache_shard
456 nullptr, // deterministic_socket_factory 469 nullptr, // deterministic_socket_factory
457 nullptr, // transport_socket_pool 470 nullptr, // transport_socket_pool
458 nullptr, 471 nullptr,
459 nullptr, 472 nullptr,
460 nullptr, // ssl_config_service 473 nullptr, // ssl_config_service
461 nullptr), // net_log 474 nullptr), // net_log
462 last_num_streams_(-1) { 475 last_num_streams_(-1) {}
463 }
464 476
465 class HttpStreamFactoryTest : public ::testing::Test, 477 class HttpStreamFactoryTest : public ::testing::Test,
466 public ::testing::WithParamInterface<NextProto> { 478 public ::testing::WithParamInterface<NextProto> {
467 }; 479 };
468 480
469 INSTANTIATE_TEST_CASE_P(NextProto, 481 INSTANTIATE_TEST_CASE_P(NextProto,
470 HttpStreamFactoryTest, 482 HttpStreamFactoryTest,
471 testing::Values(kProtoSPDY31, 483 testing::Values(kProtoSPDY31,
472 kProtoHTTP2)); 484 kProtoHTTP2));
473 485
474 TEST_P(HttpStreamFactoryTest, PreconnectDirect) { 486 TEST_P(HttpStreamFactoryTest, PreconnectDirect) {
475 for (size_t i = 0; i < arraysize(kTests); ++i) { 487 for (size_t i = 0; i < arraysize(kTests); ++i) {
476 SpdySessionDependencies session_deps( 488 SpdySessionDependencies session_deps(
477 GetParam(), ProxyService::CreateDirect()); 489 GetParam(), ProxyService::CreateDirect());
478 std::unique_ptr<HttpNetworkSession> session( 490 std::unique_ptr<HttpNetworkSession> session(
479 SpdySessionDependencies::SpdyCreateSession(&session_deps)); 491 SpdySessionDependencies::SpdyCreateSession(&session_deps));
480 HttpNetworkSessionPeer peer(session.get()); 492 HttpNetworkSessionPeer peer(session.get());
481 CapturePreconnectsTransportSocketPool* transport_conn_pool = 493 CapturePreconnectsTransportSocketPool* transport_conn_pool =
482 new CapturePreconnectsTransportSocketPool( 494 new CapturePreconnectsTransportSocketPool(
483 session_deps.host_resolver.get(), 495 session_deps.host_resolver.get(), session_deps.cert_verifier.get(),
484 session_deps.cert_verifier.get()); 496 session_deps.transport_security_state.get(),
497 session_deps.cert_transparency_verifier.get(),
498 session_deps.ct_policy_enforcer.get());
485 CapturePreconnectsSSLSocketPool* ssl_conn_pool = 499 CapturePreconnectsSSLSocketPool* ssl_conn_pool =
486 new CapturePreconnectsSSLSocketPool( 500 new CapturePreconnectsSSLSocketPool(
487 session_deps.host_resolver.get(), 501 session_deps.host_resolver.get(), session_deps.cert_verifier.get(),
488 session_deps.cert_verifier.get()); 502 session_deps.transport_security_state.get(),
503 session_deps.cert_transparency_verifier.get(),
504 session_deps.ct_policy_enforcer.get());
489 std::unique_ptr<MockClientSocketPoolManager> mock_pool_manager( 505 std::unique_ptr<MockClientSocketPoolManager> mock_pool_manager(
490 new MockClientSocketPoolManager); 506 new MockClientSocketPoolManager);
491 mock_pool_manager->SetTransportSocketPool(transport_conn_pool); 507 mock_pool_manager->SetTransportSocketPool(transport_conn_pool);
492 mock_pool_manager->SetSSLSocketPool(ssl_conn_pool); 508 mock_pool_manager->SetSSLSocketPool(ssl_conn_pool);
493 peer.SetClientSocketPoolManager(std::move(mock_pool_manager)); 509 peer.SetClientSocketPoolManager(std::move(mock_pool_manager));
494 PreconnectHelper(kTests[i], session.get()); 510 PreconnectHelper(kTests[i], session.get());
495 if (kTests[i].ssl) 511 if (kTests[i].ssl)
496 EXPECT_EQ(kTests[i].num_streams, ssl_conn_pool->last_num_streams()); 512 EXPECT_EQ(kTests[i].num_streams, ssl_conn_pool->last_num_streams());
497 else 513 else
498 EXPECT_EQ(kTests[i].num_streams, transport_conn_pool->last_num_streams()); 514 EXPECT_EQ(kTests[i].num_streams, transport_conn_pool->last_num_streams());
499 } 515 }
500 } 516 }
501 517
502 TEST_P(HttpStreamFactoryTest, PreconnectHttpProxy) { 518 TEST_P(HttpStreamFactoryTest, PreconnectHttpProxy) {
503 for (size_t i = 0; i < arraysize(kTests); ++i) { 519 for (size_t i = 0; i < arraysize(kTests); ++i) {
504 SpdySessionDependencies session_deps( 520 SpdySessionDependencies session_deps(
505 GetParam(), ProxyService::CreateFixed("http_proxy")); 521 GetParam(), ProxyService::CreateFixed("http_proxy"));
506 std::unique_ptr<HttpNetworkSession> session( 522 std::unique_ptr<HttpNetworkSession> session(
507 SpdySessionDependencies::SpdyCreateSession(&session_deps)); 523 SpdySessionDependencies::SpdyCreateSession(&session_deps));
508 HttpNetworkSessionPeer peer(session.get()); 524 HttpNetworkSessionPeer peer(session.get());
509 HostPortPair proxy_host("http_proxy", 80); 525 HostPortPair proxy_host("http_proxy", 80);
510 CapturePreconnectsHttpProxySocketPool* http_proxy_pool = 526 CapturePreconnectsHttpProxySocketPool* http_proxy_pool =
511 new CapturePreconnectsHttpProxySocketPool( 527 new CapturePreconnectsHttpProxySocketPool(
512 session_deps.host_resolver.get(), 528 session_deps.host_resolver.get(), session_deps.cert_verifier.get(),
513 session_deps.cert_verifier.get()); 529 session_deps.transport_security_state.get(),
530 session_deps.cert_transparency_verifier.get(),
531 session_deps.ct_policy_enforcer.get());
514 CapturePreconnectsSSLSocketPool* ssl_conn_pool = 532 CapturePreconnectsSSLSocketPool* ssl_conn_pool =
515 new CapturePreconnectsSSLSocketPool( 533 new CapturePreconnectsSSLSocketPool(
516 session_deps.host_resolver.get(), 534 session_deps.host_resolver.get(), session_deps.cert_verifier.get(),
517 session_deps.cert_verifier.get()); 535 session_deps.transport_security_state.get(),
536 session_deps.cert_transparency_verifier.get(),
537 session_deps.ct_policy_enforcer.get());
518 std::unique_ptr<MockClientSocketPoolManager> mock_pool_manager( 538 std::unique_ptr<MockClientSocketPoolManager> mock_pool_manager(
519 new MockClientSocketPoolManager); 539 new MockClientSocketPoolManager);
520 mock_pool_manager->SetSocketPoolForHTTPProxy(proxy_host, http_proxy_pool); 540 mock_pool_manager->SetSocketPoolForHTTPProxy(proxy_host, http_proxy_pool);
521 mock_pool_manager->SetSocketPoolForSSLWithProxy(proxy_host, ssl_conn_pool); 541 mock_pool_manager->SetSocketPoolForSSLWithProxy(proxy_host, ssl_conn_pool);
522 peer.SetClientSocketPoolManager(std::move(mock_pool_manager)); 542 peer.SetClientSocketPoolManager(std::move(mock_pool_manager));
523 PreconnectHelper(kTests[i], session.get()); 543 PreconnectHelper(kTests[i], session.get());
524 if (kTests[i].ssl) 544 if (kTests[i].ssl)
525 EXPECT_EQ(kTests[i].num_streams, ssl_conn_pool->last_num_streams()); 545 EXPECT_EQ(kTests[i].num_streams, ssl_conn_pool->last_num_streams());
526 else 546 else
527 EXPECT_EQ(kTests[i].num_streams, http_proxy_pool->last_num_streams()); 547 EXPECT_EQ(kTests[i].num_streams, http_proxy_pool->last_num_streams());
528 } 548 }
529 } 549 }
530 550
531 TEST_P(HttpStreamFactoryTest, PreconnectSocksProxy) { 551 TEST_P(HttpStreamFactoryTest, PreconnectSocksProxy) {
532 for (size_t i = 0; i < arraysize(kTests); ++i) { 552 for (size_t i = 0; i < arraysize(kTests); ++i) {
533 SpdySessionDependencies session_deps( 553 SpdySessionDependencies session_deps(
534 GetParam(), ProxyService::CreateFixed("socks4://socks_proxy:1080")); 554 GetParam(), ProxyService::CreateFixed("socks4://socks_proxy:1080"));
535 std::unique_ptr<HttpNetworkSession> session( 555 std::unique_ptr<HttpNetworkSession> session(
536 SpdySessionDependencies::SpdyCreateSession(&session_deps)); 556 SpdySessionDependencies::SpdyCreateSession(&session_deps));
537 HttpNetworkSessionPeer peer(session.get()); 557 HttpNetworkSessionPeer peer(session.get());
538 HostPortPair proxy_host("socks_proxy", 1080); 558 HostPortPair proxy_host("socks_proxy", 1080);
539 CapturePreconnectsSOCKSSocketPool* socks_proxy_pool = 559 CapturePreconnectsSOCKSSocketPool* socks_proxy_pool =
540 new CapturePreconnectsSOCKSSocketPool( 560 new CapturePreconnectsSOCKSSocketPool(
541 session_deps.host_resolver.get(), 561 session_deps.host_resolver.get(), session_deps.cert_verifier.get(),
542 session_deps.cert_verifier.get()); 562 session_deps.transport_security_state.get(),
563 session_deps.cert_transparency_verifier.get(),
564 session_deps.ct_policy_enforcer.get());
543 CapturePreconnectsSSLSocketPool* ssl_conn_pool = 565 CapturePreconnectsSSLSocketPool* ssl_conn_pool =
544 new CapturePreconnectsSSLSocketPool( 566 new CapturePreconnectsSSLSocketPool(
545 session_deps.host_resolver.get(), 567 session_deps.host_resolver.get(), session_deps.cert_verifier.get(),
546 session_deps.cert_verifier.get()); 568 session_deps.transport_security_state.get(),
569 session_deps.cert_transparency_verifier.get(),
570 session_deps.ct_policy_enforcer.get());
547 std::unique_ptr<MockClientSocketPoolManager> mock_pool_manager( 571 std::unique_ptr<MockClientSocketPoolManager> mock_pool_manager(
548 new MockClientSocketPoolManager); 572 new MockClientSocketPoolManager);
549 mock_pool_manager->SetSocketPoolForSOCKSProxy(proxy_host, socks_proxy_pool); 573 mock_pool_manager->SetSocketPoolForSOCKSProxy(proxy_host, socks_proxy_pool);
550 mock_pool_manager->SetSocketPoolForSSLWithProxy(proxy_host, ssl_conn_pool); 574 mock_pool_manager->SetSocketPoolForSSLWithProxy(proxy_host, ssl_conn_pool);
551 peer.SetClientSocketPoolManager(std::move(mock_pool_manager)); 575 peer.SetClientSocketPoolManager(std::move(mock_pool_manager));
552 PreconnectHelper(kTests[i], session.get()); 576 PreconnectHelper(kTests[i], session.get());
553 if (kTests[i].ssl) 577 if (kTests[i].ssl)
554 EXPECT_EQ(kTests[i].num_streams, ssl_conn_pool->last_num_streams()); 578 EXPECT_EQ(kTests[i].num_streams, ssl_conn_pool->last_num_streams());
555 else 579 else
556 EXPECT_EQ(kTests[i].num_streams, socks_proxy_pool->last_num_streams()); 580 EXPECT_EQ(kTests[i].num_streams, socks_proxy_pool->last_num_streams());
557 } 581 }
558 } 582 }
559 583
560 TEST_P(HttpStreamFactoryTest, PreconnectDirectWithExistingSpdySession) { 584 TEST_P(HttpStreamFactoryTest, PreconnectDirectWithExistingSpdySession) {
561 for (size_t i = 0; i < arraysize(kTests); ++i) { 585 for (size_t i = 0; i < arraysize(kTests); ++i) {
562 SpdySessionDependencies session_deps( 586 SpdySessionDependencies session_deps(
563 GetParam(), ProxyService::CreateDirect()); 587 GetParam(), ProxyService::CreateDirect());
564 std::unique_ptr<HttpNetworkSession> session( 588 std::unique_ptr<HttpNetworkSession> session(
565 SpdySessionDependencies::SpdyCreateSession(&session_deps)); 589 SpdySessionDependencies::SpdyCreateSession(&session_deps));
566 HttpNetworkSessionPeer peer(session.get()); 590 HttpNetworkSessionPeer peer(session.get());
567 591
568 // Put a SpdySession in the pool. 592 // Put a SpdySession in the pool.
569 HostPortPair host_port_pair("www.google.com", 443); 593 HostPortPair host_port_pair("www.google.com", 443);
570 SpdySessionKey key(host_port_pair, ProxyServer::Direct(), 594 SpdySessionKey key(host_port_pair, ProxyServer::Direct(),
571 PRIVACY_MODE_DISABLED); 595 PRIVACY_MODE_DISABLED);
572 ignore_result(CreateFakeSpdySession(session->spdy_session_pool(), key)); 596 ignore_result(CreateFakeSpdySession(session->spdy_session_pool(), key));
573 597
574 CapturePreconnectsTransportSocketPool* transport_conn_pool = 598 CapturePreconnectsTransportSocketPool* transport_conn_pool =
575 new CapturePreconnectsTransportSocketPool( 599 new CapturePreconnectsTransportSocketPool(
576 session_deps.host_resolver.get(), 600 session_deps.host_resolver.get(), session_deps.cert_verifier.get(),
577 session_deps.cert_verifier.get()); 601 session_deps.transport_security_state.get(),
602 session_deps.cert_transparency_verifier.get(),
603 session_deps.ct_policy_enforcer.get());
578 CapturePreconnectsSSLSocketPool* ssl_conn_pool = 604 CapturePreconnectsSSLSocketPool* ssl_conn_pool =
579 new CapturePreconnectsSSLSocketPool( 605 new CapturePreconnectsSSLSocketPool(
580 session_deps.host_resolver.get(), 606 session_deps.host_resolver.get(), session_deps.cert_verifier.get(),
581 session_deps.cert_verifier.get()); 607 session_deps.transport_security_state.get(),
608 session_deps.cert_transparency_verifier.get(),
609 session_deps.ct_policy_enforcer.get());
582 std::unique_ptr<MockClientSocketPoolManager> mock_pool_manager( 610 std::unique_ptr<MockClientSocketPoolManager> mock_pool_manager(
583 new MockClientSocketPoolManager); 611 new MockClientSocketPoolManager);
584 mock_pool_manager->SetTransportSocketPool(transport_conn_pool); 612 mock_pool_manager->SetTransportSocketPool(transport_conn_pool);
585 mock_pool_manager->SetSSLSocketPool(ssl_conn_pool); 613 mock_pool_manager->SetSSLSocketPool(ssl_conn_pool);
586 peer.SetClientSocketPoolManager(std::move(mock_pool_manager)); 614 peer.SetClientSocketPoolManager(std::move(mock_pool_manager));
587 PreconnectHelper(kTests[i], session.get()); 615 PreconnectHelper(kTests[i], session.get());
588 // We shouldn't be preconnecting if we have an existing session, which is 616 // We shouldn't be preconnecting if we have an existing session, which is
589 // the case for https://www.google.com. 617 // the case for https://www.google.com.
590 if (kTests[i].ssl) 618 if (kTests[i].ssl)
591 EXPECT_EQ(-1, ssl_conn_pool->last_num_streams()); 619 EXPECT_EQ(-1, ssl_conn_pool->last_num_streams());
592 else 620 else
593 EXPECT_EQ(kTests[i].num_streams, 621 EXPECT_EQ(kTests[i].num_streams,
594 transport_conn_pool->last_num_streams()); 622 transport_conn_pool->last_num_streams());
595 } 623 }
596 } 624 }
597 625
598 // Verify that preconnects to unsafe ports are cancelled before they reach 626 // Verify that preconnects to unsafe ports are cancelled before they reach
599 // the SocketPool. 627 // the SocketPool.
600 TEST_P(HttpStreamFactoryTest, PreconnectUnsafePort) { 628 TEST_P(HttpStreamFactoryTest, PreconnectUnsafePort) {
601 ASSERT_FALSE(IsPortAllowedForScheme(7, "http")); 629 ASSERT_FALSE(IsPortAllowedForScheme(7, "http"));
602 630
603 SpdySessionDependencies session_deps( 631 SpdySessionDependencies session_deps(
604 GetParam(), ProxyService::CreateDirect()); 632 GetParam(), ProxyService::CreateDirect());
605 std::unique_ptr<HttpNetworkSession> session( 633 std::unique_ptr<HttpNetworkSession> session(
606 SpdySessionDependencies::SpdyCreateSession(&session_deps)); 634 SpdySessionDependencies::SpdyCreateSession(&session_deps));
607 HttpNetworkSessionPeer peer(session.get()); 635 HttpNetworkSessionPeer peer(session.get());
608 CapturePreconnectsTransportSocketPool* transport_conn_pool = 636 CapturePreconnectsTransportSocketPool* transport_conn_pool =
609 new CapturePreconnectsTransportSocketPool( 637 new CapturePreconnectsTransportSocketPool(
610 session_deps.host_resolver.get(), 638 session_deps.host_resolver.get(), session_deps.cert_verifier.get(),
611 session_deps.cert_verifier.get()); 639 session_deps.transport_security_state.get(),
640 session_deps.cert_transparency_verifier.get(),
641 session_deps.ct_policy_enforcer.get());
612 std::unique_ptr<MockClientSocketPoolManager> mock_pool_manager( 642 std::unique_ptr<MockClientSocketPoolManager> mock_pool_manager(
613 new MockClientSocketPoolManager); 643 new MockClientSocketPoolManager);
614 mock_pool_manager->SetTransportSocketPool(transport_conn_pool); 644 mock_pool_manager->SetTransportSocketPool(transport_conn_pool);
615 peer.SetClientSocketPoolManager(std::move(mock_pool_manager)); 645 peer.SetClientSocketPoolManager(std::move(mock_pool_manager));
616 646
617 PreconnectHelperForURL(1, GURL("http://www.google.com:7"), session.get()); 647 PreconnectHelperForURL(1, GURL("http://www.google.com:7"), session.get());
618 EXPECT_EQ(-1, transport_conn_pool->last_num_streams()); 648 EXPECT_EQ(-1, transport_conn_pool->last_num_streams());
619 } 649 }
620 650
621 TEST_P(HttpStreamFactoryTest, JobNotifiesProxy) { 651 TEST_P(HttpStreamFactoryTest, JobNotifiesProxy) {
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
684 HttpNetworkSession::Params params; 714 HttpNetworkSession::Params params;
685 params.enable_quic = true; 715 params.enable_quic = true;
686 params.quic_disable_preconnect_if_0rtt = false; 716 params.quic_disable_preconnect_if_0rtt = false;
687 scoped_refptr<SSLConfigServiceDefaults> ssl_config_service( 717 scoped_refptr<SSLConfigServiceDefaults> ssl_config_service(
688 new SSLConfigServiceDefaults); 718 new SSLConfigServiceDefaults);
689 HttpServerPropertiesImpl http_server_properties; 719 HttpServerPropertiesImpl http_server_properties;
690 MockClientSocketFactory socket_factory; 720 MockClientSocketFactory socket_factory;
691 params.client_socket_factory = &socket_factory; 721 params.client_socket_factory = &socket_factory;
692 MockHostResolver host_resolver; 722 MockHostResolver host_resolver;
693 params.host_resolver = &host_resolver; 723 params.host_resolver = &host_resolver;
724 MockCertVerifier cert_verifier;
725 params.cert_verifier = &cert_verifier;
694 TransportSecurityState transport_security_state; 726 TransportSecurityState transport_security_state;
695 params.transport_security_state = &transport_security_state; 727 params.transport_security_state = &transport_security_state;
728 MultiLogCTVerifier ct_verifier;
729 params.cert_transparency_verifier = &ct_verifier;
730 CTPolicyEnforcer ct_policy_enforcer;
731 params.ct_policy_enforcer = &ct_policy_enforcer;
696 params.proxy_service = proxy_service.get(); 732 params.proxy_service = proxy_service.get();
697 params.ssl_config_service = ssl_config_service.get(); 733 params.ssl_config_service = ssl_config_service.get();
698 params.http_server_properties = &http_server_properties; 734 params.http_server_properties = &http_server_properties;
699 735
700 std::unique_ptr<HttpNetworkSession> session(new HttpNetworkSession(params)); 736 std::unique_ptr<HttpNetworkSession> session(new HttpNetworkSession(params));
701 session->quic_stream_factory()->set_require_confirmation(false); 737 session->quic_stream_factory()->set_require_confirmation(false);
702 738
703 StaticSocketDataProvider socket_data1; 739 StaticSocketDataProvider socket_data1;
704 socket_data1.set_connect_data(MockConnect(ASYNC, mock_error[i])); 740 socket_data1.set_connect_data(MockConnect(ASYNC, mock_error[i]));
705 socket_factory.AddSocketDataProvider(&socket_data1); 741 socket_factory.AddSocketDataProvider(&socket_data1);
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
808 HttpNetworkSession::Params params; 844 HttpNetworkSession::Params params;
809 params.enable_quic = true; 845 params.enable_quic = true;
810 params.quic_disable_preconnect_if_0rtt = false; 846 params.quic_disable_preconnect_if_0rtt = false;
811 scoped_refptr<SSLConfigServiceDefaults> ssl_config_service( 847 scoped_refptr<SSLConfigServiceDefaults> ssl_config_service(
812 new SSLConfigServiceDefaults); 848 new SSLConfigServiceDefaults);
813 HttpServerPropertiesImpl http_server_properties; 849 HttpServerPropertiesImpl http_server_properties;
814 MockClientSocketFactory socket_factory; 850 MockClientSocketFactory socket_factory;
815 params.client_socket_factory = &socket_factory; 851 params.client_socket_factory = &socket_factory;
816 MockHostResolver host_resolver; 852 MockHostResolver host_resolver;
817 params.host_resolver = &host_resolver; 853 params.host_resolver = &host_resolver;
854 MockCertVerifier cert_verifier;
855 params.cert_verifier = &cert_verifier;
818 TransportSecurityState transport_security_state; 856 TransportSecurityState transport_security_state;
819 params.transport_security_state = &transport_security_state; 857 params.transport_security_state = &transport_security_state;
858 MultiLogCTVerifier ct_verifier;
859 params.cert_transparency_verifier = &ct_verifier;
860 CTPolicyEnforcer ct_policy_enforcer;
861 params.ct_policy_enforcer = &ct_policy_enforcer;
820 params.proxy_service = proxy_service.get(); 862 params.proxy_service = proxy_service.get();
821 params.ssl_config_service = ssl_config_service.get(); 863 params.ssl_config_service = ssl_config_service.get();
822 params.http_server_properties = &http_server_properties; 864 params.http_server_properties = &http_server_properties;
823 params.quic_max_number_of_lossy_connections = 2; 865 params.quic_max_number_of_lossy_connections = 2;
824 866
825 std::unique_ptr<HttpNetworkSession> session(new HttpNetworkSession(params)); 867 std::unique_ptr<HttpNetworkSession> session(new HttpNetworkSession(params));
826 session->quic_stream_factory()->set_require_confirmation(false); 868 session->quic_stream_factory()->set_require_confirmation(false);
827 869
828 session->quic_stream_factory()->number_of_lossy_connections_[99] = 870 session->quic_stream_factory()->number_of_lossy_connections_[99] =
829 params.quic_max_number_of_lossy_connections; 871 params.quic_max_number_of_lossy_connections;
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
884 SpdySessionDependencies::CreateSessionParams(&session_deps); 926 SpdySessionDependencies::CreateSessionParams(&session_deps);
885 params.enable_quic = true; 927 params.enable_quic = true;
886 params.quic_disable_preconnect_if_0rtt = true; 928 params.quic_disable_preconnect_if_0rtt = true;
887 params.http_server_properties = &http_server_properties; 929 params.http_server_properties = &http_server_properties;
888 930
889 std::unique_ptr<HttpNetworkSession> session(new HttpNetworkSession(params)); 931 std::unique_ptr<HttpNetworkSession> session(new HttpNetworkSession(params));
890 HttpNetworkSessionPeer peer(session.get()); 932 HttpNetworkSessionPeer peer(session.get());
891 HostPortPair proxy_host("http_proxy", 80); 933 HostPortPair proxy_host("http_proxy", 80);
892 CapturePreconnectsHttpProxySocketPool* http_proxy_pool = 934 CapturePreconnectsHttpProxySocketPool* http_proxy_pool =
893 new CapturePreconnectsHttpProxySocketPool( 935 new CapturePreconnectsHttpProxySocketPool(
894 session_deps.host_resolver.get(), session_deps.cert_verifier.get()); 936 session_deps.host_resolver.get(), session_deps.cert_verifier.get(),
937 session_deps.transport_security_state.get(),
938 session_deps.cert_transparency_verifier.get(),
939 session_deps.ct_policy_enforcer.get());
895 CapturePreconnectsSSLSocketPool* ssl_conn_pool = 940 CapturePreconnectsSSLSocketPool* ssl_conn_pool =
896 new CapturePreconnectsSSLSocketPool(session_deps.host_resolver.get(), 941 new CapturePreconnectsSSLSocketPool(
897 session_deps.cert_verifier.get()); 942 session_deps.host_resolver.get(), session_deps.cert_verifier.get(),
943 session_deps.transport_security_state.get(),
944 session_deps.cert_transparency_verifier.get(),
945 session_deps.ct_policy_enforcer.get());
898 std::unique_ptr<MockClientSocketPoolManager> mock_pool_manager( 946 std::unique_ptr<MockClientSocketPoolManager> mock_pool_manager(
899 new MockClientSocketPoolManager); 947 new MockClientSocketPoolManager);
900 mock_pool_manager->SetSocketPoolForHTTPProxy(proxy_host, http_proxy_pool); 948 mock_pool_manager->SetSocketPoolForHTTPProxy(proxy_host, http_proxy_pool);
901 mock_pool_manager->SetSocketPoolForSSLWithProxy(proxy_host, ssl_conn_pool); 949 mock_pool_manager->SetSocketPoolForSSLWithProxy(proxy_host, ssl_conn_pool);
902 peer.SetClientSocketPoolManager(std::move(mock_pool_manager)); 950 peer.SetClientSocketPoolManager(std::move(mock_pool_manager));
903 PreconnectHelperForURL(num_streams, url, session.get()); 951 PreconnectHelperForURL(num_streams, url, session.get());
904 EXPECT_EQ(num_streams, ssl_conn_pool->last_num_streams()); 952 EXPECT_EQ(num_streams, ssl_conn_pool->last_num_streams());
905 } 953 }
906 } 954 }
907 955
(...skipping 27 matching lines...) Expand all
935 983
936 // Setup 0RTT for QUIC. 984 // Setup 0RTT for QUIC.
937 QuicStreamFactory* factory = session->quic_stream_factory(); 985 QuicStreamFactory* factory = session->quic_stream_factory();
938 factory->set_require_confirmation(false); 986 factory->set_require_confirmation(false);
939 test::QuicStreamFactoryPeer::CacheDummyServerConfig( 987 test::QuicStreamFactoryPeer::CacheDummyServerConfig(
940 factory, QuicServerId(host_port_pair, PRIVACY_MODE_DISABLED)); 988 factory, QuicServerId(host_port_pair, PRIVACY_MODE_DISABLED));
941 989
942 HttpNetworkSessionPeer peer(session.get()); 990 HttpNetworkSessionPeer peer(session.get());
943 CapturePreconnectsTransportSocketPool* transport_conn_pool = 991 CapturePreconnectsTransportSocketPool* transport_conn_pool =
944 new CapturePreconnectsTransportSocketPool( 992 new CapturePreconnectsTransportSocketPool(
945 session_deps.host_resolver.get(), session_deps.cert_verifier.get()); 993 session_deps.host_resolver.get(), session_deps.cert_verifier.get(),
994 session_deps.transport_security_state.get(),
995 session_deps.cert_transparency_verifier.get(),
996 session_deps.ct_policy_enforcer.get());
946 std::unique_ptr<MockClientSocketPoolManager> mock_pool_manager( 997 std::unique_ptr<MockClientSocketPoolManager> mock_pool_manager(
947 new MockClientSocketPoolManager); 998 new MockClientSocketPoolManager);
948 mock_pool_manager->SetTransportSocketPool(transport_conn_pool); 999 mock_pool_manager->SetTransportSocketPool(transport_conn_pool);
949 peer.SetClientSocketPoolManager(std::move(mock_pool_manager)); 1000 peer.SetClientSocketPoolManager(std::move(mock_pool_manager));
950 1001
951 HttpRequestInfo request; 1002 HttpRequestInfo request;
952 request.method = "GET"; 1003 request.method = "GET";
953 request.url = url; 1004 request.url = url;
954 request.load_flags = 0; 1005 request.load_flags = 0;
955 1006
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
1024 return -1; 1075 return -1;
1025 return session_list->GetSize(); 1076 return session_list->GetSize();
1026 } 1077 }
1027 1078
1028 } // namespace 1079 } // namespace
1029 1080
1030 TEST_P(HttpStreamFactoryTest, PrivacyModeUsesDifferentSocketPoolGroup) { 1081 TEST_P(HttpStreamFactoryTest, PrivacyModeUsesDifferentSocketPoolGroup) {
1031 SpdySessionDependencies session_deps( 1082 SpdySessionDependencies session_deps(
1032 GetParam(), ProxyService::CreateDirect()); 1083 GetParam(), ProxyService::CreateDirect());
1033 1084
1034 StaticSocketDataProvider socket_data; 1085 StaticSocketDataProvider socket_data_1;
1035 socket_data.set_connect_data(MockConnect(ASYNC, OK)); 1086 socket_data_1.set_connect_data(MockConnect(ASYNC, OK));
1036 session_deps.socket_factory->AddSocketDataProvider(&socket_data); 1087 session_deps.socket_factory->AddSocketDataProvider(&socket_data_1);
1088 StaticSocketDataProvider socket_data_2;
1089 socket_data_2.set_connect_data(MockConnect(ASYNC, OK));
1090 session_deps.socket_factory->AddSocketDataProvider(&socket_data_2);
1091 StaticSocketDataProvider socket_data_3;
1092 socket_data_3.set_connect_data(MockConnect(ASYNC, OK));
1093 session_deps.socket_factory->AddSocketDataProvider(&socket_data_3);
1037 1094
1038 SSLSocketDataProvider ssl(ASYNC, OK); 1095 SSLSocketDataProvider ssl_1(ASYNC, OK);
1039 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl); 1096 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl_1);
1097 SSLSocketDataProvider ssl_2(ASYNC, OK);
1098 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl_2);
1099 SSLSocketDataProvider ssl_3(ASYNC, OK);
1100 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl_3);
1040 1101
1041 std::unique_ptr<HttpNetworkSession> session( 1102 std::unique_ptr<HttpNetworkSession> session(
1042 SpdySessionDependencies::SpdyCreateSession(&session_deps)); 1103 SpdySessionDependencies::SpdyCreateSession(&session_deps));
1043 SSLClientSocketPool* ssl_pool = session->GetSSLSocketPool( 1104 SSLClientSocketPool* ssl_pool = session->GetSSLSocketPool(
1044 HttpNetworkSession::NORMAL_SOCKET_POOL); 1105 HttpNetworkSession::NORMAL_SOCKET_POOL);
1045 1106
1046 EXPECT_EQ(GetSocketPoolGroupCount(ssl_pool), 0); 1107 EXPECT_EQ(GetSocketPoolGroupCount(ssl_pool), 0);
1047 1108
1048 HttpRequestInfo request_info; 1109 HttpRequestInfo request_info;
1049 request_info.method = "GET"; 1110 request_info.method = "GET";
(...skipping 27 matching lines...) Expand all
1077 BoundNetLog())); 1138 BoundNetLog()));
1078 waiter.WaitForStream(); 1139 waiter.WaitForStream();
1079 1140
1080 EXPECT_EQ(GetSocketPoolGroupCount(ssl_pool), 2); 1141 EXPECT_EQ(GetSocketPoolGroupCount(ssl_pool), 2);
1081 } 1142 }
1082 1143
1083 TEST_P(HttpStreamFactoryTest, GetLoadState) { 1144 TEST_P(HttpStreamFactoryTest, GetLoadState) {
1084 SpdySessionDependencies session_deps( 1145 SpdySessionDependencies session_deps(
1085 GetParam(), ProxyService::CreateDirect()); 1146 GetParam(), ProxyService::CreateDirect());
1086 1147
1148 // Force asynchronous host resolutions, so that the LoadState will be
1149 // resolving the host.
1150 session_deps.host_resolver->set_synchronous_mode(false);
1151
1087 StaticSocketDataProvider socket_data; 1152 StaticSocketDataProvider socket_data;
1088 socket_data.set_connect_data(MockConnect(ASYNC, OK)); 1153 socket_data.set_connect_data(MockConnect(ASYNC, OK));
1089 session_deps.socket_factory->AddSocketDataProvider(&socket_data); 1154 session_deps.socket_factory->AddSocketDataProvider(&socket_data);
1090 1155
1091 std::unique_ptr<HttpNetworkSession> session( 1156 std::unique_ptr<HttpNetworkSession> session(
1092 SpdySessionDependencies::SpdyCreateSession(&session_deps)); 1157 SpdySessionDependencies::SpdyCreateSession(&session_deps));
1093 1158
1094 HttpRequestInfo request_info; 1159 HttpRequestInfo request_info;
1095 request_info.method = "GET"; 1160 request_info.method = "GET";
1096 request_info.url = GURL("http://www.google.com"); 1161 request_info.url = GURL("http://www.google.com");
(...skipping 413 matching lines...) Expand 10 before | Expand all | Expand 10 after
1510 1575
1511 // Load a certificate that is valid for *.example.org 1576 // Load a certificate that is valid for *.example.org
1512 scoped_refptr<X509Certificate> test_cert( 1577 scoped_refptr<X509Certificate> test_cert(
1513 ImportCertFromFile(GetTestCertsDirectory(), "wildcard.pem")); 1578 ImportCertFromFile(GetTestCertsDirectory(), "wildcard.pem"));
1514 EXPECT_TRUE(test_cert.get()); 1579 EXPECT_TRUE(test_cert.get());
1515 verify_details_.cert_verify_result.verified_cert = test_cert; 1580 verify_details_.cert_verify_result.verified_cert = test_cert;
1516 verify_details_.cert_verify_result.is_issued_by_known_root = true; 1581 verify_details_.cert_verify_result.is_issued_by_known_root = true;
1517 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details_); 1582 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details_);
1518 crypto_client_stream_factory_.set_handshake_mode( 1583 crypto_client_stream_factory_.set_handshake_mode(
1519 MockCryptoClientStream::CONFIRM_HANDSHAKE); 1584 MockCryptoClientStream::CONFIRM_HANDSHAKE);
1585 params_.cert_verifier = &cert_verifier_;
1520 params_.quic_crypto_client_stream_factory = &crypto_client_stream_factory_; 1586 params_.quic_crypto_client_stream_factory = &crypto_client_stream_factory_;
1521 params_.quic_supported_versions = test::SupportedVersions(GetParam()); 1587 params_.quic_supported_versions = test::SupportedVersions(GetParam());
1522 params_.transport_security_state = &transport_security_state_; 1588 params_.transport_security_state = &transport_security_state_;
1589 params_.cert_transparency_verifier = &ct_verifier_;
1590 params_.ct_policy_enforcer = &ct_policy_enforcer_;
1523 params_.host_resolver = &host_resolver_; 1591 params_.host_resolver = &host_resolver_;
1524 params_.proxy_service = proxy_service_.get(); 1592 params_.proxy_service = proxy_service_.get();
1525 params_.ssl_config_service = ssl_config_service_.get(); 1593 params_.ssl_config_service = ssl_config_service_.get();
1526 params_.client_socket_factory = &socket_factory_; 1594 params_.client_socket_factory = &socket_factory_;
1527 session_.reset(new HttpNetworkSession(params_)); 1595 session_.reset(new HttpNetworkSession(params_));
1528 session_->quic_stream_factory()->set_require_confirmation(false); 1596 session_->quic_stream_factory()->set_require_confirmation(false);
1529 } 1597 }
1530 1598
1531 void AddQuicAlternativeService() { 1599 void AddQuicAlternativeService() {
1532 const AlternativeService alternative_service(QUIC, "www.example.org", 443); 1600 const AlternativeService alternative_service(QUIC, "www.example.org", 443);
(...skipping 17 matching lines...) Expand all
1550 1618
1551 HttpNetworkSession* session() { return session_.get(); } 1619 HttpNetworkSession* session() { return session_.get(); }
1552 1620
1553 private: 1621 private:
1554 MockClock* clock_; // Owned by QuicStreamFactory 1622 MockClock* clock_; // Owned by QuicStreamFactory
1555 test::QuicTestPacketMaker client_packet_maker_; 1623 test::QuicTestPacketMaker client_packet_maker_;
1556 test::QuicTestPacketMaker server_packet_maker_; 1624 test::QuicTestPacketMaker server_packet_maker_;
1557 MockClientSocketFactory socket_factory_; 1625 MockClientSocketFactory socket_factory_;
1558 std::unique_ptr<HttpNetworkSession> session_; 1626 std::unique_ptr<HttpNetworkSession> session_;
1559 test::MockRandom random_generator_; 1627 test::MockRandom random_generator_;
1628 MockCertVerifier cert_verifier_;
1560 ProofVerifyDetailsChromium verify_details_; 1629 ProofVerifyDetailsChromium verify_details_;
1561 MockCryptoClientStreamFactory crypto_client_stream_factory_; 1630 MockCryptoClientStreamFactory crypto_client_stream_factory_;
1562 HttpServerPropertiesImpl http_server_properties_; 1631 HttpServerPropertiesImpl http_server_properties_;
1563 TransportSecurityState transport_security_state_; 1632 TransportSecurityState transport_security_state_;
1633 MultiLogCTVerifier ct_verifier_;
1634 CTPolicyEnforcer ct_policy_enforcer_;
1564 MockHostResolver host_resolver_; 1635 MockHostResolver host_resolver_;
1565 std::unique_ptr<ProxyService> proxy_service_; 1636 std::unique_ptr<ProxyService> proxy_service_;
1566 scoped_refptr<SSLConfigServiceDefaults> ssl_config_service_; 1637 scoped_refptr<SSLConfigServiceDefaults> ssl_config_service_;
1567 HttpNetworkSession::Params params_; 1638 HttpNetworkSession::Params params_;
1568 }; 1639 };
1569 1640
1570 INSTANTIATE_TEST_CASE_P(Version, 1641 INSTANTIATE_TEST_CASE_P(Version,
1571 HttpStreamFactoryBidirectionalQuicTest, 1642 HttpStreamFactoryBidirectionalQuicTest,
1572 ::testing::ValuesIn(QuicSupportedVersions())); 1643 ::testing::ValuesIn(QuicSupportedVersions()));
1573 1644
(...skipping 434 matching lines...) Expand 10 before | Expand all | Expand 10 after
2008 session->GetTransportSocketPool( 2079 session->GetTransportSocketPool(
2009 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); 2080 HttpNetworkSession::WEBSOCKET_SOCKET_POOL)));
2010 EXPECT_EQ(1, GetSocketPoolGroupCount( 2081 EXPECT_EQ(1, GetSocketPoolGroupCount(
2011 session->GetSSLSocketPool(HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); 2082 session->GetSSLSocketPool(HttpNetworkSession::WEBSOCKET_SOCKET_POOL)));
2012 EXPECT_TRUE(waiter.used_proxy_info().is_direct()); 2083 EXPECT_TRUE(waiter.used_proxy_info().is_direct());
2013 } 2084 }
2014 2085
2015 } // namespace 2086 } // namespace
2016 2087
2017 } // namespace net 2088 } // namespace net
OLDNEW
« no previous file with comments | « net/http/http_response_body_drainer_unittest.cc ('k') | net/proxy/proxy_script_fetcher_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698