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/configuration_policy_provider.h" | 51 #include "chrome/browser/policy/configuration_policy_provider.h" |
52 #include "chrome/browser/policy/profile_policy_connector.h" | 52 #include "chrome/browser/policy/profile_policy_connector.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 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
271 favicon_service_created_(false), | 270 favicon_service_created_(false), |
272 created_web_data_service_(false), | 271 created_web_data_service_(false), |
273 created_password_store_(false), | 272 created_password_store_(false), |
274 created_download_manager_(false), | 273 created_download_manager_(false), |
275 start_time_(Time::Now()), | 274 start_time_(Time::Now()), |
276 spellcheck_host_(NULL), | 275 spellcheck_host_(NULL), |
277 spellcheck_host_ready_(false), | 276 spellcheck_host_ready_(false), |
278 #if defined(OS_WIN) | 277 #if defined(OS_WIN) |
279 checked_instant_promo_(false), | 278 checked_instant_promo_(false), |
280 #endif | 279 #endif |
281 shutdown_session_service_(false), | |
282 delegate_(delegate) { | 280 delegate_(delegate) { |
283 DCHECK(!path.empty()) << "Using an empty path will attempt to write " << | 281 DCHECK(!path.empty()) << "Using an empty path will attempt to write " << |
284 "profile files to the root directory!"; | 282 "profile files to the root directory!"; |
285 create_session_service_timer_.Start( | 283 create_session_service_timer_.Start( |
286 TimeDelta::FromMilliseconds(kCreateSessionServiceDelayMS), this, | 284 TimeDelta::FromMilliseconds(kCreateSessionServiceDelayMS), this, |
287 &ProfileImpl::EnsureSessionServiceCreated); | 285 &ProfileImpl::EnsureSessionServiceCreated); |
288 | 286 |
289 if (delegate_) { | 287 if (delegate_) { |
290 prefs_.reset(PrefService::CreatePrefServiceAsync( | 288 prefs_.reset(PrefService::CreatePrefServiceAsync( |
291 GetPrefFilePath(), | 289 GetPrefFilePath(), |
(...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
583 } | 581 } |
584 | 582 |
585 ProfileImpl::~ProfileImpl() { | 583 ProfileImpl::~ProfileImpl() { |
586 NotificationService::current()->Notify( | 584 NotificationService::current()->Notify( |
587 NotificationType::PROFILE_DESTROYED, | 585 NotificationType::PROFILE_DESTROYED, |
588 Source<Profile>(this), | 586 Source<Profile>(this), |
589 NotificationService::NoDetails()); | 587 NotificationService::NoDetails()); |
590 | 588 |
591 GetPolicyConnector()->Shutdown(); | 589 GetPolicyConnector()->Shutdown(); |
592 | 590 |
| 591 StopCreateSessionServiceTimer(); |
| 592 |
593 ProfileDependencyManager::GetInstance()->DestroyProfileServices(this); | 593 ProfileDependencyManager::GetInstance()->DestroyProfileServices(this); |
594 | 594 |
595 tab_restore_service_.reset(); | |
596 | |
597 StopCreateSessionServiceTimer(); | |
598 // TemplateURLModel schedules a task on the WebDataService from its | 595 // TemplateURLModel schedules a task on the WebDataService from its |
599 // destructor. Delete it first to ensure the task gets scheduled before we | 596 // destructor. Delete it first to ensure the task gets scheduled before we |
600 // shut down the database. | 597 // shut down the database. |
601 template_url_model_.reset(); | 598 template_url_model_.reset(); |
602 | 599 |
603 // DownloadManager is lazily created, so check before accessing it. | 600 // DownloadManager is lazily created, so check before accessing it. |
604 if (download_manager_.get()) { | 601 if (download_manager_.get()) { |
605 // The download manager queries the history system and should be shut down | 602 // The download manager queries the history system and should be shut down |
606 // before the history is shut down so it can properly cancel all requests. | 603 // before the history is shut down so it can properly cancel all requests. |
607 download_manager_->Shutdown(); | 604 download_manager_->Shutdown(); |
(...skipping 551 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1159 } | 1156 } |
1160 | 1157 |
1161 fileapi::FileSystemContext* ProfileImpl::GetFileSystemContext() { | 1158 fileapi::FileSystemContext* ProfileImpl::GetFileSystemContext() { |
1162 if (!file_system_context_.get()) | 1159 if (!file_system_context_.get()) |
1163 file_system_context_ = CreateFileSystemContext( | 1160 file_system_context_ = CreateFileSystemContext( |
1164 GetPath(), IsOffTheRecord(), GetExtensionSpecialStoragePolicy()); | 1161 GetPath(), IsOffTheRecord(), GetExtensionSpecialStoragePolicy()); |
1165 DCHECK(file_system_context_.get()); | 1162 DCHECK(file_system_context_.get()); |
1166 return file_system_context_.get(); | 1163 return file_system_context_.get(); |
1167 } | 1164 } |
1168 | 1165 |
1169 SessionService* ProfileImpl::GetSessionService() { | |
1170 if (!session_service_.get() && !shutdown_session_service_) { | |
1171 session_service_.reset(new SessionService(this)); | |
1172 session_service_->ResetFromCurrentBrowsers(); | |
1173 } | |
1174 return session_service_.get(); | |
1175 } | |
1176 | |
1177 void ProfileImpl::ShutdownSessionService() { | |
1178 if (shutdown_session_service_) | |
1179 return; | |
1180 | |
1181 // We're about to exit, force creation of the session service if it hasn't | |
1182 // been created yet. We do this to ensure session state matches the point in | |
1183 // time the user exited. | |
1184 GetSessionService(); | |
1185 shutdown_session_service_ = true; | |
1186 session_service_.reset(); | |
1187 } | |
1188 | |
1189 bool ProfileImpl::HasSessionService() const { | |
1190 return (session_service_.get() != NULL); | |
1191 } | |
1192 | |
1193 bool ProfileImpl::HasProfileSyncService() const { | 1166 bool ProfileImpl::HasProfileSyncService() const { |
1194 return (sync_service_.get() != NULL); | 1167 return (sync_service_.get() != NULL); |
1195 } | 1168 } |
1196 | 1169 |
1197 bool ProfileImpl::DidLastSessionExitCleanly() { | 1170 bool ProfileImpl::DidLastSessionExitCleanly() { |
1198 // last_session_exited_cleanly_ is set when the preferences are loaded. Force | 1171 // last_session_exited_cleanly_ is set when the preferences are loaded. Force |
1199 // it to be set by asking for the prefs. | 1172 // it to be set by asking for the prefs. |
1200 GetPrefs(); | 1173 GetPrefs(); |
1201 return last_session_exited_cleanly_; | 1174 return last_session_exited_cleanly_; |
1202 } | 1175 } |
(...skipping 14 matching lines...) Expand all Loading... |
1217 if (profile == static_cast<Profile*>(this)) | 1190 if (profile == static_cast<Profile*>(this)) |
1218 return true; | 1191 return true; |
1219 Profile* otr_profile = off_the_record_profile_.get(); | 1192 Profile* otr_profile = off_the_record_profile_.get(); |
1220 return otr_profile && profile == otr_profile; | 1193 return otr_profile && profile == otr_profile; |
1221 } | 1194 } |
1222 | 1195 |
1223 Time ProfileImpl::GetStartTime() const { | 1196 Time ProfileImpl::GetStartTime() const { |
1224 return start_time_; | 1197 return start_time_; |
1225 } | 1198 } |
1226 | 1199 |
1227 TabRestoreService* ProfileImpl::GetTabRestoreService() { | |
1228 if (!tab_restore_service_.get()) | |
1229 tab_restore_service_.reset(new TabRestoreService(this)); | |
1230 return tab_restore_service_.get(); | |
1231 } | |
1232 | |
1233 history::TopSites* ProfileImpl::GetTopSites() { | 1200 history::TopSites* ProfileImpl::GetTopSites() { |
1234 if (!top_sites_.get()) { | 1201 if (!top_sites_.get()) { |
1235 top_sites_ = new history::TopSites(this); | 1202 top_sites_ = new history::TopSites(this); |
1236 top_sites_->Init(GetPath().Append(chrome::kTopSitesFilename)); | 1203 top_sites_->Init(GetPath().Append(chrome::kTopSitesFilename)); |
1237 } | 1204 } |
1238 return top_sites_; | 1205 return top_sites_; |
1239 } | 1206 } |
1240 | 1207 |
1241 history::TopSites* ProfileImpl::GetTopSitesWithoutCreating() { | 1208 history::TopSites* ProfileImpl::GetTopSitesWithoutCreating() { |
1242 return top_sites_; | 1209 return top_sites_; |
1243 } | 1210 } |
1244 | 1211 |
1245 void ProfileImpl::ResetTabRestoreService() { | |
1246 tab_restore_service_.reset(); | |
1247 } | |
1248 | |
1249 SpellCheckHost* ProfileImpl::GetSpellCheckHost() { | 1212 SpellCheckHost* ProfileImpl::GetSpellCheckHost() { |
1250 return spellcheck_host_ready_ ? spellcheck_host_.get() : NULL; | 1213 return spellcheck_host_ready_ ? spellcheck_host_.get() : NULL; |
1251 } | 1214 } |
1252 | 1215 |
1253 void ProfileImpl::ReinitializeSpellCheckHost(bool force) { | 1216 void ProfileImpl::ReinitializeSpellCheckHost(bool force) { |
1254 // If we are already loading the spellchecker, and this is just a hint to | 1217 // If we are already loading the spellchecker, and this is just a hint to |
1255 // load the spellchecker, do nothing. | 1218 // load the spellchecker, do nothing. |
1256 if (!force && spellcheck_host_.get()) | 1219 if (!force && spellcheck_host_.get()) |
1257 return; | 1220 return; |
1258 | 1221 |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1344 GetProfileSyncService(); // Causes lazy-load if sync is enabled. | 1307 GetProfileSyncService(); // Causes lazy-load if sync is enabled. |
1345 registrar_.Remove(this, NotificationType::BOOKMARK_MODEL_LOADED, | 1308 registrar_.Remove(this, NotificationType::BOOKMARK_MODEL_LOADED, |
1346 Source<Profile>(this)); | 1309 Source<Profile>(this)); |
1347 } | 1310 } |
1348 } | 1311 } |
1349 | 1312 |
1350 void ProfileImpl::StopCreateSessionServiceTimer() { | 1313 void ProfileImpl::StopCreateSessionServiceTimer() { |
1351 create_session_service_timer_.Stop(); | 1314 create_session_service_timer_.Stop(); |
1352 } | 1315 } |
1353 | 1316 |
| 1317 void ProfileImpl::EnsureSessionServiceCreated() { |
| 1318 SessionServiceFactory::GetForProfile(this); |
| 1319 } |
| 1320 |
1354 TokenService* ProfileImpl::GetTokenService() { | 1321 TokenService* ProfileImpl::GetTokenService() { |
1355 if (!token_service_.get()) { | 1322 if (!token_service_.get()) { |
1356 token_service_.reset(new TokenService()); | 1323 token_service_.reset(new TokenService()); |
1357 } | 1324 } |
1358 return token_service_.get(); | 1325 return token_service_.get(); |
1359 } | 1326 } |
1360 | 1327 |
1361 ProfileSyncService* ProfileImpl::GetProfileSyncService() { | 1328 ProfileSyncService* ProfileImpl::GetProfileSyncService() { |
1362 #if defined(OS_CHROMEOS) | 1329 #if defined(OS_CHROMEOS) |
1363 if (!sync_service_.get()) { | 1330 if (!sync_service_.get()) { |
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1563 return pref_proxy_config_tracker_; | 1530 return pref_proxy_config_tracker_; |
1564 } | 1531 } |
1565 | 1532 |
1566 prerender::PrerenderManager* ProfileImpl::GetPrerenderManager() { | 1533 prerender::PrerenderManager* ProfileImpl::GetPrerenderManager() { |
1567 if (!prerender::PrerenderManager::IsPrerenderingPossible()) | 1534 if (!prerender::PrerenderManager::IsPrerenderingPossible()) |
1568 return NULL; | 1535 return NULL; |
1569 if (!prerender_manager_.get()) | 1536 if (!prerender_manager_.get()) |
1570 prerender_manager_.reset(new prerender::PrerenderManager(this)); | 1537 prerender_manager_.reset(new prerender::PrerenderManager(this)); |
1571 return prerender_manager_.get(); | 1538 return prerender_manager_.get(); |
1572 } | 1539 } |
OLD | NEW |