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/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/compiler_specific.h" | 8 #include "base/compiler_specific.h" |
9 #include "base/environment.h" | 9 #include "base/environment.h" |
10 #include "base/file_path.h" | 10 #include "base/file_path.h" |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
51 #include "chrome/browser/policy/profile_policy_connector.h" | 51 #include "chrome/browser/policy/profile_policy_connector.h" |
52 #include "chrome/browser/policy/profile_policy_connector_factory.h" | 52 #include "chrome/browser/policy/profile_policy_connector_factory.h" |
53 #include "chrome/browser/prefs/browser_prefs.h" | 53 #include "chrome/browser/prefs/browser_prefs.h" |
54 #include "chrome/browser/prefs/pref_value_store.h" | 54 #include "chrome/browser/prefs/pref_value_store.h" |
55 #include "chrome/browser/prerender/prerender_manager.h" | 55 #include "chrome/browser/prerender/prerender_manager.h" |
56 #include "chrome/browser/printing/cloud_print/cloud_print_proxy_service.h" | 56 #include "chrome/browser/printing/cloud_print/cloud_print_proxy_service.h" |
57 #include "chrome/browser/profiles/profile_dependency_manager.h" | 57 #include "chrome/browser/profiles/profile_dependency_manager.h" |
58 #include "chrome/browser/profiles/profile_manager.h" | 58 #include "chrome/browser/profiles/profile_manager.h" |
59 #include "chrome/browser/search_engines/template_url_fetcher.h" | 59 #include "chrome/browser/search_engines/template_url_fetcher.h" |
60 #include "chrome/browser/search_engines/template_url_model.h" | 60 #include "chrome/browser/search_engines/template_url_model.h" |
61 #include "chrome/browser/sessions/session_service.h" | 61 #include "chrome/browser/sessions/session_service_factory.h" |
62 #include "chrome/browser/sessions/tab_restore_service.h" | |
63 #include "chrome/browser/spellcheck_host.h" | 62 #include "chrome/browser/spellcheck_host.h" |
64 #include "chrome/browser/ssl/ssl_host_state.h" | 63 #include "chrome/browser/ssl/ssl_host_state.h" |
65 #include "chrome/browser/status_icons/status_tray.h" | 64 #include "chrome/browser/status_icons/status_tray.h" |
66 #include "chrome/browser/sync/profile_sync_factory_impl.h" | 65 #include "chrome/browser/sync/profile_sync_factory_impl.h" |
67 #include "chrome/browser/sync/profile_sync_service.h" | 66 #include "chrome/browser/sync/profile_sync_service.h" |
68 #include "chrome/browser/tabs/pinned_tab_service_factory.h" | 67 #include "chrome/browser/tabs/pinned_tab_service_factory.h" |
69 #include "chrome/browser/transport_security_persister.h" | 68 #include "chrome/browser/transport_security_persister.h" |
70 #include "chrome/browser/ui/browser_list.h" | 69 #include "chrome/browser/ui/browser_list.h" |
71 #include "chrome/browser/ui/find_bar/find_bar_state.h" | 70 #include "chrome/browser/ui/find_bar/find_bar_state.h" |
72 #include "chrome/browser/ui/webui/chrome_url_data_manager.h" | 71 #include "chrome/browser/ui/webui/chrome_url_data_manager.h" |
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
273 favicon_service_created_(false), | 272 favicon_service_created_(false), |
274 created_web_data_service_(false), | 273 created_web_data_service_(false), |
275 created_password_store_(false), | 274 created_password_store_(false), |
276 created_download_manager_(false), | 275 created_download_manager_(false), |
277 start_time_(Time::Now()), | 276 start_time_(Time::Now()), |
278 spellcheck_host_(NULL), | 277 spellcheck_host_(NULL), |
279 spellcheck_host_ready_(false), | 278 spellcheck_host_ready_(false), |
280 #if defined(OS_WIN) | 279 #if defined(OS_WIN) |
281 checked_instant_promo_(false), | 280 checked_instant_promo_(false), |
282 #endif | 281 #endif |
283 shutdown_session_service_(false), | |
284 delegate_(delegate) { | 282 delegate_(delegate) { |
285 DCHECK(!path.empty()) << "Using an empty path will attempt to write " << | 283 DCHECK(!path.empty()) << "Using an empty path will attempt to write " << |
286 "profile files to the root directory!"; | 284 "profile files to the root directory!"; |
287 create_session_service_timer_.Start( | 285 create_session_service_timer_.Start( |
288 TimeDelta::FromMilliseconds(kCreateSessionServiceDelayMS), this, | 286 TimeDelta::FromMilliseconds(kCreateSessionServiceDelayMS), this, |
289 &ProfileImpl::EnsureSessionServiceCreated); | 287 &ProfileImpl::EnsureSessionServiceCreated); |
290 | 288 |
291 if (delegate_) { | 289 if (delegate_) { |
292 prefs_.reset(PrefService::CreatePrefServiceAsync( | 290 prefs_.reset(PrefService::CreatePrefServiceAsync( |
293 GetPrefFilePath(), | 291 GetPrefFilePath(), |
(...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
580 void ProfileImpl::set_last_selected_directory(const FilePath& path) { | 578 void ProfileImpl::set_last_selected_directory(const FilePath& path) { |
581 GetPrefs()->SetFilePath(prefs::kSelectFileLastDirectory, path); | 579 GetPrefs()->SetFilePath(prefs::kSelectFileLastDirectory, path); |
582 } | 580 } |
583 | 581 |
584 ProfileImpl::~ProfileImpl() { | 582 ProfileImpl::~ProfileImpl() { |
585 NotificationService::current()->Notify( | 583 NotificationService::current()->Notify( |
586 NotificationType::PROFILE_DESTROYED, | 584 NotificationType::PROFILE_DESTROYED, |
587 Source<Profile>(this), | 585 Source<Profile>(this), |
588 NotificationService::NoDetails()); | 586 NotificationService::NoDetails()); |
589 | 587 |
| 588 StopCreateSessionServiceTimer(); |
| 589 |
590 ProfileDependencyManager::GetInstance()->DestroyProfileServices(this); | 590 ProfileDependencyManager::GetInstance()->DestroyProfileServices(this); |
591 | 591 |
592 tab_restore_service_.reset(); | |
593 | |
594 StopCreateSessionServiceTimer(); | |
595 // TemplateURLModel schedules a task on the WebDataService from its | 592 // TemplateURLModel schedules a task on the WebDataService from its |
596 // destructor. Delete it first to ensure the task gets scheduled before we | 593 // destructor. Delete it first to ensure the task gets scheduled before we |
597 // shut down the database. | 594 // shut down the database. |
598 template_url_model_.reset(); | 595 template_url_model_.reset(); |
599 | 596 |
600 // DownloadManager is lazily created, so check before accessing it. | 597 // DownloadManager is lazily created, so check before accessing it. |
601 if (download_manager_.get()) { | 598 if (download_manager_.get()) { |
602 // The download manager queries the history system and should be shut down | 599 // The download manager queries the history system and should be shut down |
603 // before the history is shut down so it can properly cancel all requests. | 600 // before the history is shut down so it can properly cancel all requests. |
604 download_manager_->Shutdown(); | 601 download_manager_->Shutdown(); |
(...skipping 566 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1171 if (!quota_manager_.get()) { | 1168 if (!quota_manager_.get()) { |
1172 quota_manager_ = new quota::QuotaManager( | 1169 quota_manager_ = new quota::QuotaManager( |
1173 IsOffTheRecord(), | 1170 IsOffTheRecord(), |
1174 GetPath(), | 1171 GetPath(), |
1175 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO), | 1172 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO), |
1176 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::DB)); | 1173 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::DB)); |
1177 } | 1174 } |
1178 return quota_manager_.get(); | 1175 return quota_manager_.get(); |
1179 } | 1176 } |
1180 | 1177 |
1181 SessionService* ProfileImpl::GetSessionService() { | |
1182 if (!session_service_.get() && !shutdown_session_service_) { | |
1183 session_service_.reset(new SessionService(this)); | |
1184 session_service_->ResetFromCurrentBrowsers(); | |
1185 } | |
1186 return session_service_.get(); | |
1187 } | |
1188 | |
1189 void ProfileImpl::ShutdownSessionService() { | |
1190 if (shutdown_session_service_) | |
1191 return; | |
1192 | |
1193 // We're about to exit, force creation of the session service if it hasn't | |
1194 // been created yet. We do this to ensure session state matches the point in | |
1195 // time the user exited. | |
1196 GetSessionService(); | |
1197 shutdown_session_service_ = true; | |
1198 session_service_.reset(); | |
1199 } | |
1200 | |
1201 bool ProfileImpl::HasSessionService() const { | |
1202 return (session_service_.get() != NULL); | |
1203 } | |
1204 | |
1205 bool ProfileImpl::HasProfileSyncService() const { | 1178 bool ProfileImpl::HasProfileSyncService() const { |
1206 return (sync_service_.get() != NULL); | 1179 return (sync_service_.get() != NULL); |
1207 } | 1180 } |
1208 | 1181 |
1209 bool ProfileImpl::DidLastSessionExitCleanly() { | 1182 bool ProfileImpl::DidLastSessionExitCleanly() { |
1210 // last_session_exited_cleanly_ is set when the preferences are loaded. Force | 1183 // last_session_exited_cleanly_ is set when the preferences are loaded. Force |
1211 // it to be set by asking for the prefs. | 1184 // it to be set by asking for the prefs. |
1212 GetPrefs(); | 1185 GetPrefs(); |
1213 return last_session_exited_cleanly_; | 1186 return last_session_exited_cleanly_; |
1214 } | 1187 } |
(...skipping 14 matching lines...) Expand all Loading... |
1229 if (profile == static_cast<Profile*>(this)) | 1202 if (profile == static_cast<Profile*>(this)) |
1230 return true; | 1203 return true; |
1231 Profile* otr_profile = off_the_record_profile_.get(); | 1204 Profile* otr_profile = off_the_record_profile_.get(); |
1232 return otr_profile && profile == otr_profile; | 1205 return otr_profile && profile == otr_profile; |
1233 } | 1206 } |
1234 | 1207 |
1235 Time ProfileImpl::GetStartTime() const { | 1208 Time ProfileImpl::GetStartTime() const { |
1236 return start_time_; | 1209 return start_time_; |
1237 } | 1210 } |
1238 | 1211 |
1239 TabRestoreService* ProfileImpl::GetTabRestoreService() { | |
1240 if (!tab_restore_service_.get()) | |
1241 tab_restore_service_.reset(new TabRestoreService(this)); | |
1242 return tab_restore_service_.get(); | |
1243 } | |
1244 | |
1245 history::TopSites* ProfileImpl::GetTopSites() { | 1212 history::TopSites* ProfileImpl::GetTopSites() { |
1246 if (!top_sites_.get()) { | 1213 if (!top_sites_.get()) { |
1247 top_sites_ = new history::TopSites(this); | 1214 top_sites_ = new history::TopSites(this); |
1248 top_sites_->Init(GetPath().Append(chrome::kTopSitesFilename)); | 1215 top_sites_->Init(GetPath().Append(chrome::kTopSitesFilename)); |
1249 } | 1216 } |
1250 return top_sites_; | 1217 return top_sites_; |
1251 } | 1218 } |
1252 | 1219 |
1253 history::TopSites* ProfileImpl::GetTopSitesWithoutCreating() { | 1220 history::TopSites* ProfileImpl::GetTopSitesWithoutCreating() { |
1254 return top_sites_; | 1221 return top_sites_; |
1255 } | 1222 } |
1256 | 1223 |
1257 void ProfileImpl::ResetTabRestoreService() { | |
1258 tab_restore_service_.reset(); | |
1259 } | |
1260 | |
1261 SpellCheckHost* ProfileImpl::GetSpellCheckHost() { | 1224 SpellCheckHost* ProfileImpl::GetSpellCheckHost() { |
1262 return spellcheck_host_ready_ ? spellcheck_host_.get() : NULL; | 1225 return spellcheck_host_ready_ ? spellcheck_host_.get() : NULL; |
1263 } | 1226 } |
1264 | 1227 |
1265 void ProfileImpl::ReinitializeSpellCheckHost(bool force) { | 1228 void ProfileImpl::ReinitializeSpellCheckHost(bool force) { |
1266 // If we are already loading the spellchecker, and this is just a hint to | 1229 // If we are already loading the spellchecker, and this is just a hint to |
1267 // load the spellchecker, do nothing. | 1230 // load the spellchecker, do nothing. |
1268 if (!force && spellcheck_host_.get()) | 1231 if (!force && spellcheck_host_.get()) |
1269 return; | 1232 return; |
1270 | 1233 |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1359 GetProfileSyncService(); // Causes lazy-load if sync is enabled. | 1322 GetProfileSyncService(); // Causes lazy-load if sync is enabled. |
1360 registrar_.Remove(this, NotificationType::BOOKMARK_MODEL_LOADED, | 1323 registrar_.Remove(this, NotificationType::BOOKMARK_MODEL_LOADED, |
1361 Source<Profile>(this)); | 1324 Source<Profile>(this)); |
1362 } | 1325 } |
1363 } | 1326 } |
1364 | 1327 |
1365 void ProfileImpl::StopCreateSessionServiceTimer() { | 1328 void ProfileImpl::StopCreateSessionServiceTimer() { |
1366 create_session_service_timer_.Stop(); | 1329 create_session_service_timer_.Stop(); |
1367 } | 1330 } |
1368 | 1331 |
| 1332 void ProfileImpl::EnsureSessionServiceCreated() { |
| 1333 SessionServiceFactory::GetForProfile(this); |
| 1334 } |
| 1335 |
1369 TokenService* ProfileImpl::GetTokenService() { | 1336 TokenService* ProfileImpl::GetTokenService() { |
1370 if (!token_service_.get()) { | 1337 if (!token_service_.get()) { |
1371 token_service_.reset(new TokenService()); | 1338 token_service_.reset(new TokenService()); |
1372 } | 1339 } |
1373 return token_service_.get(); | 1340 return token_service_.get(); |
1374 } | 1341 } |
1375 | 1342 |
1376 ProfileSyncService* ProfileImpl::GetProfileSyncService() { | 1343 ProfileSyncService* ProfileImpl::GetProfileSyncService() { |
1377 #if defined(OS_CHROMEOS) | 1344 #if defined(OS_CHROMEOS) |
1378 if (!sync_service_.get()) { | 1345 if (!sync_service_.get()) { |
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1571 return pref_proxy_config_tracker_; | 1538 return pref_proxy_config_tracker_; |
1572 } | 1539 } |
1573 | 1540 |
1574 prerender::PrerenderManager* ProfileImpl::GetPrerenderManager() { | 1541 prerender::PrerenderManager* ProfileImpl::GetPrerenderManager() { |
1575 if (!prerender::PrerenderManager::IsPrerenderingPossible()) | 1542 if (!prerender::PrerenderManager::IsPrerenderingPossible()) |
1576 return NULL; | 1543 return NULL; |
1577 if (!prerender_manager_.get()) | 1544 if (!prerender_manager_.get()) |
1578 prerender_manager_.reset(new prerender::PrerenderManager(this)); | 1545 prerender_manager_.reset(new prerender::PrerenderManager(this)); |
1579 return prerender_manager_.get(); | 1546 return prerender_manager_.get(); |
1580 } | 1547 } |
OLD | NEW |