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