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

Unified Diff: chrome/browser/renderer_host/browser_render_process_host.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/renderer_host/browser_render_process_host.cc
===================================================================
--- chrome/browser/renderer_host/browser_render_process_host.cc (revision 31117)
+++ chrome/browser/renderer_host/browser_render_process_host.cc (working copy)
@@ -40,6 +40,9 @@
#include "chrome/browser/renderer_host/render_widget_host.h"
#include "chrome/browser/renderer_host/resource_message_filter.h"
#include "chrome/browser/renderer_host/web_cache_manager.h"
+#if defined(SPELLCHECKER_IN_RENDERER)
+#include "chrome/browser/spellcheck_host.h"
+#endif
#include "chrome/browser/spellchecker.h"
#include "chrome/browser/visitedlink_master.h"
#include "chrome/common/chrome_switches.h"
@@ -203,6 +206,16 @@
registrar_.Add(this, NotificationType::USER_SCRIPTS_UPDATED,
NotificationService::AllSources());
+#if defined(SPELLCHECKER_IN_RENDERER)
+ registrar_.Add(this, NotificationType::SPELLCHECK_HOST_REINITIALIZED,
+ NotificationService::AllSources());
+ registrar_.Add(this, NotificationType::SPELLCHECK_WORD_ADDED,
+ NotificationService::AllSources());
+
+ PrefService* prefs = profile->GetPrefs();
+ prefs->AddPrefObserver(prefs::kEnableAutoSpellCorrect, this);
+#endif
+
visited_link_updater_.reset(new VisitedLinkUpdater());
WebCacheManager::GetInstance()->Add(id());
@@ -215,6 +228,11 @@
}
BrowserRenderProcessHost::~BrowserRenderProcessHost() {
+#if defined(SPELLCHECKER_IN_RENDERER)
+ PrefService* prefs = profile()->GetPrefs();
+ prefs->RemovePrefObserver(prefs::kEnableAutoSpellCorrect, this);
+#endif
+
WebCacheManager::GetInstance()->Remove(id());
ChildProcessSecurityPolicy::GetInstance()->Remove(id());
@@ -348,6 +366,14 @@
InitVisitedLinks();
InitUserScripts();
InitExtensions();
+#if defined(SPELLCHECKER_IN_RENDERER)
+ // We don't want to initialize the spellchecker unless SpellCheckHost has been
+ // created. In InitSpellChecker(), we know if GetSpellCheckHost() is NULL
+ // then the spellchecker has been turned off, but here, we don't know if
+ // it's been turned off or just not loaded yet.
+ if (profile()->GetSpellCheckHost())
+ InitSpellChecker();
+#endif
if (max_page_id_ != -1)
channel_->Send(new ViewMsg_SetNextPageID(max_page_id_ + 1));
@@ -813,6 +839,10 @@
OnExtensionRemoveListener)
IPC_MESSAGE_HANDLER(ViewHostMsg_ExtensionCloseChannel,
OnExtensionCloseChannel)
+#if defined(SPELLCHECKER_IN_RENDERER)
+ IPC_MESSAGE_HANDLER(ViewHostMsg_SpellChecker_RequestDictionary,
+ OnSpellCheckerRequestDictionary)
+#endif
IPC_MESSAGE_UNHANDLED_ERROR()
IPC_END_MESSAGE_MAP_EX()
@@ -1019,6 +1049,29 @@
}
break;
}
+#if defined(SPELLCHECKER_IN_RENDERER)
+ case NotificationType::SPELLCHECK_HOST_REINITIALIZED: {
+ InitSpellChecker();
+ break;
+ }
+ case NotificationType::SPELLCHECK_WORD_ADDED: {
+ AddSpellCheckWord(
+ reinterpret_cast<const Source<SpellCheckHost>*>(&source)->
+ ptr()->last_added_word());
+ break;
+ }
+ case NotificationType::PREF_CHANGED: {
+ std::wstring* pref_name_in = Details<std::wstring>(details).ptr();
+ PrefService* prefs = Source<PrefService>(source).ptr();
+ DCHECK(pref_name_in && prefs);
+ if (*pref_name_in == prefs::kEnableAutoSpellCorrect) {
+ EnableAutoSpellCorrect(
+ prefs->GetBoolean(prefs::kEnableAutoSpellCorrect));
+ break;
+ }
+ // Fall through.
+ }
+#endif
default: {
NOTREACHED();
break;
@@ -1047,3 +1100,34 @@
profile()->GetExtensionMessageService()->CloseChannel(port_id);
}
}
+
+#if defined(SPELLCHECKER_IN_RENDERER)
+void BrowserRenderProcessHost::OnSpellCheckerRequestDictionary() {
+ // We may have gotten multiple requests from different renderers. We don't
+ // want to initialize multiple times in this case, so we set |force| to false.
+ profile()->ReinitializeSpellCheckHost(false);
+}
+
+void BrowserRenderProcessHost::AddSpellCheckWord(const std::string& word) {
+ channel_->Send(new ViewMsg_SpellChecker_WordAdded(word));
+}
+
+void BrowserRenderProcessHost::InitSpellChecker() {
+ SpellCheckHost* spellcheck_host = profile()->GetSpellCheckHost();
+ if (spellcheck_host) {
+ PrefService* prefs = profile()->GetPrefs();
+ channel_->Send(new ViewMsg_SpellChecker_Init(
+ spellcheck_host->bdict_fd(), spellcheck_host->custom_words(),
+ spellcheck_host->language(),
+ prefs->GetBoolean(prefs::kEnableAutoSpellCorrect)));
+ } else {
+ channel_->Send(new ViewMsg_SpellChecker_Init(
+ base::FileDescriptor(), std::vector<std::string>(), std::string(),
+ false));
+ }
+}
+
+void BrowserRenderProcessHost::EnableAutoSpellCorrect(bool enable) {
+ channel_->Send(new ViewMsg_SpellChecker_EnableAutoSpellCorrect(enable));
+}
+#endif

Powered by Google App Engine
This is Rietveld 408576698