Chromium Code Reviews| 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..49ce5542b4bf356d4a4abcac3195df39db3daec8 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,19 +254,19 @@ 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; |
| + bool Visit(content::RenderFrame* render_frame) override; |
|
Lei Zhang
2017/04/12 00:34:28
BTW, can you add a dtor and remember to use overri
Xiaocheng
2017/04/12 00:54:13
Done.
|
| private: |
| SpellCheck* spellcheck_; // New shared spellcheck for all views. Weak Ptr. |
|
Lei Zhang
2017/04/12 00:34:28
SpellCheck* const, since it never changes.
Xiaocheng
2017/04/12 00:54:13
Done.
|
| 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; |
| @@ -575,11 +575,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 +585,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 +1233,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()); |
| } |