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 |