Index: chrome/renderer/chrome_content_renderer_client.cc |
diff --git a/chrome/renderer/chrome_content_renderer_client.cc b/chrome/renderer/chrome_content_renderer_client.cc |
index ee7db8e0a72e4b8a568906070be85010264247f5..458202c702eb2ac51216518c144b6fcd10e8c9ed 100644 |
--- a/chrome/renderer/chrome_content_renderer_client.cc |
+++ b/chrome/renderer/chrome_content_renderer_client.cc |
@@ -20,6 +20,9 @@ |
#include "chrome/common/extensions/extension_constants.h" |
#include "chrome/common/extensions/extension_set.h" |
#include "chrome/common/jstemplate_builder.h" |
+#include "content/common/notification_details.h" |
+#include "content/common/notification_service.h" |
+#include "content/common/notification_source.h" |
#include "chrome/common/render_messages.h" |
#include "chrome/common/url_constants.h" |
#include "chrome/renderer/autofill/autofill_agent.h" |
@@ -204,6 +207,9 @@ void ChromeContentRendererClient::RenderThreadStarted() { |
// chrome-extension: resources shouldn't trigger insecure content warnings. |
WebString extension_scheme(ASCIIToUTF16(chrome::kExtensionScheme)); |
WebSecurityPolicy::registerURLSchemeAsSecure(extension_scheme); |
+ |
+ // Get updates when we need to purge memory. |
+ registrar_.Add(this, content::NOTIFICATION_PURGE_MEMORY, Source<void>(NULL)); |
} |
void ChromeContentRendererClient::RenderViewCreated(RenderView* render_view) { |
@@ -214,7 +220,8 @@ void ChromeContentRendererClient::RenderViewCreated(RenderView* render_view) { |
new PageLoadHistograms(render_view, histogram_snapshots_.get()); |
new PrintWebViewHelper(render_view); |
new SearchBox(render_view); |
- new SpellCheckProvider(render_view, spellcheck_.get()); |
+ spellcheck_provider_.reset(new SpellCheckProvider(render_view, |
+ spellcheck_.get())); |
#if defined(ENABLE_SAFE_BROWSING) |
safe_browsing::MalwareDOMDetails::Create(render_view); |
#endif |
@@ -624,4 +631,22 @@ bool ChromeContentRendererClient::CrossesExtensionExtents(WebFrame* frame, |
return !extensions->InSameExtent(old_url, new_url); |
} |
+void ChromeContentRendererClient::Observe(int type, |
+ const NotificationSource& source, |
+ const NotificationDetails& details) { |
+ if (type == content::NOTIFICATION_PURGE_MEMORY) |
+ ResetSpellCheck(); |
+} |
+ |
+void ChromeContentRendererClient::ResetSpellCheck() { |
+ LOG(INFO) << "Resetting spellcheck in renderer client"; |
+ RenderThread* thread = RenderThread::current(); |
+ if (spellcheck_.get()) |
+ thread->RemoveObserver(spellcheck_.get()); |
+ spellcheck_.reset(new SpellCheck()); |
+ thread->AddObserver(spellcheck_.get()); |
+ if (spellcheck_provider_.get()) |
+ spellcheck_provider_->SetSpellCheck(spellcheck_.get()); |
+} |
+ |
} // namespace chrome |