Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(760)

Unified Diff: chrome/browser/profile.cc

Issue 357003: Move the spellchecker to the renderer.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: rename Created 11 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/profile.cc
===================================================================
--- chrome/browser/profile.cc (revision 31117)
+++ chrome/browser/profile.cc (working copy)
@@ -478,6 +478,16 @@
profile_->DeleteSpellChecker();
}
+#if defined(SPELLCHECKER_IN_RENDERER)
+ virtual SpellCheckHost* GetSpellCheckHost() {
+ return profile_->GetSpellCheckHost();
+ }
+
+ virtual void ReinitializeSpellCheckHost(bool force) {
+ profile_->ReinitializeSpellCheckHost(force);
+ }
+#endif
+
virtual WebKitContext* GetWebKitContext() {
if (!webkit_context_.get())
webkit_context_ = new WebKitContext(GetPath(), true);
@@ -569,6 +579,10 @@
created_theme_provider_(false),
start_time_(Time::Now()),
spellchecker_(NULL),
+#if defined(OS_LINUX)
+ spellcheck_host_(NULL),
+ spellcheck_host_ready_(false),
+#endif
shutdown_session_service_(false) {
DCHECK(!path.empty()) << "Using an empty path will attempt to write " <<
"profile files to the root directory!";
@@ -740,6 +754,10 @@
if (history_service_.get())
history_service_->Cleanup();
+#if defined(SPELLCHECKER_IN_RENDERER)
+ if (spellcheck_host_.get())
+ spellcheck_host_->UnsetObserver();
+#endif
DeleteSpellCheckerImpl(false);
if (default_request_context_ == request_context_) {
@@ -1260,6 +1278,47 @@
}
}
+#if defined(SPELLCHECKER_IN_RENDERER)
+SpellCheckHost* ProfileImpl::GetSpellCheckHost() {
+ return spellcheck_host_ready_ ? spellcheck_host_.get() : NULL;
+}
+
+void ProfileImpl::ReinitializeSpellCheckHost(bool force) {
+ // If we are already loading the spellchecker, and this is just a hint to
+ // load the spellchecker, do nothing.
+ if (!force && spellcheck_host_.get())
+ return;
+
+ bool notify = false;
+ if (spellcheck_host_.get()) {
+ spellcheck_host_->UnsetObserver();
+ spellcheck_host_.release();
+ spellcheck_host_ready_ = false;
+ notify = true;
+ }
+
+ PrefService* prefs = GetPrefs();
+ if (prefs->GetBoolean(prefs::kEnableSpellCheck)) {
+ // Retrieve the (perhaps updated recently) dictionary name from preferences.
+ spellcheck_host_ = new SpellCheckHost(this,
+ WideToASCII(prefs->GetString(prefs::kSpellCheckDictionary)),
+ GetRequestContext());
+ spellcheck_host_->AddRef();
+ } else if (notify) {
+ // The spellchecker has been disabled.
+ SpellCheckHostInitialized();
+ }
+}
+
+void ProfileImpl::SpellCheckHostInitialized() {
+ spellcheck_host_ready_ =
+ spellcheck_host_ && spellcheck_host_->bdict_fd().fd != -1;
+ NotificationService::current()->Notify(
+ NotificationType::SPELLCHECK_HOST_REINITIALIZED,
+ Source<Profile>(this), NotificationService::NoDetails());
+}
+#endif
+
void ProfileImpl::NotifySpellCheckerChanged() {
SpellcheckerReinitializedDetails scoped_spellchecker;
scoped_spellchecker.spellchecker = spellchecker_;
@@ -1328,9 +1387,14 @@
PrefService* prefs = Source<PrefService>(source).ptr();
DCHECK(pref_name_in && prefs);
if (*pref_name_in == prefs::kSpellCheckDictionary ||
- *pref_name_in == prefs::kEnableSpellCheck ||
- *pref_name_in == prefs::kEnableAutoSpellCorrect) {
+#if !defined(SPELLCHECKER_IN_RENDERER)
+ *pref_name_in == prefs::kEnableAutoSpellCorrect ||
+#endif
+ *pref_name_in == prefs::kEnableSpellCheck) {
ReinitializeSpellChecker();
+#if defined(SPELLCHECKER_IN_RENDERER)
+ ReinitializeSpellCheckHost(true);
+#endif
}
} else if (NotificationType::THEME_INSTALLED == type) {
Extension* extension = Details<Extension>(details).ptr();

Powered by Google App Engine
This is Rietveld 408576698