| 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 76271e0b638700eaea859b66860313bd1cfb8b7b..6323036503bc8aea513bf7b928abd32d94b5de08 100644
|
| --- a/chrome/renderer/chrome_content_renderer_client.cc
|
| +++ b/chrome/renderer/chrome_content_renderer_client.cc
|
| @@ -91,9 +91,9 @@
|
| #include "content/public/common/url_constants.h"
|
| #include "content/public/renderer/plugin_instance_throttler.h"
|
| #include "content/public/renderer/render_frame.h"
|
| +#include "content/public/renderer/render_frame_visitor.h"
|
| #include "content/public/renderer/render_thread.h"
|
| #include "content/public/renderer/render_view.h"
|
| -#include "content/public/renderer/render_view_visitor.h"
|
| #include "extensions/common/constants.h"
|
| #include "extensions/features/features.h"
|
| #include "ipc/ipc_sync_channel.h"
|
| @@ -254,23 +254,27 @@ void AppendParams(const std::vector<base::string16>& additional_names,
|
| #endif // BUILDFLAG(ENABLE_PLUGINS)
|
|
|
| #if BUILDFLAG(ENABLE_SPELLCHECK)
|
| -class SpellCheckReplacer : public content::RenderViewVisitor {
|
| +class SpellCheckReplacer : public content::RenderFrameVisitor {
|
| public:
|
| explicit SpellCheckReplacer(SpellCheck* spellcheck)
|
| : spellcheck_(spellcheck) {}
|
| - bool Visit(content::RenderView* render_view) override;
|
| + ~SpellCheckReplacer() override;
|
| + bool Visit(content::RenderFrame* render_frame) override;
|
|
|
| private:
|
| - SpellCheck* spellcheck_; // New shared spellcheck for all views. Weak Ptr.
|
| + // New shared spellcheck for all frames. Weak Ptr.
|
| + SpellCheck* const spellcheck_;
|
| DISALLOW_COPY_AND_ASSIGN(SpellCheckReplacer);
|
| };
|
|
|
| -bool SpellCheckReplacer::Visit(content::RenderView* render_view) {
|
| - SpellCheckProvider* provider = SpellCheckProvider::Get(render_view);
|
| +bool SpellCheckReplacer::Visit(content::RenderFrame* render_frame) {
|
| + SpellCheckProvider* provider = SpellCheckProvider::Get(render_frame);
|
| DCHECK(provider);
|
| provider->set_spellcheck(spellcheck_);
|
| return true;
|
| }
|
| +
|
| +SpellCheckReplacer::~SpellCheckReplacer() = default;
|
| #endif
|
|
|
| #if BUILDFLAG(ENABLE_EXTENSIONS)
|
| @@ -575,11 +579,7 @@ void ChromeContentRendererClient::RenderFrameCreated(
|
| }
|
|
|
| #if BUILDFLAG(ENABLE_SPELLCHECK)
|
| - // TODO(xiaochengh): Use a different SpellCheckProvider for each RenderFrame.
|
| - if (SpellCheckProvider* provider =
|
| - SpellCheckProvider::Get(render_frame->GetRenderView())) {
|
| - render_frame->GetWebFrame()->SetTextCheckClient(provider);
|
| - }
|
| + new SpellCheckProvider(render_frame, spellcheck_.get());
|
| #endif
|
| }
|
|
|
| @@ -589,16 +589,13 @@ void ChromeContentRendererClient::RenderViewCreated(
|
| ChromeExtensionsRendererClient::GetInstance()->RenderViewCreated(render_view);
|
| #endif
|
| #if BUILDFLAG(ENABLE_SPELLCHECK)
|
| - SpellCheckProvider* provider =
|
| - new SpellCheckProvider(render_view, spellcheck_.get());
|
| - // For a main frame of a view, RenderFrameCreated is called earlier than
|
| - // RenderViewCreated. This workaround ensures that WebTextCheckClient is
|
| - // still set for any main frame.
|
| - // TODO(xiaochengh): Remove this workaround once SpellCheckProvider becomes
|
| - // a RenderFrameObserver.
|
| - if (content::RenderFrame* main_frame = render_view->GetMainRenderFrame())
|
| - main_frame->GetWebFrame()->SetTextCheckClient(provider);
|
| -
|
| + // This is a workaround keeping the behavior that, the Blink side spellcheck
|
| + // enabled state is initialized on RenderView creation.
|
| + // TODO(xiaochengh): Design better way to sync between Chrome-side and
|
| + // Blink-side spellcheck enabled states. See crbug.com/710097.
|
| + if (SpellCheckProvider* provider =
|
| + SpellCheckProvider::Get(render_view->GetMainRenderFrame()))
|
| + provider->EnableSpellcheck(spellcheck_->IsSpellcheckEnabled());
|
| new SpellCheckPanel(render_view);
|
| #endif
|
| new prerender::PrerendererClient(render_view);
|
| @@ -1240,7 +1237,7 @@ void ChromeContentRendererClient::SetSpellcheck(SpellCheck* spellcheck) {
|
| thread->RemoveObserver(spellcheck_.get());
|
| spellcheck_.reset(spellcheck);
|
| SpellCheckReplacer replacer(spellcheck_.get());
|
| - content::RenderView::ForEach(&replacer);
|
| + content::RenderFrame::ForEach(&replacer);
|
| if (thread)
|
| thread->AddObserver(spellcheck_.get());
|
| }
|
|
|