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