Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "components/translate/core/browser/translate_manager.h" | 5 #include "components/translate/core/browser/translate_manager.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 | 8 |
| 9 #include "build/build_config.h" | 9 #include "build/build_config.h" |
| 10 #include "chrome/browser/chrome_notification_types.h" | 10 #include "chrome/browser/chrome_notification_types.h" |
| 11 #include "chrome/browser/prefs/session_startup_pref.h" | 11 #include "chrome/browser/prefs/session_startup_pref.h" |
| 12 #include "chrome/browser/translate/chrome_translate_client.h" | 12 #include "chrome/browser/translate/chrome_translate_client.h" |
| 13 #include "chrome/browser/ui/browser.h" | 13 #include "chrome/browser/ui/browser.h" |
| 14 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 14 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
| 15 #include "chrome/test/base/in_process_browser_test.h" | 15 #include "chrome/test/base/in_process_browser_test.h" |
| 16 #include "chrome/test/base/ui_test_utils.h" | 16 #include "chrome/test/base/ui_test_utils.h" |
| 17 #include "components/translate/core/browser/translate_error_details.h" | |
| 17 #include "components/translate/core/common/language_detection_details.h" | 18 #include "components/translate/core/common/language_detection_details.h" |
| 18 #include "content/public/browser/notification_service.h" | 19 #include "content/public/browser/notification_service.h" |
| 19 #include "net/url_request/test_url_fetcher_factory.h" | 20 #include "net/url_request/test_url_fetcher_factory.h" |
| 20 #include "net/url_request/url_fetcher_delegate.h" | 21 #include "net/url_request/url_fetcher_delegate.h" |
| 21 #include "url/gurl.h" | 22 #include "url/gurl.h" |
| 22 | 23 |
| 24 namespace { | |
| 25 | |
| 26 static const char kTestValidScript[] = | |
| 27 " var google = {};" | |
|
napper
2017/06/16 12:41:51
indent looks wrong
napper
2017/06/16 12:41:51
indent looks wrong
Gaja
2017/06/17 06:41:46
Acknowledged.
Gaja
2017/06/17 13:25:48
Done.
| |
| 28 "google.translate = (function() {" | |
| 29 " return {" | |
| 30 " TranslateService: function() {" | |
| 31 " return {" | |
| 32 " isAvailable : function() {" | |
| 33 " return true;" | |
| 34 " }," | |
| 35 " restore : function() {" | |
| 36 " return;" | |
| 37 " }," | |
| 38 " getDetectedLanguage : function() {" | |
| 39 " return \"fr\";" | |
| 40 " }," | |
| 41 " translatePage : function(originalLang, targetLang," | |
| 42 " onTranslateProgress) {" | |
| 43 " var error = (originalLang == 'auto') ? true : false;" | |
| 44 " onTranslateProgress(100, true, error);" | |
| 45 " }" | |
| 46 " };" | |
| 47 " }" | |
| 48 " };" | |
| 49 "})();" | |
| 50 "cr.googleTranslate.onTranslateElementLoad();"; | |
| 51 | |
| 52 static const char kTestScriptInitializationError[] = | |
| 53 " var google = {};" | |
| 54 "google.translate = (function() {" | |
| 55 " return {" | |
| 56 " TranslateService: function() {" | |
| 57 " return error;" | |
| 58 " }" | |
| 59 " };" | |
| 60 "})();" | |
| 61 "cr.googleTranslate.onTranslateElementLoad();"; | |
| 62 | |
| 63 static const char kTestScriptTimeout[] = | |
| 64 " var google = {};" | |
| 65 "google.translate = (function() {" | |
| 66 " return {" | |
| 67 " TranslateService: function() {" | |
| 68 " return {" | |
| 69 " isAvailable : function() {" | |
| 70 " return false;" | |
| 71 " }," | |
| 72 " };" | |
| 73 " }" | |
| 74 " };" | |
| 75 "})();" | |
| 76 "cr.googleTranslate.onTranslateElementLoad();"; | |
| 77 | |
| 78 static const char kTestScriptUnexpectedScriptError[] = | |
| 79 " var google = {};" | |
| 80 "google.translate = (function() {" | |
| 81 " return {" | |
| 82 " TranslateService: function() {" | |
| 83 " return {" | |
| 84 " isAvailable : function() {" | |
| 85 " return true;" | |
| 86 " }," | |
| 87 " restore : function() {" | |
| 88 " return;" | |
| 89 " }," | |
| 90 " getDetectedLanguage : function() {" | |
| 91 " return \"fr\";" | |
| 92 " }," | |
| 93 " translatePage : function(originalLang, targetLang," | |
| 94 " onTranslateProgress) {" | |
| 95 " return error;" | |
| 96 " }" | |
| 97 " };" | |
| 98 " }" | |
| 99 " };" | |
| 100 "})();" | |
| 101 "cr.googleTranslate.onTranslateElementLoad();"; | |
| 102 | |
| 103 static const char kTestScriptBadOrigin[] = | |
| 104 " var google = {};" | |
| 105 "google.translate = (function() {" | |
| 106 " return {" | |
| 107 " TranslateService: function() {" | |
| 108 " return {" | |
| 109 " isAvailable : function() {" | |
| 110 " return true;" | |
| 111 " }," | |
| 112 " restore : function() {" | |
| 113 " return;" | |
| 114 " }," | |
| 115 " getDetectedLanguage : function() {" | |
| 116 " return \"fr\";" | |
| 117 " }," | |
| 118 " translatePage : function(originalLang, targetLang," | |
| 119 " onTranslateProgress) {" | |
| 120 " var url = \"\";" | |
| 121 " cr.googleTranslate.onLoadJavascript(url);" | |
| 122 " }" | |
| 123 " };" | |
| 124 " }" | |
| 125 " };" | |
| 126 "})();" | |
| 127 "cr.googleTranslate.onTranslateElementLoad();"; | |
| 128 | |
| 129 static const char kTestScriptLoadError[] = | |
| 130 " var google = {};" | |
| 131 "google.translate = (function() {" | |
| 132 " return {" | |
| 133 " TranslateService: function() {" | |
| 134 " return {" | |
| 135 " isAvailable : function() {" | |
| 136 " return true;" | |
| 137 " }," | |
| 138 " restore : function() {" | |
| 139 " return;" | |
| 140 " }," | |
| 141 " getDetectedLanguage : function() {" | |
| 142 " return \"fr\";" | |
| 143 " }," | |
| 144 " translatePage : function(originalLang, targetLang," | |
| 145 " onTranslateProgress) {" | |
| 146 " var url = \"https://translate.googleapis.com/INVALID\";" | |
| 147 " cr.googleTranslate.onLoadJavascript(url);" | |
| 148 " }" | |
| 149 " };" | |
| 150 " }" | |
| 151 " };" | |
| 152 "})();" | |
| 153 "cr.googleTranslate.onTranslateElementLoad();"; | |
| 154 | |
| 155 } // namespace | |
| 156 | |
| 23 class TranslateManagerBrowserTest : public InProcessBrowserTest { | 157 class TranslateManagerBrowserTest : public InProcessBrowserTest { |
| 24 public: | 158 public: |
| 25 TranslateManagerBrowserTest() {} | 159 TranslateManagerBrowserTest() {} |
| 26 ~TranslateManagerBrowserTest() override {} | 160 ~TranslateManagerBrowserTest() override {} |
| 27 | 161 |
| 28 void WaitUntilLanguageDetected() { language_detected_signal_->Wait(); } | 162 void WaitUntilLanguageDetected() { language_detected_signal_->Wait(); } |
| 29 void WaitUntilPageTranslated() { page_translated_signal_->Wait(); } | 163 void WaitUntilPageTranslated() { page_translated_signal_->Wait(); } |
| 30 | 164 |
| 31 void ResetObserver() { | 165 void ResetObserver() { |
| 32 language_detected_signal_.reset(new LangageDetectionObserver( | 166 language_detected_signal_.reset(new LangageDetectionObserver( |
| 33 chrome::NOTIFICATION_TAB_LANGUAGE_DETERMINED, | 167 chrome::NOTIFICATION_TAB_LANGUAGE_DETERMINED, |
| 34 content::NotificationService::AllSources())); | 168 content::NotificationService::AllSources())); |
| 35 page_translated_signal_.reset(new content::WindowedNotificationObserver( | 169 page_translated_signal_.reset(new content::WindowedNotificationObserver( |
| 36 chrome::NOTIFICATION_PAGE_TRANSLATED, | 170 chrome::NOTIFICATION_PAGE_TRANSLATED, |
| 37 content::NotificationService::AllSources())); | 171 content::NotificationService::AllSources())); |
| 38 } | 172 } |
| 39 | 173 |
| 40 void SimulateURLFetch(bool success) { | 174 void SimulateURLFetch(const std::string& script, bool success) { |
| 41 net::TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0); | 175 net::TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0); |
| 42 ASSERT_TRUE(fetcher); | 176 ASSERT_TRUE(fetcher); |
| 43 net::Error error = success ? net::OK : net::ERR_FAILED; | 177 net::Error error = success ? net::OK : net::ERR_FAILED; |
| 44 | 178 |
| 45 std::string script = | |
| 46 " var google = {};" | |
| 47 "google.translate = (function() {" | |
| 48 " return {" | |
| 49 " TranslateService: function() {" | |
| 50 " return {" | |
| 51 " isAvailable : function() {" | |
| 52 " return true;" | |
| 53 " }," | |
| 54 " restore : function() {" | |
| 55 " return;" | |
| 56 " }," | |
| 57 " getDetectedLanguage : function() {" | |
| 58 " return \"fr\";" | |
| 59 " }," | |
| 60 " translatePage : function(originalLang, targetLang," | |
| 61 " onTranslateProgress) {" | |
| 62 " var error = (originalLang == 'auto') ? true : false;" | |
| 63 " onTranslateProgress(100, true, error);" | |
| 64 " }" | |
| 65 " };" | |
| 66 " }" | |
| 67 " };" | |
| 68 "})();" | |
| 69 "cr.googleTranslate.onTranslateElementLoad();"; | |
| 70 | |
| 71 fetcher->set_url(fetcher->GetOriginalURL()); | 179 fetcher->set_url(fetcher->GetOriginalURL()); |
| 72 fetcher->set_status(net::URLRequestStatus::FromError(error)); | 180 fetcher->set_status(net::URLRequestStatus::FromError(error)); |
| 73 fetcher->set_response_code(success ? 200 : 500); | 181 fetcher->set_response_code(success ? 200 : 500); |
| 74 fetcher->SetResponseString(script); | 182 fetcher->SetResponseString(script); |
| 75 fetcher->delegate()->OnURLFetchComplete(fetcher); | 183 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 76 } | 184 } |
| 77 | 185 |
| 186 void OnTranslateError(const translate::TranslateErrorDetails& details) { | |
| 187 error_type_ = details.error; | |
| 188 } | |
| 189 | |
| 190 translate::TranslateErrors::Type GetPageTranslatedResult() { | |
| 191 return error_type_; | |
| 192 } | |
| 193 | |
| 78 protected: | 194 protected: |
| 79 // InProcessBrowserTest members. | 195 // InProcessBrowserTest members. |
| 80 void SetUp() override { | 196 void SetUp() override { |
| 81 InProcessBrowserTest::SetUp(); | 197 InProcessBrowserTest::SetUp(); |
| 82 } | 198 } |
| 83 void SetUpOnMainThread() override { | 199 void SetUpOnMainThread() override { |
| 84 ResetObserver(); | 200 ResetObserver(); |
| 85 InProcessBrowserTest::SetUpOnMainThread(); | 201 InProcessBrowserTest::SetUpOnMainThread(); |
| 86 } | 202 } |
| 87 | 203 |
| 88 private: | 204 private: |
| 89 net::TestURLFetcherFactory url_fetcher_factory_; | 205 net::TestURLFetcherFactory url_fetcher_factory_; |
| 90 | 206 |
| 207 translate::TranslateErrors::Type error_type_; | |
| 208 | |
| 91 using LangageDetectionObserver = | 209 using LangageDetectionObserver = |
| 92 ui_test_utils::WindowedNotificationObserverWithDetails< | 210 ui_test_utils::WindowedNotificationObserverWithDetails< |
| 93 translate::LanguageDetectionDetails>; | 211 translate::LanguageDetectionDetails>; |
| 94 | 212 |
| 95 std::unique_ptr<LangageDetectionObserver> language_detected_signal_; | 213 std::unique_ptr<LangageDetectionObserver> language_detected_signal_; |
| 96 std::unique_ptr<content::WindowedNotificationObserver> | 214 std::unique_ptr<content::WindowedNotificationObserver> |
| 97 page_translated_signal_; | 215 page_translated_signal_; |
| 98 }; | 216 }; |
| 99 | 217 |
| 100 // Tests that the CLD (Compact Language Detection) works properly. | 218 // Tests that the CLD (Compact Language Detection) works properly. |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 158 AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/french_page.html")), | 276 AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/french_page.html")), |
| 159 ui::PAGE_TRANSITION_TYPED); | 277 ui::PAGE_TRANSITION_TYPED); |
| 160 current_web_contents = browser()->tab_strip_model()->GetActiveWebContents(); | 278 current_web_contents = browser()->tab_strip_model()->GetActiveWebContents(); |
| 161 chrome_translate_client = | 279 chrome_translate_client = |
| 162 ChromeTranslateClient::FromWebContents(current_web_contents); | 280 ChromeTranslateClient::FromWebContents(current_web_contents); |
| 163 WaitUntilLanguageDetected(); | 281 WaitUntilLanguageDetected(); |
| 164 | 282 |
| 165 EXPECT_EQ("fr", | 283 EXPECT_EQ("fr", |
| 166 chrome_translate_client->GetLanguageState().original_language()); | 284 chrome_translate_client->GetLanguageState().original_language()); |
| 167 | 285 |
| 286 std::unique_ptr< | |
| 287 translate::TranslateManager::TranslateErrorCallbackList::Subscription> | |
| 288 error_subscription; | |
| 289 error_subscription = | |
|
napper
2017/06/16 12:41:51
why not just use the constructor?
Gaja
2017/06/17 06:41:46
Acknowledged.
Gaja
2017/06/17 13:25:48
Done.
| |
| 290 translate::TranslateManager::RegisterTranslateErrorCallback( | |
| 291 base::Bind(&TranslateManagerBrowserTest::OnTranslateError, | |
| 292 base::Unretained(this))); | |
| 293 | |
| 168 // Translate the page through TranslateManager. | 294 // Translate the page through TranslateManager. |
| 169 translate::TranslateManager* manager = | 295 translate::TranslateManager* manager = |
| 170 chrome_translate_client->GetTranslateManager(); | 296 chrome_translate_client->GetTranslateManager(); |
| 171 manager->TranslatePage( | 297 manager->TranslatePage( |
| 172 chrome_translate_client->GetLanguageState().original_language(), "en", | 298 chrome_translate_client->GetLanguageState().original_language(), "en", |
| 173 true); | 299 true); |
| 174 | 300 |
| 175 SimulateURLFetch(true); | 301 SimulateURLFetch(kTestValidScript, true); |
| 176 | 302 |
| 177 // Wait for NOTIFICATION_PAGE_TRANSLATED notification. | 303 // Wait for NOTIFICATION_PAGE_TRANSLATED notification. |
| 178 WaitUntilPageTranslated(); | 304 WaitUntilPageTranslated(); |
| 179 | 305 |
| 180 EXPECT_FALSE(chrome_translate_client->GetLanguageState().translation_error()); | 306 EXPECT_FALSE(chrome_translate_client->GetLanguageState().translation_error()); |
| 307 EXPECT_EQ(translate::TranslateErrors::NONE, GetPageTranslatedResult()); | |
| 181 } | 308 } |
| 182 | 309 |
| 183 // Test if there was an error during translation. | 310 // Test if there was an error during translation. |
| 184 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, PageTranslationError) { | 311 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, PageTranslationError) { |
| 185 ASSERT_TRUE(embedded_test_server()->Start()); | 312 ASSERT_TRUE(embedded_test_server()->Start()); |
| 186 | 313 |
| 187 content::WebContents* current_web_contents = | 314 content::WebContents* current_web_contents = |
| 188 browser()->tab_strip_model()->GetActiveWebContents(); | 315 browser()->tab_strip_model()->GetActiveWebContents(); |
| 189 ChromeTranslateClient* chrome_translate_client = | 316 ChromeTranslateClient* chrome_translate_client = |
| 190 ChromeTranslateClient::FromWebContents(current_web_contents); | 317 ChromeTranslateClient::FromWebContents(current_web_contents); |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 201 ResetObserver(); | 328 ResetObserver(); |
| 202 AddTabAtIndex(0, GURL("about:blank"), ui::PAGE_TRANSITION_TYPED); | 329 AddTabAtIndex(0, GURL("about:blank"), ui::PAGE_TRANSITION_TYPED); |
| 203 current_web_contents = browser()->tab_strip_model()->GetActiveWebContents(); | 330 current_web_contents = browser()->tab_strip_model()->GetActiveWebContents(); |
| 204 chrome_translate_client = | 331 chrome_translate_client = |
| 205 ChromeTranslateClient::FromWebContents(current_web_contents); | 332 ChromeTranslateClient::FromWebContents(current_web_contents); |
| 206 WaitUntilLanguageDetected(); | 333 WaitUntilLanguageDetected(); |
| 207 | 334 |
| 208 EXPECT_EQ("und", | 335 EXPECT_EQ("und", |
| 209 chrome_translate_client->GetLanguageState().original_language()); | 336 chrome_translate_client->GetLanguageState().original_language()); |
| 210 | 337 |
| 211 // Translate the page through TranslateManager. | 338 std::unique_ptr< |
| 212 translate::TranslateManager* manager = | 339 translate::TranslateManager::TranslateErrorCallbackList::Subscription> |
| 213 chrome_translate_client->GetTranslateManager(); | 340 error_subscription; |
| 341 error_subscription = | |
| 342 translate::TranslateManager::RegisterTranslateErrorCallback( | |
| 343 base::Bind(&TranslateManagerBrowserTest::OnTranslateError, | |
| 344 base::Unretained(this))); | |
| 345 | |
| 346 // Translate the page through TranslateManager. | |
| 347 translate::TranslateManager* manager = | |
| 348 chrome_translate_client->GetTranslateManager(); | |
| 349 manager->TranslatePage( | |
| 350 chrome_translate_client->GetLanguageState().original_language(), "en", | |
| 351 true); | |
| 352 | |
| 353 SimulateURLFetch(kTestValidScript, true); | |
| 354 | |
| 355 // Wait for NOTIFICATION_PAGE_TRANSLATED notification. | |
| 356 WaitUntilPageTranslated(); | |
| 357 | |
| 358 EXPECT_TRUE(chrome_translate_client->GetLanguageState().translation_error()); | |
| 359 EXPECT_EQ(translate::TranslateErrors::TRANSLATION_ERROR, | |
| 360 GetPageTranslatedResult()); | |
| 361 } | |
| 362 | |
| 363 // Test if there was an error during translate library initialization. | |
| 364 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, | |
| 365 PageTranslationInitializationError) { | |
| 366 ASSERT_TRUE(embedded_test_server()->Start()); | |
| 367 | |
| 368 content::WebContents* current_web_contents = | |
| 369 browser()->tab_strip_model()->GetActiveWebContents(); | |
| 370 ChromeTranslateClient* chrome_translate_client = | |
| 371 ChromeTranslateClient::FromWebContents(current_web_contents); | |
| 372 | |
| 373 // There is a possible race condition, when the language is not yet detected, | |
| 374 // so we check for that and wait if necessary. | |
| 375 if (chrome_translate_client->GetLanguageState().original_language().empty()) | |
| 376 WaitUntilLanguageDetected(); | |
| 377 | |
| 378 EXPECT_EQ("und", | |
| 379 chrome_translate_client->GetLanguageState().original_language()); | |
| 380 | |
| 381 // Open a new tab with a page in French. | |
| 382 ResetObserver(); | |
| 383 AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/french_page.html")), | |
| 384 ui::PAGE_TRANSITION_TYPED); | |
| 385 current_web_contents = browser()->tab_strip_model()->GetActiveWebContents(); | |
| 386 chrome_translate_client = | |
| 387 ChromeTranslateClient::FromWebContents(current_web_contents); | |
| 388 WaitUntilLanguageDetected(); | |
| 389 | |
| 390 EXPECT_EQ("fr", | |
| 391 chrome_translate_client->GetLanguageState().original_language()); | |
| 392 | |
| 393 std::unique_ptr< | |
| 394 translate::TranslateManager::TranslateErrorCallbackList::Subscription> | |
| 395 error_subscription; | |
| 396 error_subscription = | |
| 397 translate::TranslateManager::RegisterTranslateErrorCallback( | |
| 398 base::Bind(&TranslateManagerBrowserTest::OnTranslateError, | |
| 399 base::Unretained(this))); | |
| 400 | |
| 401 // Translate the page through TranslateManager. | |
| 402 translate::TranslateManager* manager = | |
| 403 chrome_translate_client->GetTranslateManager(); | |
| 404 manager->TranslatePage( | |
| 405 chrome_translate_client->GetLanguageState().original_language(), "en", | |
| 406 true); | |
| 407 | |
| 408 SimulateURLFetch(kTestScriptInitializationError, true); | |
| 409 | |
| 410 // Wait for NOTIFICATION_PAGE_TRANSLATED notification. | |
| 411 WaitUntilPageTranslated(); | |
| 412 | |
| 413 EXPECT_TRUE(chrome_translate_client->GetLanguageState().translation_error()); | |
| 414 EXPECT_EQ(translate::TranslateErrors::INITIALIZATION_ERROR, | |
| 415 GetPageTranslatedResult()); | |
| 416 } | |
| 417 | |
| 418 // Test the checks translate lib never gets ready and throws timeout. | |
| 419 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, | |
| 420 PageTranslationTimeoutError) { | |
| 421 ASSERT_TRUE(embedded_test_server()->Start()); | |
| 422 | |
| 423 content::WebContents* current_web_contents = | |
| 424 browser()->tab_strip_model()->GetActiveWebContents(); | |
| 425 ChromeTranslateClient* chrome_translate_client = | |
| 426 ChromeTranslateClient::FromWebContents(current_web_contents); | |
| 427 | |
| 428 // There is a possible race condition, when the language is not yet detected, | |
| 429 // so we check for that and wait if necessary. | |
| 430 if (chrome_translate_client->GetLanguageState().original_language().empty()) | |
| 431 WaitUntilLanguageDetected(); | |
| 432 | |
| 433 EXPECT_EQ("und", | |
| 434 chrome_translate_client->GetLanguageState().original_language()); | |
| 435 | |
| 436 // Open a new tab with a page in French. | |
| 437 ResetObserver(); | |
| 438 AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/french_page.html")), | |
| 439 ui::PAGE_TRANSITION_TYPED); | |
| 440 current_web_contents = browser()->tab_strip_model()->GetActiveWebContents(); | |
| 441 chrome_translate_client = | |
| 442 ChromeTranslateClient::FromWebContents(current_web_contents); | |
| 443 WaitUntilLanguageDetected(); | |
| 444 | |
| 445 EXPECT_EQ("fr", | |
| 446 chrome_translate_client->GetLanguageState().original_language()); | |
| 447 | |
| 448 std::unique_ptr< | |
| 449 translate::TranslateManager::TranslateErrorCallbackList::Subscription> | |
| 450 error_subscription; | |
| 451 error_subscription = | |
| 452 translate::TranslateManager::RegisterTranslateErrorCallback( | |
| 453 base::Bind(&TranslateManagerBrowserTest::OnTranslateError, | |
| 454 base::Unretained(this))); | |
| 455 | |
| 456 // Translate the page through TranslateManager. | |
| 457 translate::TranslateManager* manager = | |
| 458 chrome_translate_client->GetTranslateManager(); | |
| 459 manager->TranslatePage( | |
| 460 chrome_translate_client->GetLanguageState().original_language(), "en", | |
| 461 true); | |
| 462 | |
| 463 SimulateURLFetch(kTestScriptTimeout, true); | |
| 464 | |
| 465 // Wait for NOTIFICATION_PAGE_TRANSLATED notification. | |
| 466 WaitUntilPageTranslated(); | |
| 467 | |
| 468 EXPECT_TRUE(chrome_translate_client->GetLanguageState().translation_error()); | |
| 469 EXPECT_EQ(translate::TranslateErrors::TRANSLATION_TIMEOUT, | |
| 470 GetPageTranslatedResult()); | |
| 471 } | |
| 472 | |
| 473 // Test the checks if both source and target languages mentioned are identical. | |
| 474 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, | |
| 475 PageTranslationIdenticalLanguagesError) { | |
| 476 ASSERT_TRUE(embedded_test_server()->Start()); | |
| 477 | |
| 478 content::WebContents* current_web_contents = | |
| 479 browser()->tab_strip_model()->GetActiveWebContents(); | |
| 480 ChromeTranslateClient* chrome_translate_client = | |
| 481 ChromeTranslateClient::FromWebContents(current_web_contents); | |
| 482 | |
| 483 // There is a possible race condition, when the language is not yet detected, | |
| 484 // so we check for that and wait if necessary. | |
| 485 if (chrome_translate_client->GetLanguageState().original_language().empty()) | |
| 486 WaitUntilLanguageDetected(); | |
| 487 | |
| 488 EXPECT_EQ("und", | |
| 489 chrome_translate_client->GetLanguageState().original_language()); | |
| 490 | |
| 491 // Open a new tab with a page in French. | |
| 492 ResetObserver(); | |
| 493 AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/french_page.html")), | |
| 494 ui::PAGE_TRANSITION_TYPED); | |
| 495 current_web_contents = browser()->tab_strip_model()->GetActiveWebContents(); | |
| 496 chrome_translate_client = | |
| 497 ChromeTranslateClient::FromWebContents(current_web_contents); | |
| 498 WaitUntilLanguageDetected(); | |
| 499 | |
| 500 EXPECT_EQ("fr", | |
| 501 chrome_translate_client->GetLanguageState().original_language()); | |
| 502 | |
| 503 std::unique_ptr< | |
| 504 translate::TranslateManager::TranslateErrorCallbackList::Subscription> | |
| 505 error_subscription; | |
| 506 error_subscription = | |
| 507 translate::TranslateManager::RegisterTranslateErrorCallback( | |
| 508 base::Bind(&TranslateManagerBrowserTest::OnTranslateError, | |
| 509 base::Unretained(this))); | |
| 510 | |
| 511 // Translate the page through TranslateManager. | |
| 512 translate::TranslateManager* manager = | |
| 513 chrome_translate_client->GetTranslateManager(); | |
| 514 std::string original_lang = | |
| 515 chrome_translate_client->GetLanguageState().original_language(); | |
| 516 manager->TranslatePage(original_lang, original_lang, true); | |
| 517 | |
| 518 SimulateURLFetch(kTestValidScript, true); | |
| 519 | |
| 520 // Wait for NOTIFICATION_PAGE_TRANSLATED notification. | |
| 521 WaitUntilPageTranslated(); | |
| 522 | |
| 523 EXPECT_TRUE(chrome_translate_client->GetLanguageState().translation_error()); | |
| 524 EXPECT_EQ(translate::TranslateErrors::IDENTICAL_LANGUAGES, | |
| 525 GetPageTranslatedResult()); | |
| 526 } | |
| 527 | |
| 528 // Test if there was an error during translatePage script execution. | |
| 529 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, | |
| 530 PageTranslationUnexpectedScriptError) { | |
| 531 ASSERT_TRUE(embedded_test_server()->Start()); | |
| 532 | |
| 533 content::WebContents* current_web_contents = | |
| 534 browser()->tab_strip_model()->GetActiveWebContents(); | |
| 535 ChromeTranslateClient* chrome_translate_client = | |
| 536 ChromeTranslateClient::FromWebContents(current_web_contents); | |
| 537 | |
| 538 // There is a possible race condition, when the language is not yet detected, | |
| 539 // so we check for that and wait if necessary. | |
| 540 if (chrome_translate_client->GetLanguageState().original_language().empty()) | |
| 541 WaitUntilLanguageDetected(); | |
| 542 | |
| 543 EXPECT_EQ("und", | |
| 544 chrome_translate_client->GetLanguageState().original_language()); | |
| 545 | |
| 546 // Open a new tab with a page in French. | |
| 547 ResetObserver(); | |
| 548 AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/french_page.html")), | |
| 549 ui::PAGE_TRANSITION_TYPED); | |
| 550 current_web_contents = browser()->tab_strip_model()->GetActiveWebContents(); | |
| 551 chrome_translate_client = | |
| 552 ChromeTranslateClient::FromWebContents(current_web_contents); | |
| 553 WaitUntilLanguageDetected(); | |
| 554 | |
| 555 EXPECT_EQ("fr", | |
| 556 chrome_translate_client->GetLanguageState().original_language()); | |
| 557 | |
| 558 std::unique_ptr< | |
| 559 translate::TranslateManager::TranslateErrorCallbackList::Subscription> | |
| 560 error_subscription; | |
| 561 error_subscription = | |
| 562 translate::TranslateManager::RegisterTranslateErrorCallback( | |
| 563 base::Bind(&TranslateManagerBrowserTest::OnTranslateError, | |
| 564 base::Unretained(this))); | |
| 565 | |
| 566 // Translate the page through TranslateManager. | |
| 567 translate::TranslateManager* manager = | |
| 568 chrome_translate_client->GetTranslateManager(); | |
| 569 manager->TranslatePage( | |
| 570 chrome_translate_client->GetLanguageState().original_language(), "en", | |
| 571 true); | |
| 572 | |
| 573 SimulateURLFetch(kTestScriptUnexpectedScriptError, true); | |
| 574 | |
| 575 // Wait for NOTIFICATION_PAGE_TRANSLATED notification. | |
| 576 WaitUntilPageTranslated(); | |
| 577 | |
| 578 EXPECT_TRUE(chrome_translate_client->GetLanguageState().translation_error()); | |
| 579 EXPECT_EQ(translate::TranslateErrors::UNEXPECTED_SCRIPT_ERROR, | |
| 580 GetPageTranslatedResult()); | |
| 581 } | |
| 582 | |
| 583 // Test if securityOrigin mentioned in url is valid. | |
| 584 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, | |
| 585 PageTranslationBadOriginError) { | |
| 586 ASSERT_TRUE(embedded_test_server()->Start()); | |
| 587 | |
| 588 content::WebContents* current_web_contents = | |
| 589 browser()->tab_strip_model()->GetActiveWebContents(); | |
| 590 ChromeTranslateClient* chrome_translate_client = | |
| 591 ChromeTranslateClient::FromWebContents(current_web_contents); | |
| 592 | |
| 593 // There is a possible race condition, when the language is not yet detected, | |
| 594 // so we check for that and wait if necessary. | |
| 595 if (chrome_translate_client->GetLanguageState().original_language().empty()) | |
| 596 WaitUntilLanguageDetected(); | |
| 597 | |
| 598 EXPECT_EQ("und", | |
| 599 chrome_translate_client->GetLanguageState().original_language()); | |
| 600 | |
| 601 // Open a new tab with a page in French. | |
| 602 ResetObserver(); | |
| 603 AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/french_page.html")), | |
| 604 ui::PAGE_TRANSITION_TYPED); | |
| 605 current_web_contents = browser()->tab_strip_model()->GetActiveWebContents(); | |
| 606 chrome_translate_client = | |
| 607 ChromeTranslateClient::FromWebContents(current_web_contents); | |
| 608 WaitUntilLanguageDetected(); | |
| 609 | |
| 610 EXPECT_EQ("fr", | |
| 611 chrome_translate_client->GetLanguageState().original_language()); | |
| 612 | |
| 613 std::unique_ptr< | |
| 614 translate::TranslateManager::TranslateErrorCallbackList::Subscription> | |
| 615 error_subscription; | |
| 616 error_subscription = | |
| 617 translate::TranslateManager::RegisterTranslateErrorCallback( | |
| 618 base::Bind(&TranslateManagerBrowserTest::OnTranslateError, | |
| 619 base::Unretained(this))); | |
| 620 | |
| 621 // Translate the page through TranslateManager. | |
| 622 translate::TranslateManager* manager = | |
| 623 chrome_translate_client->GetTranslateManager(); | |
| 624 manager->TranslatePage( | |
| 625 chrome_translate_client->GetLanguageState().original_language(), "en", | |
| 626 true); | |
| 627 | |
| 628 SimulateURLFetch(kTestScriptBadOrigin, true); | |
| 629 | |
| 630 // Wait for NOTIFICATION_PAGE_TRANSLATED notification. | |
| 631 WaitUntilPageTranslated(); | |
| 632 | |
| 633 EXPECT_TRUE(chrome_translate_client->GetLanguageState().translation_error()); | |
| 634 EXPECT_EQ(translate::TranslateErrors::BAD_ORIGIN, GetPageTranslatedResult()); | |
| 635 } | |
| 636 | |
| 637 // Test if there was an error during script load. | |
| 638 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, | |
| 639 PageTranslationScriptLoadError) { | |
| 640 ASSERT_TRUE(embedded_test_server()->Start()); | |
| 641 | |
| 642 content::WebContents* current_web_contents = | |
| 643 browser()->tab_strip_model()->GetActiveWebContents(); | |
| 644 ChromeTranslateClient* chrome_translate_client = | |
| 645 ChromeTranslateClient::FromWebContents(current_web_contents); | |
| 646 | |
| 647 // There is a possible race condition, when the language is not yet detected, | |
| 648 // so we check for that and wait if necessary. | |
| 649 if (chrome_translate_client->GetLanguageState().original_language().empty()) | |
| 650 WaitUntilLanguageDetected(); | |
| 651 | |
| 652 EXPECT_EQ("und", | |
| 653 chrome_translate_client->GetLanguageState().original_language()); | |
| 654 | |
| 655 // Open a new tab with a page in French. | |
| 656 ResetObserver(); | |
| 657 AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/french_page.html")), | |
| 658 ui::PAGE_TRANSITION_TYPED); | |
| 659 current_web_contents = browser()->tab_strip_model()->GetActiveWebContents(); | |
| 660 chrome_translate_client = | |
| 661 ChromeTranslateClient::FromWebContents(current_web_contents); | |
| 662 WaitUntilLanguageDetected(); | |
| 663 | |
| 664 EXPECT_EQ("fr", | |
| 665 chrome_translate_client->GetLanguageState().original_language()); | |
| 666 | |
| 667 std::unique_ptr< | |
| 668 translate::TranslateManager::TranslateErrorCallbackList::Subscription> | |
| 669 error_subscription; | |
| 670 error_subscription = | |
| 671 translate::TranslateManager::RegisterTranslateErrorCallback( | |
| 672 base::Bind(&TranslateManagerBrowserTest::OnTranslateError, | |
| 673 base::Unretained(this))); | |
| 674 | |
| 675 // Translate the page through TranslateManager. | |
| 676 translate::TranslateManager* manager = | |
| 677 chrome_translate_client->GetTranslateManager(); | |
| 214 manager->TranslatePage( | 678 manager->TranslatePage( |
| 215 chrome_translate_client->GetLanguageState().original_language(), "en", | 679 chrome_translate_client->GetLanguageState().original_language(), "en", |
| 216 true); | 680 true); |
| 217 | 681 |
| 218 SimulateURLFetch(true); | 682 SimulateURLFetch(kTestScriptLoadError, true); |
| 219 | 683 |
| 220 // Wait for NOTIFICATION_PAGE_TRANSLATED notification. | 684 // Wait for NOTIFICATION_PAGE_TRANSLATED notification. |
| 221 WaitUntilPageTranslated(); | 685 WaitUntilPageTranslated(); |
| 222 | 686 |
| 223 EXPECT_TRUE(chrome_translate_client->GetLanguageState().translation_error()); | 687 EXPECT_TRUE(chrome_translate_client->GetLanguageState().translation_error()); |
| 688 EXPECT_EQ(translate::TranslateErrors::SCRIPT_LOAD_ERROR, | |
| 689 GetPageTranslatedResult()); | |
| 224 } | 690 } |
| 225 | 691 |
| 226 // Test that session restore restores the translate infobar and other translate | 692 // Test that session restore restores the translate infobar and other translate |
| 227 // settings. | 693 // settings. |
| 228 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, | 694 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, |
| 229 PRE_TranslateSessionRestore) { | 695 PRE_TranslateSessionRestore) { |
| 230 SessionStartupPref pref(SessionStartupPref::LAST); | 696 SessionStartupPref pref(SessionStartupPref::LAST); |
| 231 SessionStartupPref::SetStartupPref(browser()->profile(), pref); | 697 SessionStartupPref::SetStartupPref(browser()->profile(), pref); |
| 232 | 698 |
| 233 content::WebContents* current_web_contents = | 699 content::WebContents* current_web_contents = |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 275 ChromeTranslateClient::FromWebContents(restored_web_contents); | 741 ChromeTranslateClient::FromWebContents(restored_web_contents); |
| 276 if (restored_translate_client->GetLanguageState() | 742 if (restored_translate_client->GetLanguageState() |
| 277 .current_language() | 743 .current_language() |
| 278 .empty()) { | 744 .empty()) { |
| 279 ResetObserver(); | 745 ResetObserver(); |
| 280 WaitUntilLanguageDetected(); | 746 WaitUntilLanguageDetected(); |
| 281 } | 747 } |
| 282 EXPECT_EQ("fr", | 748 EXPECT_EQ("fr", |
| 283 restored_translate_client->GetLanguageState().current_language()); | 749 restored_translate_client->GetLanguageState().current_language()); |
| 284 } | 750 } |
| OLD | NEW |