OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
9 #include "base/file_util.h" | 9 #include "base/file_util.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
11 #include "base/stl_util.h" | 11 #include "base/stl_util.h" |
12 #include "chrome/browser/io_thread.h" | 12 #include "chrome/browser/io_thread.h" |
13 #include "chrome/browser/net/chrome_net_log.h" | 13 #include "chrome/browser/net/chrome_net_log.h" |
14 #include "chrome/browser/net/chrome_network_delegate.h" | 14 #include "chrome/browser/net/chrome_network_delegate.h" |
| 15 #include "chrome/browser/net/connect_interceptor.h" |
| 16 #include "chrome/browser/net/predictor.h" |
15 #include "chrome/browser/net/sqlite_persistent_cookie_store.h" | 17 #include "chrome/browser/net/sqlite_persistent_cookie_store.h" |
16 #include "chrome/browser/prefs/pref_member.h" | 18 #include "chrome/browser/prefs/pref_member.h" |
17 #include "chrome/browser/profiles/profile.h" | 19 #include "chrome/browser/profiles/profile.h" |
18 #include "chrome/common/chrome_constants.h" | 20 #include "chrome/common/chrome_constants.h" |
19 #include "chrome/common/chrome_switches.h" | 21 #include "chrome/common/chrome_switches.h" |
20 #include "chrome/common/pref_names.h" | 22 #include "chrome/common/pref_names.h" |
21 #include "chrome/common/url_constants.h" | 23 #include "chrome/common/url_constants.h" |
22 #include "content/browser/browser_thread.h" | 24 #include "content/browser/browser_thread.h" |
23 #include "content/browser/resource_context.h" | 25 #include "content/browser/resource_context.h" |
24 #include "net/ftp/ftp_network_layer.h" | 26 #include "net/ftp/ftp_network_layer.h" |
25 #include "net/http/http_cache.h" | 27 #include "net/http/http_cache.h" |
| 28 #include "net/url_request/url_request_job_factory.h" |
26 | 29 |
27 ProfileImplIOData::Handle::Handle(Profile* profile) | 30 ProfileImplIOData::Handle::Handle(Profile* profile) |
28 : io_data_(new ProfileImplIOData), | 31 : io_data_(new ProfileImplIOData), |
29 profile_(profile), | 32 profile_(profile), |
30 initialized_(false) { | 33 initialized_(false) { |
31 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 34 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
32 DCHECK(profile); | 35 DCHECK(profile); |
33 } | 36 } |
34 | 37 |
35 ProfileImplIOData::Handle::~Handle() { | 38 ProfileImplIOData::Handle::~Handle() { |
36 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 39 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
37 if (main_request_context_getter_) | 40 if (main_request_context_getter_) |
38 main_request_context_getter_->CleanupOnUIThread(); | 41 main_request_context_getter_->CleanupOnUIThread(); |
39 if (media_request_context_getter_) | 42 if (media_request_context_getter_) |
40 media_request_context_getter_->CleanupOnUIThread(); | 43 media_request_context_getter_->CleanupOnUIThread(); |
41 if (extensions_request_context_getter_) | 44 if (extensions_request_context_getter_) |
42 extensions_request_context_getter_->CleanupOnUIThread(); | 45 extensions_request_context_getter_->CleanupOnUIThread(); |
43 | 46 |
44 // Clean up all isolated app request contexts. | 47 // Clean up all isolated app request contexts. |
45 for (ChromeURLRequestContextGetterMap::iterator iter = | 48 for (ChromeURLRequestContextGetterMap::iterator iter = |
46 app_request_context_getter_map_.begin(); | 49 app_request_context_getter_map_.begin(); |
47 iter != app_request_context_getter_map_.end(); | 50 iter != app_request_context_getter_map_.end(); |
48 ++iter) { | 51 ++iter) { |
49 iter->second->CleanupOnUIThread(); | 52 iter->second->CleanupOnUIThread(); |
50 } | 53 } |
51 | 54 |
52 io_data_->ShutdownOnUIThread(); | 55 io_data_->ShutdownOnUIThread(); |
53 } | 56 } |
54 | 57 |
55 void ProfileImplIOData::Handle::Init(const FilePath& cookie_path, | 58 void ProfileImplIOData::Handle::Init( |
56 const FilePath& cache_path, | 59 const FilePath& cookie_path, |
57 int cache_max_size, | 60 const FilePath& cache_path, |
58 const FilePath& media_cache_path, | 61 int cache_max_size, |
59 int media_cache_max_size, | 62 const FilePath& media_cache_path, |
60 const FilePath& extensions_cookie_path, | 63 int media_cache_max_size, |
61 const FilePath& app_path) { | 64 const FilePath& extensions_cookie_path, |
| 65 const FilePath& app_path, |
| 66 chrome_browser_net::Predictor* predictor) { |
62 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 67 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
63 DCHECK(!io_data_->lazy_params_.get()); | 68 DCHECK(!io_data_->lazy_params_.get()); |
64 LazyParams* lazy_params = new LazyParams; | 69 LazyParams* lazy_params = new LazyParams; |
65 | 70 |
66 lazy_params->cookie_path = cookie_path; | 71 lazy_params->cookie_path = cookie_path; |
67 lazy_params->cache_path = cache_path; | 72 lazy_params->cache_path = cache_path; |
68 lazy_params->cache_max_size = cache_max_size; | 73 lazy_params->cache_max_size = cache_max_size; |
69 lazy_params->media_cache_path = media_cache_path; | 74 lazy_params->media_cache_path = media_cache_path; |
70 lazy_params->media_cache_max_size = media_cache_max_size; | 75 lazy_params->media_cache_max_size = media_cache_max_size; |
71 lazy_params->extensions_cookie_path = extensions_cookie_path; | 76 lazy_params->extensions_cookie_path = extensions_cookie_path; |
72 | 77 |
73 io_data_->lazy_params_.reset(lazy_params); | 78 io_data_->lazy_params_.reset(lazy_params); |
74 | 79 |
75 // Keep track of isolated app path separately so we can use it on demand. | 80 // Keep track of isolated app path separately so we can use it on demand. |
76 io_data_->app_path_ = app_path; | 81 io_data_->app_path_ = app_path; |
| 82 |
| 83 io_data_->predictor_.reset(predictor); |
| 84 io_data_->predictor_->InitNetworkPredictor(profile_->GetPrefs()); |
77 } | 85 } |
78 | 86 |
79 base::Callback<ChromeURLDataManagerBackend*(void)> | 87 base::Callback<ChromeURLDataManagerBackend*(void)> |
80 ProfileImplIOData::Handle::GetChromeURLDataManagerBackendGetter() const { | 88 ProfileImplIOData::Handle::GetChromeURLDataManagerBackendGetter() const { |
81 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 89 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
82 LazyInitialize(); | 90 LazyInitialize(); |
83 return base::Bind(&ProfileIOData::GetChromeURLDataManagerBackend, | 91 return base::Bind(&ProfileIOData::GetChromeURLDataManagerBackend, |
84 base::Unretained(io_data_)); | 92 base::Unretained(io_data_)); |
85 } | 93 } |
86 | 94 |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
144 | 152 |
145 | 153 |
146 ChromeURLRequestContextGetter* context = | 154 ChromeURLRequestContextGetter* context = |
147 ChromeURLRequestContextGetter::CreateOriginalForIsolatedApp( | 155 ChromeURLRequestContextGetter::CreateOriginalForIsolatedApp( |
148 profile_, io_data_, app_id); | 156 profile_, io_data_, app_id); |
149 app_request_context_getter_map_[app_id] = context; | 157 app_request_context_getter_map_[app_id] = context; |
150 | 158 |
151 return context; | 159 return context; |
152 } | 160 } |
153 | 161 |
| 162 chrome_browser_net::Predictor* |
| 163 ProfileImplIOData::Handle::GetNetworkPredictor() { |
| 164 return io_data_->GetNetworkPredictor(); |
| 165 } |
| 166 |
154 void ProfileImplIOData::Handle::LazyInitialize() const { | 167 void ProfileImplIOData::Handle::LazyInitialize() const { |
155 if (!initialized_) { | 168 if (!initialized_) { |
156 io_data_->InitializeProfileParams(profile_); | 169 io_data_->InitializeProfileParams(profile_); |
157 ChromeNetworkDelegate::InitializeReferrersEnabled( | 170 ChromeNetworkDelegate::InitializeReferrersEnabled( |
158 io_data_->enable_referrers(), profile_->GetPrefs()); | 171 io_data_->enable_referrers(), profile_->GetPrefs()); |
159 io_data_->clear_local_state_on_exit()->Init( | 172 io_data_->clear_local_state_on_exit()->Init( |
160 prefs::kClearSiteDataOnExit, profile_->GetPrefs(), NULL); | 173 prefs::kClearSiteDataOnExit, profile_->GetPrefs(), NULL); |
161 io_data_->clear_local_state_on_exit()->MoveToThread(BrowserThread::IO); | 174 io_data_->clear_local_state_on_exit()->MoveToThread(BrowserThread::IO); |
162 #if defined(ENABLE_SAFE_BROWSING) | 175 #if defined(ENABLE_SAFE_BROWSING) |
163 io_data_->safe_browsing_enabled()->Init(prefs::kSafeBrowsingEnabled, | 176 io_data_->safe_browsing_enabled()->Init(prefs::kSafeBrowsingEnabled, |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
300 main_context->set_ftp_transaction_factory( | 313 main_context->set_ftp_transaction_factory( |
301 new net::FtpNetworkLayer(io_thread_globals->host_resolver.get())); | 314 new net::FtpNetworkLayer(io_thread_globals->host_resolver.get())); |
302 | 315 |
303 main_context->set_chrome_url_data_manager_backend( | 316 main_context->set_chrome_url_data_manager_backend( |
304 chrome_url_data_manager_backend()); | 317 chrome_url_data_manager_backend()); |
305 | 318 |
306 main_context->set_job_factory(job_factory()); | 319 main_context->set_job_factory(job_factory()); |
307 media_request_context_->set_job_factory(job_factory()); | 320 media_request_context_->set_job_factory(job_factory()); |
308 extensions_context->set_job_factory(job_factory()); | 321 extensions_context->set_job_factory(job_factory()); |
309 | 322 |
| 323 job_factory()->AddInterceptor( |
| 324 new chrome_browser_net::ConnectInterceptor(predictor_.get())); |
| 325 |
310 lazy_params_.reset(); | 326 lazy_params_.reset(); |
311 } | 327 } |
312 | 328 |
313 scoped_refptr<ChromeURLRequestContext> | 329 scoped_refptr<ChromeURLRequestContext> |
314 ProfileImplIOData::InitializeAppRequestContext( | 330 ProfileImplIOData::InitializeAppRequestContext( |
315 scoped_refptr<ChromeURLRequestContext> main_context, | 331 scoped_refptr<ChromeURLRequestContext> main_context, |
316 const std::string& app_id) const { | 332 const std::string& app_id) const { |
317 AppRequestContext* context = new AppRequestContext; | 333 AppRequestContext* context = new AppRequestContext; |
318 | 334 |
319 // Copy most state from the main context. | 335 // Copy most state from the main context. |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
381 scoped_refptr<ChromeURLRequestContext> | 397 scoped_refptr<ChromeURLRequestContext> |
382 ProfileImplIOData::AcquireIsolatedAppRequestContext( | 398 ProfileImplIOData::AcquireIsolatedAppRequestContext( |
383 scoped_refptr<ChromeURLRequestContext> main_context, | 399 scoped_refptr<ChromeURLRequestContext> main_context, |
384 const std::string& app_id) const { | 400 const std::string& app_id) const { |
385 // We create per-app contexts on demand, unlike the others above. | 401 // We create per-app contexts on demand, unlike the others above. |
386 scoped_refptr<ChromeURLRequestContext> app_request_context = | 402 scoped_refptr<ChromeURLRequestContext> app_request_context = |
387 InitializeAppRequestContext(main_context, app_id); | 403 InitializeAppRequestContext(main_context, app_id); |
388 DCHECK(app_request_context); | 404 DCHECK(app_request_context); |
389 return app_request_context; | 405 return app_request_context; |
390 } | 406 } |
| 407 |
| 408 chrome_browser_net::Predictor* ProfileImplIOData::GetNetworkPredictor() { |
| 409 return predictor_.get(); |
| 410 } |
OLD | NEW |