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 |