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/profile.h" | 5 #include "chrome/browser/profile.h" |
6 | 6 |
7 #include "app/theme_provider.h" | 7 #include "app/theme_provider.h" |
8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
9 #include "base/file_path.h" | 9 #include "base/file_path.h" |
10 #include "base/file_util.h" | 10 #include "base/file_util.h" |
(...skipping 460 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
471 } | 471 } |
472 | 472 |
473 virtual SpellChecker* GetSpellChecker() { | 473 virtual SpellChecker* GetSpellChecker() { |
474 return profile_->GetSpellChecker(); | 474 return profile_->GetSpellChecker(); |
475 } | 475 } |
476 | 476 |
477 virtual void DeleteSpellChecker() { | 477 virtual void DeleteSpellChecker() { |
478 profile_->DeleteSpellChecker(); | 478 profile_->DeleteSpellChecker(); |
479 } | 479 } |
480 | 480 |
| 481 #if defined(SPELLCHECKER_IN_RENDERER) |
| 482 virtual SpellCheckHost* GetSpellCheckHost() { |
| 483 return profile_->GetSpellCheckHost(); |
| 484 } |
| 485 |
| 486 virtual void ReinitializeSpellCheckHost(bool force) { |
| 487 profile_->ReinitializeSpellCheckHost(force); |
| 488 } |
| 489 #endif |
| 490 |
481 virtual WebKitContext* GetWebKitContext() { | 491 virtual WebKitContext* GetWebKitContext() { |
482 if (!webkit_context_.get()) | 492 if (!webkit_context_.get()) |
483 webkit_context_ = new WebKitContext(GetPath(), true); | 493 webkit_context_ = new WebKitContext(GetPath(), true); |
484 DCHECK(webkit_context_.get()); | 494 DCHECK(webkit_context_.get()); |
485 return webkit_context_.get(); | 495 return webkit_context_.get(); |
486 } | 496 } |
487 | 497 |
488 virtual ThumbnailStore* GetThumbnailStore() { | 498 virtual ThumbnailStore* GetThumbnailStore() { |
489 return NULL; | 499 return NULL; |
490 } | 500 } |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
562 extensions_request_context_(NULL), | 572 extensions_request_context_(NULL), |
563 blacklist_(NULL), | 573 blacklist_(NULL), |
564 history_service_created_(false), | 574 history_service_created_(false), |
565 favicon_service_created_(false), | 575 favicon_service_created_(false), |
566 created_web_data_service_(false), | 576 created_web_data_service_(false), |
567 created_password_store_(false), | 577 created_password_store_(false), |
568 created_download_manager_(false), | 578 created_download_manager_(false), |
569 created_theme_provider_(false), | 579 created_theme_provider_(false), |
570 start_time_(Time::Now()), | 580 start_time_(Time::Now()), |
571 spellchecker_(NULL), | 581 spellchecker_(NULL), |
| 582 #if defined(OS_LINUX) |
| 583 spellcheck_host_(NULL), |
| 584 spellcheck_host_ready_(false), |
| 585 #endif |
572 shutdown_session_service_(false) { | 586 shutdown_session_service_(false) { |
573 DCHECK(!path.empty()) << "Using an empty path will attempt to write " << | 587 DCHECK(!path.empty()) << "Using an empty path will attempt to write " << |
574 "profile files to the root directory!"; | 588 "profile files to the root directory!"; |
575 create_session_service_timer_.Start( | 589 create_session_service_timer_.Start( |
576 TimeDelta::FromMilliseconds(kCreateSessionServiceDelayMS), this, | 590 TimeDelta::FromMilliseconds(kCreateSessionServiceDelayMS), this, |
577 &ProfileImpl::EnsureSessionServiceCreated); | 591 &ProfileImpl::EnsureSessionServiceCreated); |
578 | 592 |
579 if (CommandLine::ForCurrentProcess()->HasSwitch( | 593 if (CommandLine::ForCurrentProcess()->HasSwitch( |
580 switches::kEnableExtensionTimelineApi)) { | 594 switches::kEnableExtensionTimelineApi)) { |
581 extension_devtools_manager_ = new ExtensionDevToolsManager(this); | 595 extension_devtools_manager_ = new ExtensionDevToolsManager(this); |
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
733 // increased the ref count of the service. In such a situation, when we | 747 // increased the ref count of the service. In such a situation, when we |
734 // decrement the refcount, it won't be 0, and the threads/databases aren't | 748 // decrement the refcount, it won't be 0, and the threads/databases aren't |
735 // properly shut down. By explicitly calling Cleanup/Shutdown we ensure the | 749 // properly shut down. By explicitly calling Cleanup/Shutdown we ensure the |
736 // databases are properly closed. | 750 // databases are properly closed. |
737 if (web_data_service_.get()) | 751 if (web_data_service_.get()) |
738 web_data_service_->Shutdown(); | 752 web_data_service_->Shutdown(); |
739 | 753 |
740 if (history_service_.get()) | 754 if (history_service_.get()) |
741 history_service_->Cleanup(); | 755 history_service_->Cleanup(); |
742 | 756 |
| 757 #if defined(SPELLCHECKER_IN_RENDERER) |
| 758 if (spellcheck_host_.get()) |
| 759 spellcheck_host_->UnsetObserver(); |
| 760 #endif |
743 DeleteSpellCheckerImpl(false); | 761 DeleteSpellCheckerImpl(false); |
744 | 762 |
745 if (default_request_context_ == request_context_) { | 763 if (default_request_context_ == request_context_) { |
746 #if defined(OS_LINUX) | 764 #if defined(OS_LINUX) |
747 // We use default_request_context_ for OCSP. | 765 // We use default_request_context_ for OCSP. |
748 // Release URLRequestContext used in OCSP handlers. | 766 // Release URLRequestContext used in OCSP handlers. |
749 net::SetURLRequestContextForOCSP(NULL); | 767 net::SetURLRequestContextForOCSP(NULL); |
750 #endif | 768 #endif |
751 default_request_context_ = NULL; | 769 default_request_context_ = NULL; |
752 } | 770 } |
(...skipping 500 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1253 // Set auto spell correct status for spellchecker. | 1271 // Set auto spell correct status for spellchecker. |
1254 spellchecker_->EnableAutoSpellCorrect( | 1272 spellchecker_->EnableAutoSpellCorrect( |
1255 prefs->GetBoolean(prefs::kEnableAutoSpellCorrect)); | 1273 prefs->GetBoolean(prefs::kEnableAutoSpellCorrect)); |
1256 | 1274 |
1257 NotifySpellCheckerChanged(); | 1275 NotifySpellCheckerChanged(); |
1258 } else { | 1276 } else { |
1259 DeleteSpellCheckerImpl(true); | 1277 DeleteSpellCheckerImpl(true); |
1260 } | 1278 } |
1261 } | 1279 } |
1262 | 1280 |
| 1281 #if defined(SPELLCHECKER_IN_RENDERER) |
| 1282 SpellCheckHost* ProfileImpl::GetSpellCheckHost() { |
| 1283 return spellcheck_host_ready_ ? spellcheck_host_.get() : NULL; |
| 1284 } |
| 1285 |
| 1286 void ProfileImpl::ReinitializeSpellCheckHost(bool force) { |
| 1287 // If we are already loading the spellchecker, and this is just a hint to |
| 1288 // load the spellchecker, do nothing. |
| 1289 if (!force && spellcheck_host_.get()) |
| 1290 return; |
| 1291 |
| 1292 bool notify = false; |
| 1293 if (spellcheck_host_.get()) { |
| 1294 spellcheck_host_->UnsetObserver(); |
| 1295 spellcheck_host_.release(); |
| 1296 spellcheck_host_ready_ = false; |
| 1297 notify = true; |
| 1298 } |
| 1299 |
| 1300 PrefService* prefs = GetPrefs(); |
| 1301 if (prefs->GetBoolean(prefs::kEnableSpellCheck)) { |
| 1302 // Retrieve the (perhaps updated recently) dictionary name from preferences. |
| 1303 spellcheck_host_ = new SpellCheckHost(this, |
| 1304 WideToASCII(prefs->GetString(prefs::kSpellCheckDictionary)), |
| 1305 GetRequestContext()); |
| 1306 spellcheck_host_->AddRef(); |
| 1307 } else if (notify) { |
| 1308 // The spellchecker has been disabled. |
| 1309 SpellCheckHostInitialized(); |
| 1310 } |
| 1311 } |
| 1312 |
| 1313 void ProfileImpl::SpellCheckHostInitialized() { |
| 1314 spellcheck_host_ready_ = |
| 1315 spellcheck_host_ && spellcheck_host_->bdict_fd().fd != -1; |
| 1316 NotificationService::current()->Notify( |
| 1317 NotificationType::SPELLCHECK_HOST_REINITIALIZED, |
| 1318 Source<Profile>(this), NotificationService::NoDetails()); |
| 1319 } |
| 1320 #endif |
| 1321 |
1263 void ProfileImpl::NotifySpellCheckerChanged() { | 1322 void ProfileImpl::NotifySpellCheckerChanged() { |
1264 SpellcheckerReinitializedDetails scoped_spellchecker; | 1323 SpellcheckerReinitializedDetails scoped_spellchecker; |
1265 scoped_spellchecker.spellchecker = spellchecker_; | 1324 scoped_spellchecker.spellchecker = spellchecker_; |
1266 ChromeThread::PostTask( | 1325 ChromeThread::PostTask( |
1267 ChromeThread::IO, FROM_HERE, | 1326 ChromeThread::IO, FROM_HERE, |
1268 new NotifySpellcheckerChangeTask(this, scoped_spellchecker)); | 1327 new NotifySpellcheckerChangeTask(this, scoped_spellchecker)); |
1269 } | 1328 } |
1270 | 1329 |
1271 void ProfileImpl::DeleteSpellCheckerImpl(bool notify) { | 1330 void ProfileImpl::DeleteSpellCheckerImpl(bool notify) { |
1272 if (!spellchecker_) | 1331 if (!spellchecker_) |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1321 } | 1380 } |
1322 | 1381 |
1323 void ProfileImpl::Observe(NotificationType type, | 1382 void ProfileImpl::Observe(NotificationType type, |
1324 const NotificationSource& source, | 1383 const NotificationSource& source, |
1325 const NotificationDetails& details) { | 1384 const NotificationDetails& details) { |
1326 if (NotificationType::PREF_CHANGED == type) { | 1385 if (NotificationType::PREF_CHANGED == type) { |
1327 std::wstring* pref_name_in = Details<std::wstring>(details).ptr(); | 1386 std::wstring* pref_name_in = Details<std::wstring>(details).ptr(); |
1328 PrefService* prefs = Source<PrefService>(source).ptr(); | 1387 PrefService* prefs = Source<PrefService>(source).ptr(); |
1329 DCHECK(pref_name_in && prefs); | 1388 DCHECK(pref_name_in && prefs); |
1330 if (*pref_name_in == prefs::kSpellCheckDictionary || | 1389 if (*pref_name_in == prefs::kSpellCheckDictionary || |
1331 *pref_name_in == prefs::kEnableSpellCheck || | 1390 #if !defined(SPELLCHECKER_IN_RENDERER) |
1332 *pref_name_in == prefs::kEnableAutoSpellCorrect) { | 1391 *pref_name_in == prefs::kEnableAutoSpellCorrect || |
| 1392 #endif |
| 1393 *pref_name_in == prefs::kEnableSpellCheck) { |
1333 ReinitializeSpellChecker(); | 1394 ReinitializeSpellChecker(); |
| 1395 #if defined(SPELLCHECKER_IN_RENDERER) |
| 1396 ReinitializeSpellCheckHost(true); |
| 1397 #endif |
1334 } | 1398 } |
1335 } else if (NotificationType::THEME_INSTALLED == type) { | 1399 } else if (NotificationType::THEME_INSTALLED == type) { |
1336 Extension* extension = Details<Extension>(details).ptr(); | 1400 Extension* extension = Details<Extension>(details).ptr(); |
1337 SetTheme(extension); | 1401 SetTheme(extension); |
1338 } else if (NotificationType::BOOKMARK_MODEL_LOADED == type) { | 1402 } else if (NotificationType::BOOKMARK_MODEL_LOADED == type) { |
1339 GetProfileSyncService(); // Causes lazy-load if sync is enabled. | 1403 GetProfileSyncService(); // Causes lazy-load if sync is enabled. |
1340 registrar_.Remove(this, NotificationType::BOOKMARK_MODEL_LOADED, | 1404 registrar_.Remove(this, NotificationType::BOOKMARK_MODEL_LOADED, |
1341 Source<Profile>(this)); | 1405 Source<Profile>(this)); |
1342 } | 1406 } |
1343 } | 1407 } |
(...skipping 10 matching lines...) Expand all Loading... |
1354 return sync_service_.get(); | 1418 return sync_service_.get(); |
1355 } | 1419 } |
1356 #endif | 1420 #endif |
1357 return NULL; | 1421 return NULL; |
1358 } | 1422 } |
1359 | 1423 |
1360 void ProfileImpl::InitSyncService() { | 1424 void ProfileImpl::InitSyncService() { |
1361 sync_service_.reset(new ProfileSyncService(this)); | 1425 sync_service_.reset(new ProfileSyncService(this)); |
1362 sync_service_->Initialize(); | 1426 sync_service_->Initialize(); |
1363 } | 1427 } |
OLD | NEW |