Index: chrome/renderer/spellchecker/spellcheck_provider.cc |
diff --git a/chrome/renderer/spellchecker/spellcheck_provider.cc b/chrome/renderer/spellchecker/spellcheck_provider.cc |
index 89b7cfccbffeb240542f4dd5ca4a9b41e0faa5a6..b3fd4a97656969b779c43f0491f2dd8e28d721c4 100644 |
--- a/chrome/renderer/spellchecker/spellcheck_provider.cc |
+++ b/chrome/renderer/spellchecker/spellcheck_provider.cc |
@@ -18,6 +18,7 @@ |
#include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebVector.h" |
#include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" |
+using spellcheck::ToWebResultList; |
using WebKit::WebFrame; |
using WebKit::WebString; |
using WebKit::WebTextCheckingCompletion; |
@@ -42,34 +43,6 @@ COMPILE_ASSERT(int(WebKit::WebTextCheckingTypeCorrection) == |
COMPILE_ASSERT(int(WebKit::WebTextCheckingTypeShowCorrectionPanel) == |
int(SpellCheckResult::SHOWCORRECTIONPANEL), mismatching_enums); |
-namespace { |
- |
-void ToWebResultList( |
- int offset, |
- const std::vector<SpellCheckResult>& results, |
- WebVector<WebTextCheckingResult>* web_results) { |
- WebVector<WebTextCheckingResult> list(results.size()); |
- for (size_t i = 0; i < results.size(); ++i) { |
- list[i] = WebTextCheckingResult( |
- static_cast<WebTextCheckingType>(results[i].type), |
- results[i].location + offset, |
- results[i].length, |
- results[i].replacement); |
- } |
- |
- list.swap(*web_results); |
-} |
- |
-WebVector<WebTextCheckingResult> ToWebResultList( |
- int offset, |
- const std::vector<SpellCheckResult>& results) { |
- WebVector<WebTextCheckingResult> web_results; |
- ToWebResultList(offset, results, &web_results); |
- return web_results; |
-} |
- |
-} // namespace |
- |
SpellCheckProvider::SpellCheckProvider( |
content::RenderView* render_view, |
chrome::ChromeContentRendererClient* renderer_client) |
@@ -118,6 +91,7 @@ void SpellCheckProvider::RequestTextChecking( |
completion->didFinishCheckingText(std::vector<WebTextCheckingResult>()); |
return; |
} |
+ |
last_line_ = line; |
Send(new SpellCheckHostMsg_CallSpellingService( |
routing_id(), |
@@ -210,7 +184,6 @@ void SpellCheckProvider::checkTextOfParagraph( |
std::vector<SpellCheckResult> tmp_results; |
chrome_content_renderer_client_->spellcheck()->SpellCheckParagraph( |
string16(text), |
- document_tag_, |
&tmp_results); |
ToWebResultList(0, tmp_results, results); |
#endif |
@@ -257,12 +230,25 @@ void SpellCheckProvider::updateSpellingUIWithMisspelledWord( |
void SpellCheckProvider::OnRespondSpellingService( |
int identifier, |
int offset, |
+ bool succeeded, |
+ const string16& text, |
const std::vector<SpellCheckResult>& results) { |
WebTextCheckingCompletion* completion = |
text_check_completions_.Lookup(identifier); |
if (!completion) |
return; |
text_check_completions_.Remove(identifier); |
+ |
+ // If |succeeded| is false, we use local spellcheck as a fallback. |
+ if (!succeeded) { |
+ // |chrome_content_renderer_client| may be NULL in unit tests. |
+ if (chrome_content_renderer_client_) { |
+ chrome_content_renderer_client_->spellcheck()->RequestTextChecking( |
+ text, offset, completion); |
+ return; |
+ } |
+ } |
+ |
completion->didFinishCheckingText(ToWebResultList(offset, results)); |
} |