Index: components/spellcheck/renderer/spellcheck.cc |
diff --git a/components/spellcheck/renderer/spellcheck.cc b/components/spellcheck/renderer/spellcheck.cc |
index c34a181fe751b58f37622cce28d40b002db1dc86..477e3e2b9424bfbbcafa065dc5064d12a0a075cd 100644 |
--- a/components/spellcheck/renderer/spellcheck.cc |
+++ b/components/spellcheck/renderer/spellcheck.cc |
@@ -113,6 +113,25 @@ void PreserveOriginalApostropheTypes(const base::string16& misspelled_word, |
} |
} |
+std::vector<WebString> FilterReplacementSuggestions( |
+ const base::string16& misspelled_word, |
+ const std::vector<base::string16>& replacements) { |
+ std::vector<WebString> replacements_filtered; |
+ for (base::string16 replacement : replacements) { |
+ // Use the same types of apostrophes as in the mispelled word. |
+ PreserveOriginalApostropheTypes(misspelled_word, &replacement); |
+ |
+ // Ignore suggestions that are just changing the apostrophe type |
+ // (straight vs. typographical) |
+ if (replacement == misspelled_word) |
+ continue; |
+ |
+ replacements_filtered.push_back(WebString::FromUTF16(replacement)); |
+ } |
+ |
+ return replacements_filtered; |
+} |
+ |
} // namespace |
class SpellCheck::SpellcheckRequest { |
@@ -473,7 +492,8 @@ void SpellCheck::CreateTextCheckingResults( |
const base::string16& misspelled_word = |
line_text.substr(spellcheck_result.location, spellcheck_result.length); |
- base::string16 replacement = spellcheck_result.replacement; |
+ const std::vector<base::string16>& replacements = |
+ spellcheck_result.replacements; |
SpellCheckResult::Decoration decoration = spellcheck_result.decoration; |
// Ignore words in custom dictionary. |
@@ -482,11 +502,13 @@ void SpellCheck::CreateTextCheckingResults( |
continue; |
} |
- // Use the same types of appostrophes as in the mispelled word. |
- PreserveOriginalApostropheTypes(misspelled_word, &replacement); |
+ std::vector<WebString> replacements_filtered = |
+ FilterReplacementSuggestions(misspelled_word, replacements); |
- // Ignore misspellings due the typographical apostrophe. |
- if (misspelled_word == replacement) |
+ // If the spellchecker suggested replacements, but they were all just |
+ // changing apostrophe styles, ignore this misspelling. If there were never |
+ // any suggested replacements, keep the misspelling. |
+ if (replacements_filtered.empty() && !replacements.empty()) |
continue; |
if (filter == USE_NATIVE_CHECKER) { |
@@ -504,10 +526,10 @@ void SpellCheck::CreateTextCheckingResults( |
} |
} |
- results.push_back(WebTextCheckingResult( |
- static_cast<WebTextDecorationType>(decoration), |
- line_offset + spellcheck_result.location, spellcheck_result.length, |
- blink::WebString::FromUTF16(replacement))); |
+ results.push_back( |
+ WebTextCheckingResult(static_cast<WebTextDecorationType>(decoration), |
+ line_offset + spellcheck_result.location, |
+ spellcheck_result.length, replacements_filtered)); |
} |
textcheck_results->Assign(results); |