OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "ios/chrome/browser/browser_state/chrome_browser_state_impl_io_data.h" | 5 #include "ios/chrome/browser/browser_state/chrome_browser_state_impl_io_data.h" |
6 | 6 |
7 #include <set> | 7 #include <set> |
| 8 #include <utility> |
8 | 9 |
9 #include "base/bind.h" | 10 #include "base/bind.h" |
10 #include "base/callback.h" | 11 #include "base/callback.h" |
11 #include "base/logging.h" | 12 #include "base/logging.h" |
12 #include "base/memory/scoped_ptr.h" | 13 #include "base/memory/scoped_ptr.h" |
13 #include "base/prefs/json_pref_store.h" | 14 #include "base/prefs/json_pref_store.h" |
14 #include "base/prefs/pref_filter.h" | 15 #include "base/prefs/pref_filter.h" |
15 #include "base/prefs/pref_service.h" | 16 #include "base/prefs/pref_service.h" |
16 #include "base/sequenced_task_runner.h" | 17 #include "base/sequenced_task_runner.h" |
17 #include "base/threading/sequenced_worker_pool.h" | 18 #include "base/threading/sequenced_worker_pool.h" |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
60 ChromeBrowserStateImplIOData::Handle::~Handle() { | 61 ChromeBrowserStateImplIOData::Handle::~Handle() { |
61 DCHECK_CURRENTLY_ON_WEB_THREAD(web::WebThread::UI); | 62 DCHECK_CURRENTLY_ON_WEB_THREAD(web::WebThread::UI); |
62 if (io_data_->http_server_properties_manager_) | 63 if (io_data_->http_server_properties_manager_) |
63 io_data_->http_server_properties_manager_->ShutdownOnPrefThread(); | 64 io_data_->http_server_properties_manager_->ShutdownOnPrefThread(); |
64 | 65 |
65 // io_data_->data_reduction_proxy_io_data() might be NULL if Init() was | 66 // io_data_->data_reduction_proxy_io_data() might be NULL if Init() was |
66 // never called. | 67 // never called. |
67 if (io_data_->data_reduction_proxy_io_data()) | 68 if (io_data_->data_reduction_proxy_io_data()) |
68 io_data_->data_reduction_proxy_io_data()->ShutdownOnUIThread(); | 69 io_data_->data_reduction_proxy_io_data()->ShutdownOnUIThread(); |
69 | 70 |
70 io_data_->ShutdownOnUIThread(GetAllContextGetters().Pass()); | 71 io_data_->ShutdownOnUIThread(GetAllContextGetters()); |
71 } | 72 } |
72 | 73 |
73 void ChromeBrowserStateImplIOData::Handle::Init( | 74 void ChromeBrowserStateImplIOData::Handle::Init( |
74 const base::FilePath& cookie_path, | 75 const base::FilePath& cookie_path, |
75 const base::FilePath& channel_id_path, | 76 const base::FilePath& channel_id_path, |
76 const base::FilePath& cache_path, | 77 const base::FilePath& cache_path, |
77 int cache_max_size, | 78 int cache_max_size, |
78 const base::FilePath& profile_path) { | 79 const base::FilePath& profile_path) { |
79 DCHECK_CURRENTLY_ON_WEB_THREAD(web::WebThread::UI); | 80 DCHECK_CURRENTLY_ON_WEB_THREAD(web::WebThread::UI); |
80 DCHECK(!io_data_->lazy_params_); | 81 DCHECK(!io_data_->lazy_params_); |
(...skipping 17 matching lines...) Expand all Loading... |
98 // params are unified into a single object. | 99 // params are unified into a single object. |
99 bool enable_quic_for_data_reduction_proxy = | 100 bool enable_quic_for_data_reduction_proxy = |
100 IOSChromeIOThread::ShouldEnableQuicForDataReductionProxy(); | 101 IOSChromeIOThread::ShouldEnableQuicForDataReductionProxy(); |
101 | 102 |
102 io_data_->set_data_reduction_proxy_io_data( | 103 io_data_->set_data_reduction_proxy_io_data( |
103 CreateIOSChromeDataReductionProxyIOData( | 104 CreateIOSChromeDataReductionProxyIOData( |
104 GetApplicationContext()->GetIOSChromeIOThread()->net_log(), | 105 GetApplicationContext()->GetIOSChromeIOThread()->net_log(), |
105 browser_state_->GetPrefs(), | 106 browser_state_->GetPrefs(), |
106 web::WebThread::GetTaskRunnerForThread(web::WebThread::IO), | 107 web::WebThread::GetTaskRunnerForThread(web::WebThread::IO), |
107 web::WebThread::GetTaskRunnerForThread(web::WebThread::UI), | 108 web::WebThread::GetTaskRunnerForThread(web::WebThread::UI), |
108 enable_quic_for_data_reduction_proxy) | 109 enable_quic_for_data_reduction_proxy)); |
109 .Pass()); | |
110 | 110 |
111 base::SequencedWorkerPool* pool = web::WebThread::GetBlockingPool(); | 111 base::SequencedWorkerPool* pool = web::WebThread::GetBlockingPool(); |
112 scoped_refptr<base::SequencedTaskRunner> db_task_runner = | 112 scoped_refptr<base::SequencedTaskRunner> db_task_runner = |
113 pool->GetSequencedTaskRunnerWithShutdownBehavior( | 113 pool->GetSequencedTaskRunnerWithShutdownBehavior( |
114 pool->GetSequenceToken(), | 114 pool->GetSequenceToken(), |
115 base::SequencedWorkerPool::SKIP_ON_SHUTDOWN); | 115 base::SequencedWorkerPool::SKIP_ON_SHUTDOWN); |
116 scoped_ptr<data_reduction_proxy::DataStore> store( | 116 scoped_ptr<data_reduction_proxy::DataStore> store( |
117 new data_reduction_proxy::DataStoreImpl(profile_path)); | 117 new data_reduction_proxy::DataStoreImpl(profile_path)); |
118 IOSChromeDataReductionProxySettingsFactory::GetForBrowserState(browser_state_) | 118 IOSChromeDataReductionProxySettingsFactory::GetForBrowserState(browser_state_) |
119 ->InitDataReductionProxySettings( | 119 ->InitDataReductionProxySettings( |
120 io_data_->data_reduction_proxy_io_data(), browser_state_->GetPrefs(), | 120 io_data_->data_reduction_proxy_io_data(), browser_state_->GetPrefs(), |
121 browser_state_->GetRequestContext(), store.Pass(), | 121 browser_state_->GetRequestContext(), std::move(store), |
122 web::WebThread::GetTaskRunnerForThread(web::WebThread::UI), | 122 web::WebThread::GetTaskRunnerForThread(web::WebThread::UI), |
123 db_task_runner); | 123 db_task_runner); |
124 } | 124 } |
125 | 125 |
126 scoped_refptr<IOSChromeURLRequestContextGetter> | 126 scoped_refptr<IOSChromeURLRequestContextGetter> |
127 ChromeBrowserStateImplIOData::Handle::CreateMainRequestContextGetter( | 127 ChromeBrowserStateImplIOData::Handle::CreateMainRequestContextGetter( |
128 ProtocolHandlerMap* protocol_handlers, | 128 ProtocolHandlerMap* protocol_handlers, |
129 PrefService* local_state, | 129 PrefService* local_state, |
130 IOSChromeIOThread* io_thread) const { | 130 IOSChromeIOThread* io_thread) const { |
131 DCHECK_CURRENTLY_ON_WEB_THREAD(web::WebThread::UI); | 131 DCHECK_CURRENTLY_ON_WEB_THREAD(web::WebThread::UI); |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
204 scoped_ptr<IOSChromeURLRequestContextGetterVector> context_getters( | 204 scoped_ptr<IOSChromeURLRequestContextGetterVector> context_getters( |
205 new IOSChromeURLRequestContextGetterVector()); | 205 new IOSChromeURLRequestContextGetterVector()); |
206 | 206 |
207 iter = app_request_context_getter_map_.begin(); | 207 iter = app_request_context_getter_map_.begin(); |
208 for (; iter != app_request_context_getter_map_.end(); ++iter) | 208 for (; iter != app_request_context_getter_map_.end(); ++iter) |
209 context_getters->push_back(iter->second); | 209 context_getters->push_back(iter->second); |
210 | 210 |
211 if (main_request_context_getter_.get()) | 211 if (main_request_context_getter_.get()) |
212 context_getters->push_back(main_request_context_getter_); | 212 context_getters->push_back(main_request_context_getter_); |
213 | 213 |
214 return context_getters.Pass(); | 214 return context_getters; |
215 } | 215 } |
216 | 216 |
217 ChromeBrowserStateImplIOData::LazyParams::LazyParams() : cache_max_size(0) {} | 217 ChromeBrowserStateImplIOData::LazyParams::LazyParams() : cache_max_size(0) {} |
218 | 218 |
219 ChromeBrowserStateImplIOData::LazyParams::~LazyParams() {} | 219 ChromeBrowserStateImplIOData::LazyParams::~LazyParams() {} |
220 | 220 |
221 ChromeBrowserStateImplIOData::ChromeBrowserStateImplIOData() | 221 ChromeBrowserStateImplIOData::ChromeBrowserStateImplIOData() |
222 : ChromeBrowserStateIOData( | 222 : ChromeBrowserStateIOData( |
223 ios::ChromeBrowserStateType::REGULAR_BROWSER_STATE), | 223 ios::ChromeBrowserStateType::REGULAR_BROWSER_STATE), |
224 http_server_properties_manager_(nullptr), | 224 http_server_properties_manager_(nullptr), |
(...skipping 22 matching lines...) Expand all Loading... |
247 | 247 |
248 ApplyProfileParamsToContext(main_context); | 248 ApplyProfileParamsToContext(main_context); |
249 | 249 |
250 if (http_server_properties_manager_) | 250 if (http_server_properties_manager_) |
251 http_server_properties_manager_->InitializeOnNetworkThread(); | 251 http_server_properties_manager_->InitializeOnNetworkThread(); |
252 | 252 |
253 main_context->set_transport_security_state(transport_security_state()); | 253 main_context->set_transport_security_state(transport_security_state()); |
254 | 254 |
255 main_context->set_net_log(io_thread->net_log()); | 255 main_context->set_net_log(io_thread->net_log()); |
256 | 256 |
257 network_delegate_ = | 257 network_delegate_ = data_reduction_proxy_io_data()->CreateNetworkDelegate( |
258 data_reduction_proxy_io_data() | 258 std::move(chrome_network_delegate), true); |
259 ->CreateNetworkDelegate(chrome_network_delegate.Pass(), true) | |
260 .Pass(); | |
261 | 259 |
262 main_context->set_network_delegate(network_delegate_.get()); | 260 main_context->set_network_delegate(network_delegate_.get()); |
263 | 261 |
264 main_context->set_http_server_properties(http_server_properties()); | 262 main_context->set_http_server_properties(http_server_properties()); |
265 | 263 |
266 main_context->set_host_resolver(io_thread_globals->host_resolver.get()); | 264 main_context->set_host_resolver(io_thread_globals->host_resolver.get()); |
267 | 265 |
268 main_context->set_http_auth_handler_factory( | 266 main_context->set_http_auth_handler_factory( |
269 io_thread_globals->http_auth_handler_factory.get()); | 267 io_thread_globals->http_auth_handler_factory.get()); |
270 | 268 |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
311 | 309 |
312 set_channel_id_service(channel_id_service); | 310 set_channel_id_service(channel_id_service); |
313 main_context->set_channel_id_service(channel_id_service); | 311 main_context->set_channel_id_service(channel_id_service); |
314 | 312 |
315 scoped_ptr<net::HttpCache::BackendFactory> main_backend( | 313 scoped_ptr<net::HttpCache::BackendFactory> main_backend( |
316 new net::HttpCache::DefaultBackend( | 314 new net::HttpCache::DefaultBackend( |
317 net::DISK_CACHE, net::CACHE_BACKEND_BLOCKFILE, | 315 net::DISK_CACHE, net::CACHE_BACKEND_BLOCKFILE, |
318 lazy_params_->cache_path, lazy_params_->cache_max_size, | 316 lazy_params_->cache_path, lazy_params_->cache_max_size, |
319 web::WebThread::GetTaskRunnerForThread(web::WebThread::CACHE))); | 317 web::WebThread::GetTaskRunnerForThread(web::WebThread::CACHE))); |
320 http_network_session_ = CreateHttpNetworkSession(*profile_params); | 318 http_network_session_ = CreateHttpNetworkSession(*profile_params); |
321 main_http_factory_ = | 319 main_http_factory_ = CreateMainHttpFactory(http_network_session_.get(), |
322 CreateMainHttpFactory(http_network_session_.get(), main_backend.Pass()); | 320 std::move(main_backend)); |
323 main_context->set_http_transaction_factory(main_http_factory_.get()); | 321 main_context->set_http_transaction_factory(main_http_factory_.get()); |
324 | 322 |
325 scoped_ptr<net::URLRequestJobFactoryImpl> main_job_factory( | 323 scoped_ptr<net::URLRequestJobFactoryImpl> main_job_factory( |
326 new net::URLRequestJobFactoryImpl()); | 324 new net::URLRequestJobFactoryImpl()); |
327 InstallProtocolHandlers(main_job_factory.get(), protocol_handlers); | 325 InstallProtocolHandlers(main_job_factory.get(), protocol_handlers); |
328 | 326 |
329 // The data reduction proxy interceptor should be as close to the network as | 327 // The data reduction proxy interceptor should be as close to the network as |
330 // possible. | 328 // possible. |
331 URLRequestInterceptorScopedVector request_interceptors; | 329 URLRequestInterceptorScopedVector request_interceptors; |
332 request_interceptors.insert( | 330 request_interceptors.insert( |
333 request_interceptors.begin(), | 331 request_interceptors.begin(), |
334 data_reduction_proxy_io_data()->CreateInterceptor().release()); | 332 data_reduction_proxy_io_data()->CreateInterceptor().release()); |
335 main_job_factory_ = SetUpJobFactoryDefaults(main_job_factory.Pass(), | 333 main_job_factory_ = SetUpJobFactoryDefaults(std::move(main_job_factory), |
336 request_interceptors.Pass(), | 334 std::move(request_interceptors), |
337 main_context->network_delegate()); | 335 main_context->network_delegate()); |
338 main_context->set_job_factory(main_job_factory_.get()); | 336 main_context->set_job_factory(main_job_factory_.get()); |
339 main_context->set_network_quality_estimator( | 337 main_context->set_network_quality_estimator( |
340 io_thread_globals->network_quality_estimator.get()); | 338 io_thread_globals->network_quality_estimator.get()); |
341 | 339 |
342 // Setup SDCH for this profile. | 340 // Setup SDCH for this profile. |
343 sdch_manager_.reset(new net::SdchManager); | 341 sdch_manager_.reset(new net::SdchManager); |
344 sdch_policy_.reset(new net::SdchOwner(sdch_manager_.get(), main_context)); | 342 sdch_policy_.reset(new net::SdchOwner(sdch_manager_.get(), main_context)); |
345 main_context->set_sdch_manager(sdch_manager_.get()); | 343 main_context->set_sdch_manager(sdch_manager_.get()); |
346 sdch_policy_->EnablePersistentStorage(network_json_store_.get()); | 344 sdch_policy_->EnablePersistentStorage(network_json_store_.get()); |
347 | 345 |
348 lazy_params_.reset(); | 346 lazy_params_.reset(); |
349 } | 347 } |
350 | 348 |
351 net::URLRequestContext* | 349 net::URLRequestContext* |
352 ChromeBrowserStateImplIOData::InitializeAppRequestContext( | 350 ChromeBrowserStateImplIOData::InitializeAppRequestContext( |
353 net::URLRequestContext* main_context) const { | 351 net::URLRequestContext* main_context) const { |
354 // Copy most state from the main context. | 352 // Copy most state from the main context. |
355 AppRequestContext* context = new AppRequestContext(); | 353 AppRequestContext* context = new AppRequestContext(); |
356 context->CopyFrom(main_context); | 354 context->CopyFrom(main_context); |
357 | 355 |
358 // Use a separate HTTP disk cache for isolated apps. | 356 // Use a separate HTTP disk cache for isolated apps. |
359 scoped_ptr<net::HttpCache::BackendFactory> app_backend = | 357 scoped_ptr<net::HttpCache::BackendFactory> app_backend = |
360 net::HttpCache::DefaultBackend::InMemory(0); | 358 net::HttpCache::DefaultBackend::InMemory(0); |
361 scoped_ptr<net::HttpCache> app_http_cache = | 359 scoped_ptr<net::HttpCache> app_http_cache = |
362 CreateHttpFactory(http_network_session_.get(), app_backend.Pass()); | 360 CreateHttpFactory(http_network_session_.get(), std::move(app_backend)); |
363 | 361 |
364 cookie_util::CookieStoreConfig ios_cookie_config( | 362 cookie_util::CookieStoreConfig ios_cookie_config( |
365 base::FilePath(), | 363 base::FilePath(), |
366 cookie_util::CookieStoreConfig::EPHEMERAL_SESSION_COOKIES, | 364 cookie_util::CookieStoreConfig::EPHEMERAL_SESSION_COOKIES, |
367 cookie_util::CookieStoreConfig::COOKIE_STORE_IOS, nullptr); | 365 cookie_util::CookieStoreConfig::COOKIE_STORE_IOS, nullptr); |
368 scoped_refptr<net::CookieStore> cookie_store = | 366 scoped_refptr<net::CookieStore> cookie_store = |
369 cookie_util::CreateCookieStore(ios_cookie_config); | 367 cookie_util::CreateCookieStore(ios_cookie_config); |
370 | 368 |
371 // Transfer ownership of the cookies and cache to AppRequestContext. | 369 // Transfer ownership of the cookies and cache to AppRequestContext. |
372 context->SetCookieStore(cookie_store.get()); | 370 context->SetCookieStore(cookie_store.get()); |
373 context->SetHttpTransactionFactory(app_http_cache.Pass()); | 371 context->SetHttpTransactionFactory(std::move(app_http_cache)); |
374 | 372 |
375 scoped_ptr<net::URLRequestJobFactoryImpl> job_factory( | 373 scoped_ptr<net::URLRequestJobFactoryImpl> job_factory( |
376 new net::URLRequestJobFactoryImpl()); | 374 new net::URLRequestJobFactoryImpl()); |
377 // The data reduction proxy interceptor should be as close to the network as | 375 // The data reduction proxy interceptor should be as close to the network as |
378 // possible. | 376 // possible. |
379 URLRequestInterceptorScopedVector request_interceptors; | 377 URLRequestInterceptorScopedVector request_interceptors; |
380 request_interceptors.insert( | 378 request_interceptors.insert( |
381 request_interceptors.begin(), | 379 request_interceptors.begin(), |
382 data_reduction_proxy_io_data()->CreateInterceptor().release()); | 380 data_reduction_proxy_io_data()->CreateInterceptor().release()); |
383 scoped_ptr<net::URLRequestJobFactory> top_job_factory( | 381 scoped_ptr<net::URLRequestJobFactory> top_job_factory(SetUpJobFactoryDefaults( |
384 SetUpJobFactoryDefaults(job_factory.Pass(), request_interceptors.Pass(), | 382 std::move(job_factory), std::move(request_interceptors), |
385 main_context->network_delegate())); | 383 main_context->network_delegate())); |
386 context->SetJobFactory(top_job_factory.Pass()); | 384 context->SetJobFactory(std::move(top_job_factory)); |
387 | 385 |
388 return context; | 386 return context; |
389 } | 387 } |
390 | 388 |
391 net::URLRequestContext* | 389 net::URLRequestContext* |
392 ChromeBrowserStateImplIOData::AcquireIsolatedAppRequestContext( | 390 ChromeBrowserStateImplIOData::AcquireIsolatedAppRequestContext( |
393 net::URLRequestContext* main_context) const { | 391 net::URLRequestContext* main_context) const { |
394 // We create per-app contexts on demand, unlike the others above. | 392 // We create per-app contexts on demand, unlike the others above. |
395 net::URLRequestContext* app_request_context = | 393 net::URLRequestContext* app_request_context = |
396 InitializeAppRequestContext(main_context); | 394 InitializeAppRequestContext(main_context); |
397 DCHECK(app_request_context); | 395 DCHECK(app_request_context); |
398 return app_request_context; | 396 return app_request_context; |
399 } | 397 } |
400 | 398 |
401 void ChromeBrowserStateImplIOData::ClearNetworkingHistorySinceOnIOThread( | 399 void ChromeBrowserStateImplIOData::ClearNetworkingHistorySinceOnIOThread( |
402 base::Time time, | 400 base::Time time, |
403 const base::Closure& completion) { | 401 const base::Closure& completion) { |
404 DCHECK_CURRENTLY_ON_WEB_THREAD(web::WebThread::IO); | 402 DCHECK_CURRENTLY_ON_WEB_THREAD(web::WebThread::IO); |
405 DCHECK(initialized()); | 403 DCHECK(initialized()); |
406 | 404 |
407 DCHECK(transport_security_state()); | 405 DCHECK(transport_security_state()); |
408 // Completes synchronously. | 406 // Completes synchronously. |
409 transport_security_state()->DeleteAllDynamicDataSince(time); | 407 transport_security_state()->DeleteAllDynamicDataSince(time); |
410 DCHECK(http_server_properties_manager_); | 408 DCHECK(http_server_properties_manager_); |
411 http_server_properties_manager_->Clear(completion); | 409 http_server_properties_manager_->Clear(completion); |
412 } | 410 } |
OLD | NEW |