| 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
|
|
|