Index: chrome/renderer/spellchecker/spellcheck.cc |
diff --git a/chrome/renderer/spellchecker/spellcheck.cc b/chrome/renderer/spellchecker/spellcheck.cc |
index 2150dd2f91130e0522f74a3154e71b05ee9cca16..f1de849dba5d0655d2e72d6636876d88218792b4 100644 |
--- a/chrome/renderer/spellchecker/spellcheck.cc |
+++ b/chrome/renderer/spellchecker/spellcheck.cc |
@@ -22,6 +22,7 @@ |
#include "third_party/WebKit/public/web/WebView.h" |
using blink::WebVector; |
+using blink::WebString; |
using blink::WebTextCheckingResult; |
using blink::WebTextDecorationType; |
@@ -67,6 +68,30 @@ bool DocumentMarkersCollector::Visit(content::RenderView* render_view) { |
return true; |
} |
+class DocumentMarkersRemover : public content::RenderViewVisitor { |
+ public: |
+ explicit DocumentMarkersRemover(const std::vector<std::string>& words); |
+ virtual ~DocumentMarkersRemover() OVERRIDE {} |
+ virtual bool Visit(content::RenderView* render_view) OVERRIDE; |
+ |
+ private: |
+ WebVector<WebString> words_; |
+ DISALLOW_COPY_AND_ASSIGN(DocumentMarkersRemover); |
+}; |
+ |
+DocumentMarkersRemover::DocumentMarkersRemover( |
+ const std::vector<std::string>& words) |
+ : words_(words.size()) { |
+ for (size_t i = 0; i < words.size(); ++i) |
+ words_[i] = WebString::fromUTF8(words[i]); |
+} |
+ |
+bool DocumentMarkersRemover::Visit(content::RenderView* render_view) { |
+ if (render_view && render_view->GetWebView()) |
+ render_view->GetWebView()->removeSpellingMarkersUnderWords(words_); |
+ return true; |
+} |
+ |
} // namespace |
class SpellCheck::SpellcheckRequest { |
@@ -146,6 +171,10 @@ void SpellCheck::OnCustomDictionaryChanged( |
const std::vector<std::string>& words_added, |
const std::vector<std::string>& words_removed) { |
custom_dictionary_.OnCustomDictionaryChanged(words_added, words_removed); |
+ if (words_added.empty()) |
+ return; |
+ DocumentMarkersRemover markersRemover(words_added); |
+ content::RenderView::ForEach(&markersRemover); |
} |
void SpellCheck::OnEnableAutoSpellCorrect(bool enable) { |