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.h" | 5 #include "chrome/browser/profiles/profile_impl.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/compiler_specific.h" | 9 #include "base/compiler_specific.h" |
10 #include "base/environment.h" | 10 #include "base/environment.h" |
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
160 } | 160 } |
161 | 161 |
162 FilePath GetCachePath(const FilePath& base) { | 162 FilePath GetCachePath(const FilePath& base) { |
163 return base.Append(chrome::kCacheDirname); | 163 return base.Append(chrome::kCacheDirname); |
164 } | 164 } |
165 | 165 |
166 FilePath GetMediaCachePath(const FilePath& base) { | 166 FilePath GetMediaCachePath(const FilePath& base) { |
167 return base.Append(chrome::kMediaCacheDirname); | 167 return base.Append(chrome::kMediaCacheDirname); |
168 } | 168 } |
169 | 169 |
170 void SaveSessionStateOnIOThread( | |
171 net::URLRequestContextGetter* url_request_context_getter) { | |
172 url_request_context_getter->GetURLRequestContext()->cookie_store()-> | |
173 GetCookieMonster()->SaveSessionCookies(); | |
174 } | |
175 | |
170 } // namespace | 176 } // namespace |
171 | 177 |
172 // static | 178 // static |
173 Profile* Profile::CreateProfile(const FilePath& path) { | 179 Profile* Profile::CreateProfile(const FilePath& path) { |
174 if (!file_util::PathExists(path)) { | 180 if (!file_util::PathExists(path)) { |
175 // TODO(tc): http://b/1094718 Bad things happen if we can't write to the | 181 // TODO(tc): http://b/1094718 Bad things happen if we can't write to the |
176 // profile directory. We should eventually be able to run in this | 182 // profile directory. We should eventually be able to run in this |
177 // situation. | 183 // situation. |
178 if (!file_util::CreateDirectory(path)) | 184 if (!file_util::CreateDirectory(path)) |
179 return NULL; | 185 return NULL; |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
222 host_zoom_map_(NULL), | 228 host_zoom_map_(NULL), |
223 history_service_created_(false), | 229 history_service_created_(false), |
224 favicon_service_created_(false), | 230 favicon_service_created_(false), |
225 created_web_data_service_(false), | 231 created_web_data_service_(false), |
226 created_password_store_(false), | 232 created_password_store_(false), |
227 start_time_(Time::Now()), | 233 start_time_(Time::Now()), |
228 #if defined(OS_WIN) | 234 #if defined(OS_WIN) |
229 checked_instant_promo_(false), | 235 checked_instant_promo_(false), |
230 #endif | 236 #endif |
231 delegate_(delegate), | 237 delegate_(delegate), |
232 predictor_(NULL) { | 238 predictor_(NULL), |
239 session_restore_enabled_(false) { | |
233 DCHECK(!path.empty()) << "Using an empty path will attempt to write " << | 240 DCHECK(!path.empty()) << "Using an empty path will attempt to write " << |
234 "profile files to the root directory!"; | 241 "profile files to the root directory!"; |
235 | 242 |
236 create_session_service_timer_.Start(FROM_HERE, | 243 create_session_service_timer_.Start(FROM_HERE, |
237 TimeDelta::FromMilliseconds(kCreateSessionServiceDelayMS), this, | 244 TimeDelta::FromMilliseconds(kCreateSessionServiceDelayMS), this, |
238 &ProfileImpl::EnsureSessionServiceCreated); | 245 &ProfileImpl::EnsureSessionServiceCreated); |
239 | 246 |
240 // Determine if prefetch is enabled for this profile. | 247 // Determine if prefetch is enabled for this profile. |
241 // If not profile_manager is present, it means we are in a unittest. | 248 // If not profile_manager is present, it means we are in a unittest. |
242 const CommandLine* command_line = CommandLine::ForCurrentProcess(); | 249 const CommandLine* command_line = CommandLine::ForCurrentProcess(); |
243 predictor_ = chrome_browser_net::Predictor::CreatePredictor( | 250 predictor_ = chrome_browser_net::Predictor::CreatePredictor( |
244 !command_line->HasSwitch(switches::kDisablePreconnect), | 251 !command_line->HasSwitch(switches::kDisablePreconnect), |
245 g_browser_process->profile_manager() == NULL); | 252 g_browser_process->profile_manager() == NULL); |
246 | 253 |
254 session_restore_enabled_ = | |
255 command_line->HasSwitch(switches::kEnableRestoreSessionState); | |
247 if (delegate_) { | 256 if (delegate_) { |
248 prefs_.reset(PrefService::CreatePrefService( | 257 prefs_.reset(PrefService::CreatePrefService( |
249 GetPrefFilePath(), | 258 GetPrefFilePath(), |
250 new ExtensionPrefStore(GetExtensionPrefValueMap(), false), | 259 new ExtensionPrefStore(GetExtensionPrefValueMap(), false), |
251 true)); | 260 true)); |
252 // Wait for the notification that prefs has been loaded (successfully or | 261 // Wait for the notification that prefs has been loaded (successfully or |
253 // not). | 262 // not). |
254 registrar_.Add(this, chrome::NOTIFICATION_PREF_INITIALIZATION_COMPLETED, | 263 registrar_.Add(this, chrome::NOTIFICATION_PREF_INITIALIZATION_COMPLETED, |
255 content::Source<PrefService>(prefs_.get())); | 264 content::Source<PrefService>(prefs_.get())); |
256 } else { | 265 } else { |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
350 int media_cache_max_size; | 359 int media_cache_max_size; |
351 GetCacheParameters(true, &media_cache_path, &media_cache_max_size); | 360 GetCacheParameters(true, &media_cache_path, &media_cache_max_size); |
352 media_cache_path = GetMediaCachePath(media_cache_path); | 361 media_cache_path = GetMediaCachePath(media_cache_path); |
353 | 362 |
354 FilePath extensions_cookie_path = GetPath(); | 363 FilePath extensions_cookie_path = GetPath(); |
355 extensions_cookie_path = | 364 extensions_cookie_path = |
356 extensions_cookie_path.Append(chrome::kExtensionsCookieFilename); | 365 extensions_cookie_path.Append(chrome::kExtensionsCookieFilename); |
357 | 366 |
358 FilePath app_path = GetPath().Append(chrome::kIsolatedAppStateDirname); | 367 FilePath app_path = GetPath().Append(chrome::kIsolatedAppStateDirname); |
359 | 368 |
369 bool restore_old_session_cookies = | |
370 session_restore_enabled_ && | |
371 (!DidLastSessionExitCleanly() || | |
372 CommandLine::ForCurrentProcess()->HasSwitch( | |
373 switches::kRestoreLastSession)); | |
374 | |
360 // Make sure we initialize the ProfileIOData after everything else has been | 375 // Make sure we initialize the ProfileIOData after everything else has been |
361 // initialized that we might be reading from the IO thread. | 376 // initialized that we might be reading from the IO thread. |
362 | 377 |
363 io_data_.Init(cookie_path, origin_bound_cert_path, cache_path, | 378 io_data_.Init(cookie_path, origin_bound_cert_path, cache_path, |
364 cache_max_size, media_cache_path, media_cache_max_size, | 379 cache_max_size, media_cache_path, media_cache_max_size, |
365 extensions_cookie_path, app_path, predictor_, | 380 extensions_cookie_path, app_path, predictor_, |
366 g_browser_process->local_state(), | 381 g_browser_process->local_state(), |
367 g_browser_process->io_thread()); | 382 g_browser_process->io_thread(), |
383 restore_old_session_cookies); | |
368 | 384 |
369 ChromePluginServiceFilter::GetInstance()->RegisterResourceContext( | 385 ChromePluginServiceFilter::GetInstance()->RegisterResourceContext( |
370 PluginPrefs::GetForProfile(this), &GetResourceContext()); | 386 PluginPrefs::GetForProfile(this), &GetResourceContext()); |
371 | 387 |
372 // Creation has been finished. | 388 // Creation has been finished. |
373 if (delegate_) | 389 if (delegate_) |
374 delegate_->OnProfileCreated(this, true); | 390 delegate_->OnProfileCreated(this, true); |
375 | 391 |
376 content::NotificationService::current()->Notify( | 392 content::NotificationService::current()->Notify( |
377 chrome::NOTIFICATION_PROFILE_CREATED, | 393 chrome::NOTIFICATION_PROFILE_CREATED, |
(...skipping 1166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1544 return GURL(chrome::kChromeUINewTabURL); | 1560 return GURL(chrome::kChromeUINewTabURL); |
1545 return home_page; | 1561 return home_page; |
1546 } | 1562 } |
1547 | 1563 |
1548 NetworkActionPredictor* ProfileImpl::GetNetworkActionPredictor() { | 1564 NetworkActionPredictor* ProfileImpl::GetNetworkActionPredictor() { |
1549 if (!network_action_predictor_.get()) | 1565 if (!network_action_predictor_.get()) |
1550 network_action_predictor_.reset(new NetworkActionPredictor(this)); | 1566 network_action_predictor_.reset(new NetworkActionPredictor(this)); |
1551 return network_action_predictor_.get(); | 1567 return network_action_predictor_.get(); |
1552 } | 1568 } |
1553 | 1569 |
1570 void ProfileImpl::SaveSessionState() { | |
1571 if (!session_restore_enabled_) | |
1572 return; | |
1573 BrowserThread::PostTask( | |
1574 BrowserThread::IO, FROM_HERE, | |
1575 base::Bind(&SaveSessionStateOnIOThread, | |
1576 make_scoped_refptr(GetRequestContext()))); | |
erikwright (departed)
2011/11/29 13:43:22
I'm under the impression that Bind automatically i
marja
2011/11/29 14:58:21
If I remove it, the compile-time assert p1_is_refc
| |
1577 } | |
1578 | |
1554 SpellCheckProfile* ProfileImpl::GetSpellCheckProfile() { | 1579 SpellCheckProfile* ProfileImpl::GetSpellCheckProfile() { |
1555 if (!spellcheck_profile_.get()) | 1580 if (!spellcheck_profile_.get()) |
1556 spellcheck_profile_.reset(new SpellCheckProfile(path_)); | 1581 spellcheck_profile_.reset(new SpellCheckProfile(path_)); |
1557 return spellcheck_profile_.get(); | 1582 return spellcheck_profile_.get(); |
1558 } | 1583 } |
1559 | 1584 |
1560 void ProfileImpl::UpdateProfileUserNameCache() { | 1585 void ProfileImpl::UpdateProfileUserNameCache() { |
1561 ProfileManager* profile_manager = g_browser_process->profile_manager(); | 1586 ProfileManager* profile_manager = g_browser_process->profile_manager(); |
1562 ProfileInfoCache& cache = profile_manager->GetProfileInfoCache(); | 1587 ProfileInfoCache& cache = profile_manager->GetProfileInfoCache(); |
1563 size_t index = cache.GetIndexOfProfileWithPath(GetPath()); | 1588 size_t index = cache.GetIndexOfProfileWithPath(GetPath()); |
(...skipping 13 matching lines...) Expand all Loading... | |
1577 FilePath* cache_path, | 1602 FilePath* cache_path, |
1578 int* max_size) { | 1603 int* max_size) { |
1579 DCHECK(cache_path); | 1604 DCHECK(cache_path); |
1580 DCHECK(max_size); | 1605 DCHECK(max_size); |
1581 FilePath path(prefs_->GetFilePath(prefs::kDiskCacheDir)); | 1606 FilePath path(prefs_->GetFilePath(prefs::kDiskCacheDir)); |
1582 if (!path.empty()) | 1607 if (!path.empty()) |
1583 *cache_path = path; | 1608 *cache_path = path; |
1584 *max_size = is_media_context ? prefs_->GetInteger(prefs::kMediaCacheSize) : | 1609 *max_size = is_media_context ? prefs_->GetInteger(prefs::kMediaCacheSize) : |
1585 prefs_->GetInteger(prefs::kDiskCacheSize); | 1610 prefs_->GetInteger(prefs::kDiskCacheSize); |
1586 } | 1611 } |
OLD | NEW |