OLD | NEW |
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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/net/chrome_url_request_context.h" | 5 #include "chrome/browser/net/chrome_url_request_context.h" |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/string_util.h" | 8 #include "base/string_util.h" |
9 #include "chrome/browser/browser_process.h" | 9 #include "chrome/browser/browser_process.h" |
10 #include "chrome/browser/chrome_thread.h" | 10 #include "chrome/browser/chrome_thread.h" |
11 #include "chrome/browser/extensions/extensions_service.h" | 11 #include "chrome/browser/extensions/extensions_service.h" |
12 #include "chrome/browser/extensions/user_script_master.h" | 12 #include "chrome/browser/extensions/user_script_master.h" |
| 13 #include "chrome/browser/net/dns_global.h" |
13 #include "chrome/browser/profile.h" | 14 #include "chrome/browser/profile.h" |
14 #include "chrome/common/chrome_constants.h" | 15 #include "chrome/common/chrome_constants.h" |
15 #include "chrome/common/chrome_switches.h" | 16 #include "chrome/common/chrome_switches.h" |
16 #include "chrome/common/extensions/extension.h" | 17 #include "chrome/common/extensions/extension.h" |
17 #include "chrome/common/notification_service.h" | 18 #include "chrome/common/notification_service.h" |
18 #include "chrome/common/pref_names.h" | 19 #include "chrome/common/pref_names.h" |
19 #include "chrome/common/url_constants.h" | 20 #include "chrome/common/url_constants.h" |
20 #include "net/ftp/ftp_network_layer.h" | 21 #include "net/ftp/ftp_network_layer.h" |
21 #include "net/http/http_cache.h" | 22 #include "net/http/http_cache.h" |
22 #include "net/http/http_network_layer.h" | 23 #include "net/http/http_network_layer.h" |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
102 g_browser_process->io_thread()->message_loop()); | 103 g_browser_process->io_thread()->message_loop()); |
103 } | 104 } |
104 | 105 |
105 // static | 106 // static |
106 ChromeURLRequestContext* ChromeURLRequestContext::CreateOriginal( | 107 ChromeURLRequestContext* ChromeURLRequestContext::CreateOriginal( |
107 Profile* profile, const FilePath& cookie_store_path, | 108 Profile* profile, const FilePath& cookie_store_path, |
108 const FilePath& disk_cache_path) { | 109 const FilePath& disk_cache_path) { |
109 DCHECK(!profile->IsOffTheRecord()); | 110 DCHECK(!profile->IsOffTheRecord()); |
110 ChromeURLRequestContext* context = new ChromeURLRequestContext(profile); | 111 ChromeURLRequestContext* context = new ChromeURLRequestContext(profile); |
111 | 112 |
| 113 // Global host resolver for the context. |
| 114 context->host_resolver_ = chrome_browser_net::GetGlobalHostResolver(); |
| 115 |
112 context->proxy_service_ = CreateProxyService( | 116 context->proxy_service_ = CreateProxyService( |
113 context, *CommandLine::ForCurrentProcess()); | 117 context, *CommandLine::ForCurrentProcess()); |
114 | 118 |
115 net::HttpCache* cache = | 119 net::HttpCache* cache = |
116 new net::HttpCache(context->proxy_service_, | 120 new net::HttpCache(context->host_resolver_, |
| 121 context->proxy_service_, |
117 disk_cache_path.ToWStringHack(), 0); | 122 disk_cache_path.ToWStringHack(), 0); |
118 | 123 |
119 const CommandLine& command_line = *CommandLine::ForCurrentProcess(); | 124 const CommandLine& command_line = *CommandLine::ForCurrentProcess(); |
120 bool record_mode = chrome::kRecordModeEnabled && | 125 bool record_mode = chrome::kRecordModeEnabled && |
121 command_line.HasSwitch(switches::kRecordMode); | 126 command_line.HasSwitch(switches::kRecordMode); |
122 bool playback_mode = command_line.HasSwitch(switches::kPlaybackMode); | 127 bool playback_mode = command_line.HasSwitch(switches::kPlaybackMode); |
123 | 128 |
124 if (record_mode || playback_mode) { | 129 if (record_mode || playback_mode) { |
125 // Don't use existing cookies and use an in-memory store. | 130 // Don't use existing cookies and use an in-memory store. |
126 context->cookie_store_ = new net::CookieMonster(); | 131 context->cookie_store_ = new net::CookieMonster(); |
127 cache->set_mode( | 132 cache->set_mode( |
128 record_mode ? net::HttpCache::RECORD : net::HttpCache::PLAYBACK); | 133 record_mode ? net::HttpCache::RECORD : net::HttpCache::PLAYBACK); |
129 } | 134 } |
130 context->http_transaction_factory_ = cache; | 135 context->http_transaction_factory_ = cache; |
131 | 136 |
132 // The kNewFtp switch is Windows specific only because we have multiple FTP | 137 // The kNewFtp switch is Windows specific only because we have multiple FTP |
133 // implementations on Windows. | 138 // implementations on Windows. |
134 #if defined(OS_WIN) | 139 #if defined(OS_WIN) |
135 if (command_line.HasSwitch(switches::kNewFtp)) | 140 if (command_line.HasSwitch(switches::kNewFtp)) |
136 context->ftp_transaction_factory_ = new net::FtpNetworkLayer; | 141 context->ftp_transaction_factory_ = |
| 142 new net::FtpNetworkLayer(context->host_resolver_); |
137 #else | 143 #else |
138 context->ftp_transaction_factory_ = new net::FtpNetworkLayer; | 144 context->ftp_transaction_factory_ = |
| 145 new net::FtpNetworkLayer(context->host_resolver_); |
139 #endif | 146 #endif |
140 | 147 |
141 // setup cookie store | 148 // setup cookie store |
142 if (!context->cookie_store_) { | 149 if (!context->cookie_store_) { |
143 DCHECK(!cookie_store_path.empty()); | 150 DCHECK(!cookie_store_path.empty()); |
144 context->cookie_db_.reset(new SQLitePersistentCookieStore( | 151 context->cookie_db_.reset(new SQLitePersistentCookieStore( |
145 cookie_store_path.ToWStringHack(), | 152 cookie_store_path.ToWStringHack(), |
146 g_browser_process->db_thread()->message_loop())); | 153 g_browser_process->db_thread()->message_loop())); |
147 context->cookie_store_ = new net::CookieMonster(context->cookie_db_.get()); | 154 context->cookie_store_ = new net::CookieMonster(context->cookie_db_.get()); |
148 } | 155 } |
(...skipping 27 matching lines...) Expand all Loading... |
176 | 183 |
177 return context; | 184 return context; |
178 } | 185 } |
179 | 186 |
180 // static | 187 // static |
181 ChromeURLRequestContext* ChromeURLRequestContext::CreateOffTheRecord( | 188 ChromeURLRequestContext* ChromeURLRequestContext::CreateOffTheRecord( |
182 Profile* profile) { | 189 Profile* profile) { |
183 DCHECK(profile->IsOffTheRecord()); | 190 DCHECK(profile->IsOffTheRecord()); |
184 ChromeURLRequestContext* context = new ChromeURLRequestContext(profile); | 191 ChromeURLRequestContext* context = new ChromeURLRequestContext(profile); |
185 | 192 |
186 // Share the same proxy service as the original profile. This proxy | 193 // Share the same proxy service and host resolver as the original profile. |
187 // service's lifespan is dependent on the lifespan of the original profile, | 194 // This proxy service's lifespan is dependent on the lifespan of the original |
188 // which we reference (see above). | 195 // profile which we reference (see above). |
| 196 context->host_resolver_ = |
| 197 profile->GetOriginalProfile()->GetRequestContext()->host_resolver(); |
189 context->proxy_service_ = | 198 context->proxy_service_ = |
190 profile->GetOriginalProfile()->GetRequestContext()->proxy_service(); | 199 profile->GetOriginalProfile()->GetRequestContext()->proxy_service(); |
191 | 200 |
192 context->http_transaction_factory_ = | 201 context->http_transaction_factory_ = |
193 new net::HttpCache(context->proxy_service_, 0); | 202 new net::HttpCache(context->host_resolver_, context->proxy_service_, 0); |
194 context->cookie_store_ = new net::CookieMonster; | 203 context->cookie_store_ = new net::CookieMonster; |
195 | 204 |
196 return context; | 205 return context; |
197 } | 206 } |
198 | 207 |
199 // static | 208 // static |
200 ChromeURLRequestContext* | 209 ChromeURLRequestContext* |
201 ChromeURLRequestContext::CreateOffTheRecordForExtensions(Profile* profile) { | 210 ChromeURLRequestContext::CreateOffTheRecordForExtensions(Profile* profile) { |
202 DCHECK(profile->IsOffTheRecord()); | 211 DCHECK(profile->IsOffTheRecord()); |
203 ChromeURLRequestContext* context = new ChromeURLRequestContext(profile); | 212 ChromeURLRequestContext* context = new ChromeURLRequestContext(profile); |
(...skipping 30 matching lines...) Expand all Loading... |
234 // by HttpNetworkLayer so we can reuse HttpNetworkSession within it. This | 243 // by HttpNetworkLayer so we can reuse HttpNetworkSession within it. This |
235 // assumption will be invalid if the original HttpCache is constructed with | 244 // assumption will be invalid if the original HttpCache is constructed with |
236 // HttpCache(HttpTransactionFactory*, disk_cache::Backend*) constructor. | 245 // HttpCache(HttpTransactionFactory*, disk_cache::Backend*) constructor. |
237 net::HttpNetworkLayer* original_network_layer = | 246 net::HttpNetworkLayer* original_network_layer = |
238 static_cast<net::HttpNetworkLayer*>(original_cache->network_layer()); | 247 static_cast<net::HttpNetworkLayer*>(original_cache->network_layer()); |
239 cache = new net::HttpCache(original_network_layer->GetSession(), | 248 cache = new net::HttpCache(original_network_layer->GetSession(), |
240 disk_cache_path.ToWStringHack(), 0); | 249 disk_cache_path.ToWStringHack(), 0); |
241 } else { | 250 } else { |
242 // If original HttpCache doesn't exist, simply construct one with a whole | 251 // If original HttpCache doesn't exist, simply construct one with a whole |
243 // new set of network stack. | 252 // new set of network stack. |
244 cache = new net::HttpCache(original_context->proxy_service(), | 253 cache = new net::HttpCache(original_context->host_resolver(), |
| 254 original_context->proxy_service(), |
245 disk_cache_path.ToWStringHack(), 0); | 255 disk_cache_path.ToWStringHack(), 0); |
246 } | 256 } |
247 | 257 |
248 cache->set_type(net::MEDIA_CACHE); | 258 cache->set_type(net::MEDIA_CACHE); |
249 context->http_transaction_factory_ = cache; | 259 context->http_transaction_factory_ = cache; |
250 return context; | 260 return context; |
251 } | 261 } |
252 | 262 |
253 ChromeURLRequestContext::ChromeURLRequestContext(Profile* profile) | 263 ChromeURLRequestContext::ChromeURLRequestContext(Profile* profile) |
254 : prefs_(profile->GetPrefs()), | 264 : prefs_(profile->GetPrefs()), |
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
410 | 420 |
411 // Do not delete the cookie store in the case of the media context, as it is | 421 // Do not delete the cookie store in the case of the media context, as it is |
412 // owned by the original context. | 422 // owned by the original context. |
413 if (!is_media_) | 423 if (!is_media_) |
414 delete cookie_store_; | 424 delete cookie_store_; |
415 | 425 |
416 // Do not delete the proxy service in the case of OTR or media contexts, as | 426 // Do not delete the proxy service in the case of OTR or media contexts, as |
417 // it is owned by the original URLRequestContext. | 427 // it is owned by the original URLRequestContext. |
418 if (!is_off_the_record_ && !is_media_) | 428 if (!is_off_the_record_ && !is_media_) |
419 delete proxy_service_; | 429 delete proxy_service_; |
| 430 |
| 431 // Do not delete host_resolver_; it will be freed by FreeGlobalHostResolver() |
| 432 // during the teardown of DNS prefetching. |
420 } | 433 } |
OLD | NEW |