Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / chrome / renderer / spellchecker / spellcheck.cc
index 51c0ba9..e8e283a 100644 (file)
@@ -22,6 +22,7 @@
 #include "third_party/WebKit/public/web/WebView.h"
 
 using blink::WebVector;
+using blink::WebString;
 using blink::WebTextCheckingResult;
 using blink::WebTextDecorationType;
 
@@ -30,7 +31,7 @@ namespace {
 class UpdateSpellcheckEnabled : public content::RenderViewVisitor {
  public:
   explicit UpdateSpellcheckEnabled(bool enabled) : enabled_(enabled) {}
-  virtual bool Visit(content::RenderView* render_view) OVERRIDE;
+  bool Visit(content::RenderView* render_view) override;
 
  private:
   bool enabled_;  // New spellcheck-enabled state.
@@ -47,9 +48,9 @@ bool UpdateSpellcheckEnabled::Visit(content::RenderView* render_view) {
 class DocumentMarkersCollector : public content::RenderViewVisitor {
  public:
   DocumentMarkersCollector() {}
-  virtual ~DocumentMarkersCollector() {}
+  ~DocumentMarkersCollector() override {}
   const std::vector<uint32>& markers() const { return markers_; }
-  virtual bool Visit(content::RenderView* render_view) OVERRIDE;
+  bool Visit(content::RenderView* render_view) override;
 
  private:
   std::vector<uint32> markers_;
@@ -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);
+  ~DocumentMarkersRemover() override {}
+  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 {
@@ -134,7 +159,7 @@ void SpellCheck::OnInit(IPC::PlatformFileForTransit bdict_file,
                         const std::set<std::string>& custom_words,
                         const std::string& language,
                         bool auto_spell_correct) {
-  Init(IPC::PlatformFileForTransitToPlatformFile(bdict_file),
+  Init(IPC::PlatformFileForTransitToFile(bdict_file),
        custom_words, language);
   auto_spell_correct_turned_on_ = auto_spell_correct;
 #if !defined(OS_MACOSX)
@@ -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) {
@@ -167,10 +196,10 @@ void SpellCheck::OnRequestDocumentMarkers() {
 
 // TODO(groby): Make sure we always have a spelling engine, even before Init()
 // is called.
-void SpellCheck::Init(base::PlatformFile file,
+void SpellCheck::Init(base::File file,
                       const std::set<std::string>& custom_words,
                       const std::string& language) {
-  spellcheck_.Init(file, language);
+  spellcheck_.Init(file.Pass(), language);
   custom_dictionary_.Init(custom_words);
 }