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 "chrome/browser/profiles/profile_impl_io_data.h" | 5 #include "chrome/browser/profiles/profile_impl_io_data.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 #include <set> | 8 #include <set> |
9 #include <string> | 9 #include <string> |
10 #include <utility> | 10 #include <utility> |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
61 #include "extensions/features/features.h" | 61 #include "extensions/features/features.h" |
62 #include "net/base/cache_type.h" | 62 #include "net/base/cache_type.h" |
63 #include "net/cookies/cookie_store.h" | 63 #include "net/cookies/cookie_store.h" |
64 #include "net/http/http_cache.h" | 64 #include "net/http/http_cache.h" |
65 #include "net/http/http_network_session.h" | 65 #include "net/http/http_network_session.h" |
66 #include "net/http/http_server_properties_manager.h" | 66 #include "net/http/http_server_properties_manager.h" |
67 #include "net/reporting/reporting_feature.h" | 67 #include "net/reporting/reporting_feature.h" |
68 #include "net/reporting/reporting_policy.h" | 68 #include "net/reporting/reporting_policy.h" |
69 #include "net/reporting/reporting_service.h" | 69 #include "net/reporting/reporting_service.h" |
70 #include "net/ssl/channel_id_service.h" | 70 #include "net/ssl/channel_id_service.h" |
71 #include "net/url_request/url_request_context_storage.h" | 71 #include "net/url_request/url_request_context_builder.h" |
72 #include "net/url_request/url_request_intercepting_job_factory.h" | 72 #include "net/url_request/url_request_intercepting_job_factory.h" |
73 #include "net/url_request/url_request_job_factory_impl.h" | 73 #include "net/url_request/url_request_job_factory_impl.h" |
74 #include "storage/browser/quota/special_storage_policy.h" | 74 #include "storage/browser/quota/special_storage_policy.h" |
75 | 75 |
76 #if defined(OS_ANDROID) | 76 #if defined(OS_ANDROID) |
77 #include "chrome/browser/android/offline_pages/offline_page_request_interceptor.
h" | 77 #include "chrome/browser/android/offline_pages/offline_page_request_interceptor.
h" |
78 #endif // defined(OS_ANDROID) | 78 #endif // defined(OS_ANDROID) |
79 | 79 |
80 namespace { | 80 namespace { |
81 | 81 |
82 net::BackendType ChooseCacheBackendType() { | 82 // Returns the URLRequestContextBuilder::HttpCacheParams::Type that the disk |
| 83 // cache should use. |
| 84 net::URLRequestContextBuilder::HttpCacheParams::Type ChooseCacheType() { |
83 #if !defined(OS_ANDROID) | 85 #if !defined(OS_ANDROID) |
84 const base::CommandLine& command_line = | 86 const base::CommandLine& command_line = |
85 *base::CommandLine::ForCurrentProcess(); | 87 *base::CommandLine::ForCurrentProcess(); |
86 if (command_line.HasSwitch(switches::kUseSimpleCacheBackend)) { | 88 if (command_line.HasSwitch(switches::kUseSimpleCacheBackend)) { |
87 const std::string opt_value = | 89 const std::string opt_value = |
88 command_line.GetSwitchValueASCII(switches::kUseSimpleCacheBackend); | 90 command_line.GetSwitchValueASCII(switches::kUseSimpleCacheBackend); |
89 if (base::LowerCaseEqualsASCII(opt_value, "off")) | 91 if (base::LowerCaseEqualsASCII(opt_value, "off")) |
90 return net::CACHE_BACKEND_BLOCKFILE; | 92 return net::URLRequestContextBuilder::HttpCacheParams::DISK_BLOCKFILE; |
91 if (opt_value.empty() || base::LowerCaseEqualsASCII(opt_value, "on")) | 93 if (opt_value.empty() || base::LowerCaseEqualsASCII(opt_value, "on")) |
92 return net::CACHE_BACKEND_SIMPLE; | 94 return net::URLRequestContextBuilder::HttpCacheParams::DISK_SIMPLE; |
93 } | 95 } |
94 const std::string experiment_name = | 96 const std::string experiment_name = |
95 base::FieldTrialList::FindFullName("SimpleCacheTrial"); | 97 base::FieldTrialList::FindFullName("SimpleCacheTrial"); |
96 if (base::StartsWith(experiment_name, "Disable", | 98 if (base::StartsWith(experiment_name, "Disable", |
97 base::CompareCase::INSENSITIVE_ASCII)) { | 99 base::CompareCase::INSENSITIVE_ASCII)) { |
98 return net::CACHE_BACKEND_BLOCKFILE; | 100 return net::URLRequestContextBuilder::HttpCacheParams::DISK_BLOCKFILE; |
99 } | 101 } |
100 if (base::StartsWith(experiment_name, "ExperimentYes", | 102 if (base::StartsWith(experiment_name, "ExperimentYes", |
101 base::CompareCase::INSENSITIVE_ASCII)) { | 103 base::CompareCase::INSENSITIVE_ASCII)) { |
102 return net::CACHE_BACKEND_SIMPLE; | 104 return net::URLRequestContextBuilder::HttpCacheParams::DISK_SIMPLE; |
103 } | 105 } |
104 #endif // #if !defined(OS_ANDROID) | 106 #endif // #if !defined(OS_ANDROID) |
105 | 107 |
106 #if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_CHROMEOS) | 108 #if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_CHROMEOS) |
107 return net::CACHE_BACKEND_SIMPLE; | 109 return net::URLRequestContextBuilder::HttpCacheParams::DISK_SIMPLE; |
108 #else | 110 #else |
109 return net::CACHE_BACKEND_BLOCKFILE; | 111 return net::URLRequestContextBuilder::HttpCacheParams::DISK_BLOCKFILE; |
110 #endif | 112 #endif |
111 } | 113 } |
112 | 114 |
| 115 // Returns the BackendType that the disk cache should use. |
| 116 // TODO(mmenke): Once all URLRequestContexts are set up using |
| 117 // URLRequestContextBuilders, and the media URLRequestContext is take care of |
| 118 // (In one way or another), this should be removed. |
| 119 net::BackendType ChooseCacheBackendType() { |
| 120 switch (ChooseCacheType()) { |
| 121 case net::URLRequestContextBuilder::HttpCacheParams::DISK_BLOCKFILE: |
| 122 return net::CACHE_BACKEND_BLOCKFILE; |
| 123 case net::URLRequestContextBuilder::HttpCacheParams::DISK_SIMPLE: |
| 124 return net::CACHE_BACKEND_SIMPLE; |
| 125 case net::URLRequestContextBuilder::HttpCacheParams::DISK: |
| 126 return net::CACHE_BACKEND_DEFAULT; |
| 127 case net::URLRequestContextBuilder::HttpCacheParams::IN_MEMORY: |
| 128 NOTREACHED(); |
| 129 break; |
| 130 } |
| 131 return net::CACHE_BACKEND_DEFAULT; |
| 132 } |
| 133 |
113 } // namespace | 134 } // namespace |
114 | 135 |
115 using content::BrowserThread; | 136 using content::BrowserThread; |
116 | 137 |
117 ProfileImplIOData::Handle::Handle(Profile* profile) | 138 ProfileImplIOData::Handle::Handle(Profile* profile) |
118 : io_data_(new ProfileImplIOData), | 139 : io_data_(new ProfileImplIOData), |
119 profile_(profile), | 140 profile_(profile), |
120 initialized_(false) { | 141 initialized_(false) { |
121 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 142 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
122 DCHECK(profile); | 143 DCHECK(profile); |
(...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
452 } | 473 } |
453 | 474 |
454 return data_reduction_proxy_io_data()->CreateNetworkDelegate( | 475 return data_reduction_proxy_io_data()->CreateNetworkDelegate( |
455 io_thread->globals()->data_use_ascriber->CreateNetworkDelegate( | 476 io_thread->globals()->data_use_ascriber->CreateNetworkDelegate( |
456 std::move(chrome_network_delegate), | 477 std::move(chrome_network_delegate), |
457 io_thread->GetMetricsDataUseForwarder()), | 478 io_thread->GetMetricsDataUseForwarder()), |
458 true); | 479 true); |
459 } | 480 } |
460 | 481 |
461 void ProfileImplIOData::InitializeInternal( | 482 void ProfileImplIOData::InitializeInternal( |
| 483 net::URLRequestContextBuilder* builder, |
462 ProfileParams* profile_params, | 484 ProfileParams* profile_params, |
463 content::ProtocolHandlerMap* protocol_handlers, | 485 content::ProtocolHandlerMap* protocol_handlers, |
464 content::URLRequestInterceptorScopedVector request_interceptors) const { | 486 content::URLRequestInterceptorScopedVector request_interceptors) const { |
465 net::URLRequestContext* main_context = main_request_context(); | |
466 net::URLRequestContextStorage* main_context_storage = | |
467 main_request_context_storage(); | |
468 | |
469 IOThread* const io_thread = profile_params->io_thread; | 487 IOThread* const io_thread = profile_params->io_thread; |
470 IOThread::Globals* const io_thread_globals = io_thread->globals(); | 488 IOThread::Globals* const io_thread_globals = io_thread->globals(); |
471 | 489 |
472 if (lazy_params_->http_server_properties_manager) { | 490 if (lazy_params_->http_server_properties_manager) { |
473 lazy_params_->http_server_properties_manager->InitializeOnNetworkSequence(); | 491 lazy_params_->http_server_properties_manager->InitializeOnNetworkSequence(); |
474 main_context_storage->set_http_server_properties( | 492 builder->SetHttpServerProperties( |
475 std::move(lazy_params_->http_server_properties_manager)); | 493 std::move(lazy_params_->http_server_properties_manager)); |
476 } | 494 } |
477 | 495 |
478 main_context->set_network_quality_estimator( | 496 builder->set_network_quality_estimator( |
479 io_thread_globals->network_quality_estimator.get()); | 497 io_thread_globals->network_quality_estimator.get()); |
480 | 498 |
481 // Create a single task runner to use with the CookieStore and ChannelIDStore. | 499 // Create a single task runner to use with the CookieStore and ChannelIDStore. |
482 scoped_refptr<base::SequencedTaskRunner> cookie_background_task_runner = | 500 scoped_refptr<base::SequencedTaskRunner> cookie_background_task_runner = |
483 base::CreateSequencedTaskRunnerWithTraits( | 501 base::CreateSequencedTaskRunnerWithTraits( |
484 {base::MayBlock(), base::TaskPriority::BACKGROUND, | 502 {base::MayBlock(), base::TaskPriority::BACKGROUND, |
485 base::TaskShutdownBehavior::BLOCK_SHUTDOWN}); | 503 base::TaskShutdownBehavior::BLOCK_SHUTDOWN}); |
486 | 504 |
487 // Set up server bound cert service. | 505 // Set up server bound cert service. |
488 DCHECK(!lazy_params_->channel_id_path.empty()); | 506 DCHECK(!lazy_params_->channel_id_path.empty()); |
489 scoped_refptr<QuotaPolicyChannelIDStore> channel_id_db = | 507 scoped_refptr<QuotaPolicyChannelIDStore> channel_id_db = |
490 new QuotaPolicyChannelIDStore(lazy_params_->channel_id_path, | 508 new QuotaPolicyChannelIDStore(lazy_params_->channel_id_path, |
491 cookie_background_task_runner, | 509 cookie_background_task_runner, |
492 lazy_params_->special_storage_policy.get()); | 510 lazy_params_->special_storage_policy.get()); |
493 main_context_storage->set_channel_id_service( | 511 std::unique_ptr<net::ChannelIDService> channel_id_service( |
494 base::MakeUnique<net::ChannelIDService>( | 512 base::MakeUnique<net::ChannelIDService>( |
495 new net::DefaultChannelIDStore(channel_id_db.get()))); | 513 new net::DefaultChannelIDStore(channel_id_db.get()))); |
496 | 514 |
497 // Set up cookie store. | 515 // Set up cookie store. |
498 DCHECK(!lazy_params_->cookie_path.empty()); | 516 DCHECK(!lazy_params_->cookie_path.empty()); |
499 | 517 |
500 content::CookieStoreConfig cookie_config( | 518 content::CookieStoreConfig cookie_config( |
501 lazy_params_->cookie_path, lazy_params_->session_cookie_mode, | 519 lazy_params_->cookie_path, lazy_params_->session_cookie_mode, |
502 lazy_params_->special_storage_policy.get(), | 520 lazy_params_->special_storage_policy.get(), |
503 profile_params->cookie_monster_delegate.get()); | 521 profile_params->cookie_monster_delegate.get()); |
504 cookie_config.crypto_delegate = cookie_config::GetCookieCryptoDelegate(); | 522 cookie_config.crypto_delegate = cookie_config::GetCookieCryptoDelegate(); |
505 cookie_config.channel_id_service = main_context->channel_id_service(); | 523 cookie_config.channel_id_service = channel_id_service.get(); |
506 cookie_config.background_task_runner = cookie_background_task_runner; | 524 cookie_config.background_task_runner = cookie_background_task_runner; |
507 main_context_storage->set_cookie_store( | 525 std::unique_ptr<net::CookieStore> cookie_store( |
508 content::CreateCookieStore(cookie_config)); | 526 content::CreateCookieStore(cookie_config)); |
509 | 527 |
510 main_context->cookie_store()->SetChannelIDServiceID( | 528 cookie_store->SetChannelIDServiceID(channel_id_service->GetUniqueID()); |
511 main_context->channel_id_service()->GetUniqueID()); | |
512 | 529 |
513 std::unique_ptr<net::HttpCache::BackendFactory> main_backend( | 530 builder->SetCookieAndChannelIdStores(std::move(cookie_store), |
514 new net::HttpCache::DefaultBackend( | 531 std::move(channel_id_service)); |
515 net::DISK_CACHE, ChooseCacheBackendType(), lazy_params_->cache_path, | |
516 lazy_params_->cache_max_size, | |
517 BrowserThread::GetTaskRunnerForThread(BrowserThread::CACHE))); | |
518 main_context_storage->set_http_network_session( | |
519 CreateHttpNetworkSession(*profile_params)); | |
520 main_context_storage->set_http_transaction_factory(CreateMainHttpFactory( | |
521 main_context_storage->http_network_session(), std::move(main_backend))); | |
522 | 532 |
523 std::unique_ptr<net::URLRequestJobFactoryImpl> main_job_factory( | 533 net::URLRequestContextBuilder::HttpCacheParams cache_params; |
524 new net::URLRequestJobFactoryImpl()); | 534 cache_params.type = ChooseCacheType(); |
525 InstallProtocolHandlers(main_job_factory.get(), protocol_handlers); | 535 cache_params.path = lazy_params_->cache_path; |
| 536 cache_params.max_size = lazy_params_->cache_max_size; |
| 537 builder->EnableHttpCache(cache_params); |
| 538 builder->SetCacheThreadTaskRunner( |
| 539 BrowserThread::GetTaskRunnerForThread(BrowserThread::CACHE)); |
| 540 |
| 541 AddProtocolHandlersToBuilder(builder, protocol_handlers); |
526 | 542 |
527 // Install the Offline Page Interceptor. | 543 // Install the Offline Page Interceptor. |
528 #if defined(OS_ANDROID) | 544 #if defined(OS_ANDROID) |
529 request_interceptors.push_back( | 545 request_interceptors.push_back( |
530 base::MakeUnique<offline_pages::OfflinePageRequestInterceptor>( | 546 base::MakeUnique<offline_pages::OfflinePageRequestInterceptor>( |
531 previews_io_data())); | 547 previews_io_data())); |
532 #endif | 548 #endif |
533 | 549 |
534 // The data reduction proxy interceptor should be as close to the network | 550 // The data reduction proxy interceptor should be as close to the network |
535 // as possible. | 551 // as possible. |
536 request_interceptors.insert( | 552 request_interceptors.insert( |
537 request_interceptors.begin(), | 553 request_interceptors.begin(), |
538 data_reduction_proxy_io_data()->CreateInterceptor()); | 554 data_reduction_proxy_io_data()->CreateInterceptor()); |
539 data_reduction_proxy_io_data()->SetDataUseAscriber( | 555 data_reduction_proxy_io_data()->SetDataUseAscriber( |
540 io_thread_globals->data_use_ascriber.get()); | 556 io_thread_globals->data_use_ascriber.get()); |
541 main_context_storage->set_job_factory(SetUpJobFactoryDefaults( | 557 SetUpJobFactoryDefaultsForBuilder( |
542 std::move(main_job_factory), std::move(request_interceptors), | 558 builder, std::move(request_interceptors), |
543 std::move(profile_params->protocol_handler_interceptor), | 559 std::move(profile_params->protocol_handler_interceptor), |
544 main_context->network_delegate(), | 560 io_thread_globals->system_request_context->host_resolver()); |
545 io_thread_globals->system_request_context->host_resolver())); | 561 |
| 562 builder->set_reporting_policy(MaybeCreateReportingPolicy()); |
| 563 } |
| 564 |
| 565 void ProfileImplIOData::OnMainRequestContextCreated( |
| 566 ProfileParams* profile_params) const { |
| 567 DCHECK(lazy_params_); |
546 | 568 |
547 #if BUILDFLAG(ENABLE_EXTENSIONS) | 569 #if BUILDFLAG(ENABLE_EXTENSIONS) |
548 InitializeExtensionsRequestContext(profile_params); | 570 InitializeExtensionsRequestContext(profile_params); |
549 #endif | 571 #endif |
550 | 572 |
551 main_context_storage->set_reporting_service( | |
552 MaybeCreateReportingService(main_context)); | |
553 | |
554 // Create a media request context based on the main context, but using a | 573 // Create a media request context based on the main context, but using a |
555 // media cache. It shares the same job factory as the main context. | 574 // media cache. It shares the same job factory as the main context. |
556 StoragePartitionDescriptor details(profile_path_, false); | 575 StoragePartitionDescriptor details(profile_path_, false); |
557 media_request_context_.reset( | 576 media_request_context_.reset(InitializeMediaRequestContext( |
558 InitializeMediaRequestContext(main_context, details, "main_media")); | 577 main_request_context(), details, "main_media")); |
559 lazy_params_.reset(); | 578 lazy_params_.reset(); |
560 } | 579 } |
561 | 580 |
562 void ProfileImplIOData:: | 581 void ProfileImplIOData:: |
563 InitializeExtensionsRequestContext(ProfileParams* profile_params) const { | 582 InitializeExtensionsRequestContext(ProfileParams* profile_params) const { |
564 // The extensions context only serves to hold onto the extensions cookie | 583 // The extensions context only serves to hold onto the extensions cookie |
565 // store. | 584 // store. |
566 net::URLRequestContext* extensions_context = extensions_request_context(); | 585 net::URLRequestContext* extensions_context = extensions_request_context(); |
567 | 586 |
568 content::CookieStoreConfig cookie_config( | 587 content::CookieStoreConfig cookie_config( |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
636 cookie_config.channel_id_service = channel_id_service.get(); | 655 cookie_config.channel_id_service = channel_id_service.get(); |
637 cookie_config.background_task_runner = cookie_background_task_runner; | 656 cookie_config.background_task_runner = cookie_background_task_runner; |
638 cookie_store = content::CreateCookieStore(cookie_config); | 657 cookie_store = content::CreateCookieStore(cookie_config); |
639 cookie_store->SetChannelIDServiceID(channel_id_service->GetUniqueID()); | 658 cookie_store->SetChannelIDServiceID(channel_id_service->GetUniqueID()); |
640 | 659 |
641 // Build a new HttpNetworkSession that uses the new ChannelIDService. | 660 // Build a new HttpNetworkSession that uses the new ChannelIDService. |
642 // TODO(mmenke): It's weird to combine state from | 661 // TODO(mmenke): It's weird to combine state from |
643 // main_request_context_storage() objects and the argumet to this method, | 662 // main_request_context_storage() objects and the argumet to this method, |
644 // |main_context|. Remove |main_context| as an argument, and just use | 663 // |main_context|. Remove |main_context| as an argument, and just use |
645 // main_context() instead. | 664 // main_context() instead. |
646 net::HttpNetworkSession::Context session_context = | 665 net::HttpNetworkSession* network_session = |
647 main_request_context_storage()->http_network_session()->context(); | 666 main_context->http_transaction_factory()->GetSession(); |
| 667 net::HttpNetworkSession::Context session_context = network_session->context(); |
648 session_context.channel_id_service = channel_id_service.get(); | 668 session_context.channel_id_service = channel_id_service.get(); |
649 std::unique_ptr<net::HttpNetworkSession> http_network_session( | 669 std::unique_ptr<net::HttpNetworkSession> http_network_session( |
650 new net::HttpNetworkSession( | 670 new net::HttpNetworkSession(network_session->params(), session_context)); |
651 main_request_context_storage()->http_network_session()->params(), | |
652 session_context)); | |
653 std::unique_ptr<net::HttpCache> app_http_cache = | 671 std::unique_ptr<net::HttpCache> app_http_cache = |
654 CreateMainHttpFactory(http_network_session.get(), std::move(app_backend)); | 672 CreateMainHttpFactory(http_network_session.get(), std::move(app_backend)); |
655 | 673 |
656 // Transfer ownership of the ChannelIDStore and the HttpNetworkSession to the | 674 // Transfer ownership of the ChannelIDStore and the HttpNetworkSession to the |
657 // AppRequestContext. | 675 // AppRequestContext. |
658 context->SetChannelIDService(std::move(channel_id_service)); | 676 context->SetChannelIDService(std::move(channel_id_service)); |
659 context->SetHttpNetworkSession(std::move(http_network_session)); | 677 context->SetHttpNetworkSession(std::move(http_network_session)); |
660 | 678 |
661 // Transfer ownership of the cookies and cache to AppRequestContext. | 679 // Transfer ownership of the cookies and cache to AppRequestContext. |
662 context->SetCookieStore(std::move(cookie_store)); | 680 context->SetCookieStore(std::move(cookie_store)); |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
764 return media_request_context; | 782 return media_request_context; |
765 } | 783 } |
766 | 784 |
767 chrome_browser_net::Predictor* ProfileImplIOData::GetPredictor() { | 785 chrome_browser_net::Predictor* ProfileImplIOData::GetPredictor() { |
768 return predictor_.get(); | 786 return predictor_.get(); |
769 } | 787 } |
770 | 788 |
771 std::unique_ptr<net::ReportingService> | 789 std::unique_ptr<net::ReportingService> |
772 ProfileImplIOData::MaybeCreateReportingService( | 790 ProfileImplIOData::MaybeCreateReportingService( |
773 net::URLRequestContext* url_request_context) const { | 791 net::URLRequestContext* url_request_context) const { |
774 if (!base::FeatureList::IsEnabled(features::kReporting)) | 792 std::unique_ptr<net::ReportingPolicy> reporting_policy( |
| 793 MaybeCreateReportingPolicy()); |
| 794 if (!reporting_policy) |
775 return std::unique_ptr<net::ReportingService>(); | 795 return std::unique_ptr<net::ReportingService>(); |
776 | 796 |
777 return net::ReportingService::Create(net::ReportingPolicy(), | 797 return net::ReportingService::Create(*reporting_policy, url_request_context); |
778 url_request_context); | 798 } |
| 799 |
| 800 std::unique_ptr<net::ReportingPolicy> |
| 801 ProfileImplIOData::MaybeCreateReportingPolicy() { |
| 802 if (!base::FeatureList::IsEnabled(features::kReporting)) |
| 803 return std::unique_ptr<net::ReportingPolicy>(); |
| 804 |
| 805 return base::MakeUnique<net::ReportingPolicy>(); |
779 } | 806 } |
780 | 807 |
781 void ProfileImplIOData::ClearNetworkingHistorySinceOnIOThread( | 808 void ProfileImplIOData::ClearNetworkingHistorySinceOnIOThread( |
782 base::Time time, | 809 base::Time time, |
783 const base::Closure& completion) { | 810 const base::Closure& completion) { |
784 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 811 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
785 DCHECK(initialized()); | 812 DCHECK(initialized()); |
786 | 813 |
787 // Completes synchronously. | 814 // Completes synchronously. |
788 main_request_context()->transport_security_state()->DeleteAllDynamicDataSince( | 815 main_request_context()->transport_security_state()->DeleteAllDynamicDataSince( |
789 time); | 816 time); |
790 DCHECK(http_server_properties_manager_); | 817 DCHECK(http_server_properties_manager_); |
791 http_server_properties_manager_->Clear(completion); | 818 http_server_properties_manager_->Clear(completion); |
792 } | 819 } |
OLD | NEW |