Chromium Code Reviews| Index: components/translate/content/renderer/translate_helper.cc |
| diff --git a/components/translate/content/renderer/translate_helper.cc b/components/translate/content/renderer/translate_helper.cc |
| index 4c8d98ffff6c2e825c97062cbdb5bba4b1dd6288..3462ac2e902b631020962ee14220542db7e9b697 100644 |
| --- a/components/translate/content/renderer/translate_helper.cc |
| +++ b/components/translate/content/renderer/translate_helper.cc |
| @@ -64,6 +64,29 @@ const char kContentSecurityPolicy[] = "script-src 'self' 'unsafe-eval'"; |
| namespace translate { |
| +static TranslateErrors::Type ErrorCodeToTranslateErrorType(int64_t error_code) { |
|
Takashi Toyoshima
2017/06/13 11:58:29
can be in anonymous namespace above.
But just usi
Gaja
2017/06/14 03:11:45
Done.
|
| + switch (error_code) { |
| + case 0: |
| + return TranslateErrors::NONE; |
| + case 2: |
| + return TranslateErrors::INITIALIZATION_ERROR; |
| + case 4: |
| + return TranslateErrors::UNSUPPORTED_LANGUAGE; |
| + case 6: |
| + return TranslateErrors::TRANSLATION_ERROR; |
| + case 7: |
| + return TranslateErrors::TRANSLATION_TIMEOUT; |
| + case 8: |
| + return TranslateErrors::UNEXPECTED_SCRIPT_ERROR; |
| + case 9: |
| + return TranslateErrors::BAD_ORIGIN; |
| + case 10: |
| + return TranslateErrors::SCRIPT_LOAD_ERROR; |
| + default: |
| + return TranslateErrors::TRANSLATION_ERROR; |
| + } |
| +} |
| + |
| //////////////////////////////////////////////////////////////////////////////// |
| // TranslateHelper, public: |
| TranslateHelper::TranslateHelper(content::RenderFrame* render_frame, |
| @@ -251,6 +274,25 @@ double TranslateHelper::ExecuteScriptAndGetDoubleResult( |
| return results[0]->NumberValue(); |
| } |
| +int64_t TranslateHelper::ExecuteScriptAndGetIntegerResult( |
| + const std::string& script, |
| + int64_t fallback) { |
| + WebLocalFrame* main_frame = render_frame()->GetWebFrame(); |
| + if (!main_frame) |
| + return fallback; |
| + |
| + v8::HandleScope handle_scope(v8::Isolate::GetCurrent()); |
| + WebVector<v8::Local<v8::Value>> results; |
| + WebScriptSource source = WebScriptSource(WebString::FromASCII(script)); |
| + main_frame->ExecuteScriptInIsolatedWorld(world_id_, &source, 1, &results); |
| + if (results.size() != 1 || results[0].IsEmpty() || !results[0]->IsNumber()) { |
| + NOTREACHED(); |
| + return fallback; |
| + } |
| + |
| + return results[0]->IntegerValue(); |
| +} |
| + |
| // mojom::Page implementations. |
| void TranslateHelper::Translate(const std::string& translate_script, |
| const std::string& source_lang, |
| @@ -324,8 +366,10 @@ void TranslateHelper::RevertTranslation() { |
| void TranslateHelper::CheckTranslateStatus() { |
| // First check if there was an error. |
| if (HasTranslationFailed()) { |
| - // TODO(toyoshim): Check |errorCode| of translate.js and notify it here. |
| - NotifyBrowserTranslationFailed(TranslateErrors::TRANSLATION_ERROR); |
| + int64_t error_code = ExecuteScriptAndGetIntegerResult( |
| + "cr.googleTranslate.errorCode", |
| + static_cast<int>(TranslateErrors::TRANSLATION_ERROR)); |
| + NotifyBrowserTranslationFailed(ErrorCodeToTranslateErrorType(error_code)); |
| return; // There was an error. |
| } |