| 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 "base/time/time.h" | 5 #include "base/time/time.h" |
| 6 #include "chrome/renderer/isolated_world_ids.h" | 6 #include "chrome/renderer/isolated_world_ids.h" |
| 7 #include "chrome/test/base/chrome_render_view_test.h" | 7 #include "chrome/test/base/chrome_render_view_test.h" |
| 8 #include "components/translate/content/common/translate_messages.h" | 8 #include "components/translate/content/common/translate_messages.h" |
| 9 #include "components/translate/content/renderer/translate_helper.h" | 9 #include "components/translate/content/renderer/translate_helper.h" |
| 10 #include "components/translate/core/common/translate_constants.h" | 10 #include "components/translate/core/common/translate_constants.h" |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 71 ChromeRenderViewTest::TearDown(); | 71 ChromeRenderViewTest::TearDown(); |
| 72 } | 72 } |
| 73 | 73 |
| 74 bool GetPageTranslatedMessage(std::string* original_lang, | 74 bool GetPageTranslatedMessage(std::string* original_lang, |
| 75 std::string* target_lang, | 75 std::string* target_lang, |
| 76 translate::TranslateErrors::Type* error) { | 76 translate::TranslateErrors::Type* error) { |
| 77 const IPC::Message* message = render_thread_->sink(). | 77 const IPC::Message* message = render_thread_->sink(). |
| 78 GetUniqueMessageMatching(ChromeViewHostMsg_PageTranslated::ID); | 78 GetUniqueMessageMatching(ChromeViewHostMsg_PageTranslated::ID); |
| 79 if (!message) | 79 if (!message) |
| 80 return false; | 80 return false; |
| 81 Tuple3<std::string, std::string, translate::TranslateErrors::Type> | 81 Tuple<std::string, std::string, translate::TranslateErrors::Type> |
| 82 translate_param; | 82 translate_param; |
| 83 ChromeViewHostMsg_PageTranslated::Read(message, &translate_param); | 83 ChromeViewHostMsg_PageTranslated::Read(message, &translate_param); |
| 84 if (original_lang) | 84 if (original_lang) |
| 85 *original_lang = translate_param.a; | 85 *original_lang = get<0>(translate_param); |
| 86 if (target_lang) | 86 if (target_lang) |
| 87 *target_lang = translate_param.b; | 87 *target_lang = get<1>(translate_param); |
| 88 if (error) | 88 if (error) |
| 89 *error = translate_param.c; | 89 *error = get<2>(translate_param); |
| 90 return true; | 90 return true; |
| 91 } | 91 } |
| 92 | 92 |
| 93 TestTranslateHelper* translate_helper_; | 93 TestTranslateHelper* translate_helper_; |
| 94 | 94 |
| 95 private: | 95 private: |
| 96 DISALLOW_COPY_AND_ASSIGN(TranslateHelperBrowserTest); | 96 DISALLOW_COPY_AND_ASSIGN(TranslateHelperBrowserTest); |
| 97 }; | 97 }; |
| 98 | 98 |
| 99 // Tests that the browser gets notified of the translation failure if the | 99 // Tests that the browser gets notified of the translation failure if the |
| (...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 323 // Suppress the normal delay that occurs when the page is loaded before which | 323 // Suppress the normal delay that occurs when the page is loaded before which |
| 324 // the renderer sends the page contents to the browser. | 324 // the renderer sends the page contents to the browser. |
| 325 SendContentStateImmediately(); | 325 SendContentStateImmediately(); |
| 326 | 326 |
| 327 LoadHTML("<html><body>A random page with random content.</body></html>"); | 327 LoadHTML("<html><body>A random page with random content.</body></html>"); |
| 328 const IPC::Message* message = render_thread_->sink().GetUniqueMessageMatching( | 328 const IPC::Message* message = render_thread_->sink().GetUniqueMessageMatching( |
| 329 ChromeViewHostMsg_TranslateLanguageDetermined::ID); | 329 ChromeViewHostMsg_TranslateLanguageDetermined::ID); |
| 330 ASSERT_NE(static_cast<IPC::Message*>(NULL), message); | 330 ASSERT_NE(static_cast<IPC::Message*>(NULL), message); |
| 331 ChromeViewHostMsg_TranslateLanguageDetermined::Param params; | 331 ChromeViewHostMsg_TranslateLanguageDetermined::Param params; |
| 332 ChromeViewHostMsg_TranslateLanguageDetermined::Read(message, ¶ms); | 332 ChromeViewHostMsg_TranslateLanguageDetermined::Read(message, ¶ms); |
| 333 EXPECT_TRUE(params.b) << "Page should be translatable."; | 333 EXPECT_TRUE(get<1>(params)) << "Page should be translatable."; |
| 334 render_thread_->sink().ClearMessages(); | 334 render_thread_->sink().ClearMessages(); |
| 335 | 335 |
| 336 // Now the page specifies the META tag to prevent translation. | 336 // Now the page specifies the META tag to prevent translation. |
| 337 LoadHTML("<html><head><meta name=\"google\" value=\"notranslate\"></head>" | 337 LoadHTML("<html><head><meta name=\"google\" value=\"notranslate\"></head>" |
| 338 "<body>A random page with random content.</body></html>"); | 338 "<body>A random page with random content.</body></html>"); |
| 339 message = render_thread_->sink().GetUniqueMessageMatching( | 339 message = render_thread_->sink().GetUniqueMessageMatching( |
| 340 ChromeViewHostMsg_TranslateLanguageDetermined::ID); | 340 ChromeViewHostMsg_TranslateLanguageDetermined::ID); |
| 341 ASSERT_NE(static_cast<IPC::Message*>(NULL), message); | 341 ASSERT_NE(static_cast<IPC::Message*>(NULL), message); |
| 342 ChromeViewHostMsg_TranslateLanguageDetermined::Read(message, ¶ms); | 342 ChromeViewHostMsg_TranslateLanguageDetermined::Read(message, ¶ms); |
| 343 EXPECT_FALSE(params.b) << "Page should not be translatable."; | 343 EXPECT_FALSE(get<1>(params)) << "Page should not be translatable."; |
| 344 render_thread_->sink().ClearMessages(); | 344 render_thread_->sink().ClearMessages(); |
| 345 | 345 |
| 346 // Try the alternate version of the META tag (content instead of value). | 346 // Try the alternate version of the META tag (content instead of value). |
| 347 LoadHTML("<html><head><meta name=\"google\" content=\"notranslate\"></head>" | 347 LoadHTML("<html><head><meta name=\"google\" content=\"notranslate\"></head>" |
| 348 "<body>A random page with random content.</body></html>"); | 348 "<body>A random page with random content.</body></html>"); |
| 349 message = render_thread_->sink().GetUniqueMessageMatching( | 349 message = render_thread_->sink().GetUniqueMessageMatching( |
| 350 ChromeViewHostMsg_TranslateLanguageDetermined::ID); | 350 ChromeViewHostMsg_TranslateLanguageDetermined::ID); |
| 351 ASSERT_NE(static_cast<IPC::Message*>(NULL), message); | 351 ASSERT_NE(static_cast<IPC::Message*>(NULL), message); |
| 352 ChromeViewHostMsg_TranslateLanguageDetermined::Read(message, ¶ms); | 352 ChromeViewHostMsg_TranslateLanguageDetermined::Read(message, ¶ms); |
| 353 EXPECT_FALSE(params.b) << "Page should not be translatable."; | 353 EXPECT_FALSE(get<1>(params)) << "Page should not be translatable."; |
| 354 } | 354 } |
| 355 | 355 |
| 356 // Tests that the language meta tag takes precedence over the CLD when reporting | 356 // Tests that the language meta tag takes precedence over the CLD when reporting |
| 357 // the page's language. | 357 // the page's language. |
| 358 TEST_F(ChromeRenderViewTest, LanguageMetaTag) { | 358 TEST_F(ChromeRenderViewTest, LanguageMetaTag) { |
| 359 // Suppress the normal delay that occurs when the page is loaded before which | 359 // Suppress the normal delay that occurs when the page is loaded before which |
| 360 // the renderer sends the page contents to the browser. | 360 // the renderer sends the page contents to the browser. |
| 361 SendContentStateImmediately(); | 361 SendContentStateImmediately(); |
| 362 | 362 |
| 363 LoadHTML("<html><head><meta http-equiv=\"content-language\" content=\"es\">" | 363 LoadHTML("<html><head><meta http-equiv=\"content-language\" content=\"es\">" |
| 364 "</head><body>A random page with random content.</body></html>"); | 364 "</head><body>A random page with random content.</body></html>"); |
| 365 const IPC::Message* message = render_thread_->sink().GetUniqueMessageMatching( | 365 const IPC::Message* message = render_thread_->sink().GetUniqueMessageMatching( |
| 366 ChromeViewHostMsg_TranslateLanguageDetermined::ID); | 366 ChromeViewHostMsg_TranslateLanguageDetermined::ID); |
| 367 ASSERT_NE(static_cast<IPC::Message*>(NULL), message); | 367 ASSERT_NE(static_cast<IPC::Message*>(NULL), message); |
| 368 ChromeViewHostMsg_TranslateLanguageDetermined::Param params; | 368 ChromeViewHostMsg_TranslateLanguageDetermined::Param params; |
| 369 ChromeViewHostMsg_TranslateLanguageDetermined::Read(message, ¶ms); | 369 ChromeViewHostMsg_TranslateLanguageDetermined::Read(message, ¶ms); |
| 370 EXPECT_EQ("es", params.a.adopted_language); | 370 EXPECT_EQ("es", get<0>(params).adopted_language); |
| 371 render_thread_->sink().ClearMessages(); | 371 render_thread_->sink().ClearMessages(); |
| 372 | 372 |
| 373 // Makes sure we support multiple languages specified. | 373 // Makes sure we support multiple languages specified. |
| 374 LoadHTML("<html><head><meta http-equiv=\"content-language\" " | 374 LoadHTML("<html><head><meta http-equiv=\"content-language\" " |
| 375 "content=\" fr , es,en \">" | 375 "content=\" fr , es,en \">" |
| 376 "</head><body>A random page with random content.</body></html>"); | 376 "</head><body>A random page with random content.</body></html>"); |
| 377 message = render_thread_->sink().GetUniqueMessageMatching( | 377 message = render_thread_->sink().GetUniqueMessageMatching( |
| 378 ChromeViewHostMsg_TranslateLanguageDetermined::ID); | 378 ChromeViewHostMsg_TranslateLanguageDetermined::ID); |
| 379 ASSERT_NE(static_cast<IPC::Message*>(NULL), message); | 379 ASSERT_NE(static_cast<IPC::Message*>(NULL), message); |
| 380 ChromeViewHostMsg_TranslateLanguageDetermined::Read(message, ¶ms); | 380 ChromeViewHostMsg_TranslateLanguageDetermined::Read(message, ¶ms); |
| 381 EXPECT_EQ("fr", params.a.adopted_language); | 381 EXPECT_EQ("fr", get<0>(params).adopted_language); |
| 382 } | 382 } |
| 383 | 383 |
| 384 // Tests that the language meta tag works even with non-all-lower-case. | 384 // Tests that the language meta tag works even with non-all-lower-case. |
| 385 // http://code.google.com/p/chromium/issues/detail?id=145689 | 385 // http://code.google.com/p/chromium/issues/detail?id=145689 |
| 386 TEST_F(ChromeRenderViewTest, LanguageMetaTagCase) { | 386 TEST_F(ChromeRenderViewTest, LanguageMetaTagCase) { |
| 387 // Suppress the normal delay that occurs when the page is loaded before which | 387 // Suppress the normal delay that occurs when the page is loaded before which |
| 388 // the renderer sends the page contents to the browser. | 388 // the renderer sends the page contents to the browser. |
| 389 SendContentStateImmediately(); | 389 SendContentStateImmediately(); |
| 390 | 390 |
| 391 LoadHTML("<html><head><meta http-equiv=\"Content-Language\" content=\"es\">" | 391 LoadHTML("<html><head><meta http-equiv=\"Content-Language\" content=\"es\">" |
| 392 "</head><body>A random page with random content.</body></html>"); | 392 "</head><body>A random page with random content.</body></html>"); |
| 393 const IPC::Message* message = render_thread_->sink().GetUniqueMessageMatching( | 393 const IPC::Message* message = render_thread_->sink().GetUniqueMessageMatching( |
| 394 ChromeViewHostMsg_TranslateLanguageDetermined::ID); | 394 ChromeViewHostMsg_TranslateLanguageDetermined::ID); |
| 395 ASSERT_NE(static_cast<IPC::Message*>(NULL), message); | 395 ASSERT_NE(static_cast<IPC::Message*>(NULL), message); |
| 396 ChromeViewHostMsg_TranslateLanguageDetermined::Param params; | 396 ChromeViewHostMsg_TranslateLanguageDetermined::Param params; |
| 397 ChromeViewHostMsg_TranslateLanguageDetermined::Read(message, ¶ms); | 397 ChromeViewHostMsg_TranslateLanguageDetermined::Read(message, ¶ms); |
| 398 EXPECT_EQ("es", params.a.adopted_language); | 398 EXPECT_EQ("es", get<0>(params).adopted_language); |
| 399 render_thread_->sink().ClearMessages(); | 399 render_thread_->sink().ClearMessages(); |
| 400 | 400 |
| 401 // Makes sure we support multiple languages specified. | 401 // Makes sure we support multiple languages specified. |
| 402 LoadHTML("<html><head><meta http-equiv=\"Content-Language\" " | 402 LoadHTML("<html><head><meta http-equiv=\"Content-Language\" " |
| 403 "content=\" fr , es,en \">" | 403 "content=\" fr , es,en \">" |
| 404 "</head><body>A random page with random content.</body></html>"); | 404 "</head><body>A random page with random content.</body></html>"); |
| 405 message = render_thread_->sink().GetUniqueMessageMatching( | 405 message = render_thread_->sink().GetUniqueMessageMatching( |
| 406 ChromeViewHostMsg_TranslateLanguageDetermined::ID); | 406 ChromeViewHostMsg_TranslateLanguageDetermined::ID); |
| 407 ASSERT_NE(static_cast<IPC::Message*>(NULL), message); | 407 ASSERT_NE(static_cast<IPC::Message*>(NULL), message); |
| 408 ChromeViewHostMsg_TranslateLanguageDetermined::Read(message, ¶ms); | 408 ChromeViewHostMsg_TranslateLanguageDetermined::Read(message, ¶ms); |
| 409 EXPECT_EQ("fr", params.a.adopted_language); | 409 EXPECT_EQ("fr", get<0>(params).adopted_language); |
| 410 } | 410 } |
| 411 | 411 |
| 412 // Tests that the language meta tag is converted to Chrome standard of dashes | 412 // Tests that the language meta tag is converted to Chrome standard of dashes |
| 413 // instead of underscores and proper capitalization. | 413 // instead of underscores and proper capitalization. |
| 414 // http://code.google.com/p/chromium/issues/detail?id=159487 | 414 // http://code.google.com/p/chromium/issues/detail?id=159487 |
| 415 TEST_F(ChromeRenderViewTest, LanguageCommonMistakesAreCorrected) { | 415 TEST_F(ChromeRenderViewTest, LanguageCommonMistakesAreCorrected) { |
| 416 // Suppress the normal delay that occurs when the page is loaded before which | 416 // Suppress the normal delay that occurs when the page is loaded before which |
| 417 // the renderer sends the page contents to the browser. | 417 // the renderer sends the page contents to the browser. |
| 418 SendContentStateImmediately(); | 418 SendContentStateImmediately(); |
| 419 | 419 |
| 420 LoadHTML("<html><head><meta http-equiv='Content-Language' content='EN_us'>" | 420 LoadHTML("<html><head><meta http-equiv='Content-Language' content='EN_us'>" |
| 421 "</head><body>A random page with random content.</body></html>"); | 421 "</head><body>A random page with random content.</body></html>"); |
| 422 const IPC::Message* message = render_thread_->sink().GetUniqueMessageMatching( | 422 const IPC::Message* message = render_thread_->sink().GetUniqueMessageMatching( |
| 423 ChromeViewHostMsg_TranslateLanguageDetermined::ID); | 423 ChromeViewHostMsg_TranslateLanguageDetermined::ID); |
| 424 ASSERT_NE(static_cast<IPC::Message*>(NULL), message); | 424 ASSERT_NE(static_cast<IPC::Message*>(NULL), message); |
| 425 ChromeViewHostMsg_TranslateLanguageDetermined::Param params; | 425 ChromeViewHostMsg_TranslateLanguageDetermined::Param params; |
| 426 ChromeViewHostMsg_TranslateLanguageDetermined::Read(message, ¶ms); | 426 ChromeViewHostMsg_TranslateLanguageDetermined::Read(message, ¶ms); |
| 427 EXPECT_EQ("en", params.a.adopted_language); | 427 EXPECT_EQ("en", get<0>(params).adopted_language); |
| 428 render_thread_->sink().ClearMessages(); | 428 render_thread_->sink().ClearMessages(); |
| 429 | 429 |
| 430 LoadHTML("<html><head><meta http-equiv='Content-Language' content='ZH_tw'>" | 430 LoadHTML("<html><head><meta http-equiv='Content-Language' content='ZH_tw'>" |
| 431 "</head><body>A random page with random content.</body></html>"); | 431 "</head><body>A random page with random content.</body></html>"); |
| 432 message = render_thread_->sink().GetUniqueMessageMatching( | 432 message = render_thread_->sink().GetUniqueMessageMatching( |
| 433 ChromeViewHostMsg_TranslateLanguageDetermined::ID); | 433 ChromeViewHostMsg_TranslateLanguageDetermined::ID); |
| 434 ASSERT_NE(static_cast<IPC::Message*>(NULL), message); | 434 ASSERT_NE(static_cast<IPC::Message*>(NULL), message); |
| 435 ChromeViewHostMsg_TranslateLanguageDetermined::Read(message, ¶ms); | 435 ChromeViewHostMsg_TranslateLanguageDetermined::Read(message, ¶ms); |
| 436 EXPECT_EQ("zh-TW", params.a.adopted_language); | 436 EXPECT_EQ("zh-TW", get<0>(params).adopted_language); |
| 437 render_thread_->sink().ClearMessages(); | 437 render_thread_->sink().ClearMessages(); |
| 438 } | 438 } |
| 439 | 439 |
| 440 // Tests that a back navigation gets a translate language message. | 440 // Tests that a back navigation gets a translate language message. |
| 441 TEST_F(ChromeRenderViewTest, BackToTranslatablePage) { | 441 TEST_F(ChromeRenderViewTest, BackToTranslatablePage) { |
| 442 SendContentStateImmediately(); | 442 SendContentStateImmediately(); |
| 443 LoadHTML("<html><head><meta http-equiv=\"content-language\" content=\"zh\">" | 443 LoadHTML("<html><head><meta http-equiv=\"content-language\" content=\"zh\">" |
| 444 "</head><body>This page is in Chinese.</body></html>"); | 444 "</head><body>This page is in Chinese.</body></html>"); |
| 445 const IPC::Message* message = render_thread_->sink().GetUniqueMessageMatching( | 445 const IPC::Message* message = render_thread_->sink().GetUniqueMessageMatching( |
| 446 ChromeViewHostMsg_TranslateLanguageDetermined::ID); | 446 ChromeViewHostMsg_TranslateLanguageDetermined::ID); |
| 447 ASSERT_NE(static_cast<IPC::Message*>(NULL), message); | 447 ASSERT_NE(static_cast<IPC::Message*>(NULL), message); |
| 448 ChromeViewHostMsg_TranslateLanguageDetermined::Param params; | 448 ChromeViewHostMsg_TranslateLanguageDetermined::Param params; |
| 449 ChromeViewHostMsg_TranslateLanguageDetermined::Read(message, ¶ms); | 449 ChromeViewHostMsg_TranslateLanguageDetermined::Read(message, ¶ms); |
| 450 EXPECT_EQ("zh", params.a.adopted_language); | 450 EXPECT_EQ("zh", get<0>(params).adopted_language); |
| 451 render_thread_->sink().ClearMessages(); | 451 render_thread_->sink().ClearMessages(); |
| 452 | 452 |
| 453 content::PageState back_state = GetCurrentPageState(); | 453 content::PageState back_state = GetCurrentPageState(); |
| 454 | 454 |
| 455 LoadHTML("<html><head><meta http-equiv=\"content-language\" content=\"fr\">" | 455 LoadHTML("<html><head><meta http-equiv=\"content-language\" content=\"fr\">" |
| 456 "</head><body>This page is in French.</body></html>"); | 456 "</head><body>This page is in French.</body></html>"); |
| 457 message = render_thread_->sink().GetUniqueMessageMatching( | 457 message = render_thread_->sink().GetUniqueMessageMatching( |
| 458 ChromeViewHostMsg_TranslateLanguageDetermined::ID); | 458 ChromeViewHostMsg_TranslateLanguageDetermined::ID); |
| 459 ASSERT_NE(static_cast<IPC::Message*>(NULL), message); | 459 ASSERT_NE(static_cast<IPC::Message*>(NULL), message); |
| 460 ChromeViewHostMsg_TranslateLanguageDetermined::Read(message, ¶ms); | 460 ChromeViewHostMsg_TranslateLanguageDetermined::Read(message, ¶ms); |
| 461 EXPECT_EQ("fr", params.a.adopted_language); | 461 EXPECT_EQ("fr", get<0>(params).adopted_language); |
| 462 render_thread_->sink().ClearMessages(); | 462 render_thread_->sink().ClearMessages(); |
| 463 | 463 |
| 464 GoBack(back_state); | 464 GoBack(back_state); |
| 465 | 465 |
| 466 message = render_thread_->sink().GetUniqueMessageMatching( | 466 message = render_thread_->sink().GetUniqueMessageMatching( |
| 467 ChromeViewHostMsg_TranslateLanguageDetermined::ID); | 467 ChromeViewHostMsg_TranslateLanguageDetermined::ID); |
| 468 ASSERT_NE(static_cast<IPC::Message*>(NULL), message); | 468 ASSERT_NE(static_cast<IPC::Message*>(NULL), message); |
| 469 ChromeViewHostMsg_TranslateLanguageDetermined::Read(message, ¶ms); | 469 ChromeViewHostMsg_TranslateLanguageDetermined::Read(message, ¶ms); |
| 470 EXPECT_EQ("zh", params.a.adopted_language); | 470 EXPECT_EQ("zh", get<0>(params).adopted_language); |
| 471 render_thread_->sink().ClearMessages(); | 471 render_thread_->sink().ClearMessages(); |
| 472 } | 472 } |
| OLD | NEW |