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 770f6ae9b6698e2a3332354c8b9abb036af12173..759388adf7a80b9607e5a0df5390d40610a7b2bb 100644 |
--- a/chrome/renderer/chrome_content_renderer_client.cc |
+++ b/chrome/renderer/chrome_content_renderer_client.cc |
@@ -152,7 +152,7 @@ ChromeContentRendererClient::~ChromeContentRendererClient() { |
} |
void ChromeContentRendererClient::RenderThreadStarted() { |
- chrome_observer_.reset(new ChromeRenderProcessObserver()); |
+ chrome_observer_.reset(new ChromeRenderProcessObserver(this)); |
extension_dispatcher_.reset(new ExtensionDispatcher()); |
histogram_snapshots_.reset(new RendererHistogramSnapshots()); |
net_predictor_.reset(new RendererNetPredictor()); |
@@ -215,7 +215,7 @@ 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_ = new SpellCheckProvider(render_view, spellcheck_.get()); |
#if defined(ENABLE_SAFE_BROWSING) |
safe_browsing::MalwareDOMDetails::Create(render_view); |
#endif |
@@ -692,4 +692,16 @@ bool ChromeContentRendererClient::CrossesExtensionExtents(WebFrame* frame, |
return !extensions->InSameExtent(old_url, new_url); |
} |
+void ChromeContentRendererClient::OnPurgeMemory() { |
+ DVLOG(1) << "Resetting spellcheck in renderer client"; |
+ RenderThread* thread = RenderThread::current(); |
+ if (spellcheck_.get()) |
+ thread->RemoveObserver(spellcheck_.get()); |
+ SpellCheck* new_spellcheck = new SpellCheck(); |
+ if (spellcheck_provider_) |
+ spellcheck_provider_->SetSpellCheck(new_spellcheck); |
+ spellcheck_.reset(new_spellcheck); |
+ thread->AddObserver(new_spellcheck); |
+} |
+ |
} // namespace chrome |