| Index: chrome/renderer/spellchecker/spellcheck.cc
|
| diff --git a/chrome/renderer/spellchecker/spellcheck.cc b/chrome/renderer/spellchecker/spellcheck.cc
|
| index 8d3a0491c750b5c7ef5ffc58079936a6e4f260ca..e8e283a0bec76c02dd91554c1e1362b32b065ab6 100644
|
| --- a/chrome/renderer/spellchecker/spellcheck.cc
|
| +++ b/chrome/renderer/spellchecker/spellcheck.cc
|
| @@ -45,6 +45,29 @@ bool UpdateSpellcheckEnabled::Visit(content::RenderView* render_view) {
|
| return true;
|
| }
|
|
|
| +class DocumentMarkersCollector : public content::RenderViewVisitor {
|
| + public:
|
| + DocumentMarkersCollector() {}
|
| + ~DocumentMarkersCollector() override {}
|
| + const std::vector<uint32>& markers() const { return markers_; }
|
| + bool Visit(content::RenderView* render_view) override;
|
| +
|
| + private:
|
| + std::vector<uint32> markers_;
|
| + DISALLOW_COPY_AND_ASSIGN(DocumentMarkersCollector);
|
| +};
|
| +
|
| +bool DocumentMarkersCollector::Visit(content::RenderView* render_view) {
|
| + if (!render_view || !render_view->GetWebView())
|
| + return true;
|
| + WebVector<uint32> markers;
|
| + render_view->GetWebView()->spellingMarkers(&markers);
|
| + for (size_t i = 0; i < markers.size(); ++i)
|
| + markers_.push_back(markers[i]);
|
| + // Visit all render views.
|
| + return true;
|
| +}
|
| +
|
| class DocumentMarkersRemover : public content::RenderViewVisitor {
|
| public:
|
| explicit DocumentMarkersRemover(const std::vector<std::string>& words);
|
| @@ -124,6 +147,8 @@ bool SpellCheck::OnControlMessageReceived(const IPC::Message& message) {
|
| IPC_MESSAGE_HANDLER(SpellCheckMsg_EnableAutoSpellCorrect,
|
| OnEnableAutoSpellCorrect)
|
| IPC_MESSAGE_HANDLER(SpellCheckMsg_EnableSpellCheck, OnEnableSpellCheck)
|
| + IPC_MESSAGE_HANDLER(SpellCheckMsg_RequestDocumentMarkers,
|
| + OnRequestDocumentMarkers)
|
| IPC_MESSAGE_UNHANDLED(handled = false)
|
| IPC_END_MESSAGE_MAP()
|
|
|
| @@ -162,6 +187,13 @@ void SpellCheck::OnEnableSpellCheck(bool enable) {
|
| content::RenderView::ForEach(&updater);
|
| }
|
|
|
| +void SpellCheck::OnRequestDocumentMarkers() {
|
| + DocumentMarkersCollector collector;
|
| + content::RenderView::ForEach(&collector);
|
| + content::RenderThread::Get()->Send(
|
| + new SpellCheckHostMsg_RespondDocumentMarkers(collector.markers()));
|
| +}
|
| +
|
| // TODO(groby): Make sure we always have a spelling engine, even before Init()
|
| // is called.
|
| void SpellCheck::Init(base::File file,
|
|
|