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 |