OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 <stddef.h> | 5 #include <stddef.h> |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <memory> | 8 #include <memory> |
9 #include <set> | 9 #include <set> |
10 #include <tuple> | 10 #include <tuple> |
(...skipping 18 matching lines...) Expand all Loading... |
29 #include "chrome/common/chrome_switches.h" | 29 #include "chrome/common/chrome_switches.h" |
30 #include "chrome/common/pref_names.h" | 30 #include "chrome/common/pref_names.h" |
31 #include "chrome/common/url_constants.h" | 31 #include "chrome/common/url_constants.h" |
32 #include "chrome/test/base/chrome_render_view_host_test_harness.h" | 32 #include "chrome/test/base/chrome_render_view_host_test_harness.h" |
33 #include "chrome/test/base/testing_browser_process.h" | 33 #include "chrome/test/base/testing_browser_process.h" |
34 #include "chrome/test/base/testing_profile.h" | 34 #include "chrome/test/base/testing_profile.h" |
35 #include "components/infobars/core/infobar.h" | 35 #include "components/infobars/core/infobar.h" |
36 #include "components/prefs/pref_change_registrar.h" | 36 #include "components/prefs/pref_change_registrar.h" |
37 #include "components/prefs/pref_service.h" | 37 #include "components/prefs/pref_service.h" |
38 #include "components/translate/content/browser/content_translate_driver.h" | 38 #include "components/translate/content/browser/content_translate_driver.h" |
39 #include "components/translate/content/common/translate_messages.h" | 39 #include "components/translate/content/common/translate.mojom.h" |
40 #include "components/translate/core/browser/translate_accept_languages.h" | 40 #include "components/translate/core/browser/translate_accept_languages.h" |
41 #include "components/translate/core/browser/translate_download_manager.h" | 41 #include "components/translate/core/browser/translate_download_manager.h" |
42 #include "components/translate/core/browser/translate_language_list.h" | 42 #include "components/translate/core/browser/translate_language_list.h" |
43 #include "components/translate/core/browser/translate_manager.h" | 43 #include "components/translate/core/browser/translate_manager.h" |
44 #include "components/translate/core/browser/translate_prefs.h" | 44 #include "components/translate/core/browser/translate_prefs.h" |
45 #include "components/translate/core/browser/translate_script.h" | 45 #include "components/translate/core/browser/translate_script.h" |
46 #include "components/translate/core/browser/translate_ui_delegate.h" | 46 #include "components/translate/core/browser/translate_ui_delegate.h" |
47 #include "components/translate/core/common/language_detection_details.h" | 47 #include "components/translate/core/common/language_detection_details.h" |
48 #include "components/translate/core/common/translate_pref_names.h" | 48 #include "components/translate/core/common/translate_pref_names.h" |
49 #include "content/public/browser/navigation_details.h" | 49 #include "content/public/browser/navigation_details.h" |
50 #include "content/public/browser/navigation_entry.h" | 50 #include "content/public/browser/navigation_entry.h" |
51 #include "content/public/browser/notification_details.h" | 51 #include "content/public/browser/notification_details.h" |
52 #include "content/public/browser/notification_registrar.h" | 52 #include "content/public/browser/notification_registrar.h" |
53 #include "content/public/browser/web_contents.h" | 53 #include "content/public/browser/web_contents.h" |
54 #include "content/public/common/url_constants.h" | 54 #include "content/public/common/url_constants.h" |
55 #include "content/public/test/mock_render_process_host.h" | |
56 #include "content/public/test/test_renderer_host.h" | 55 #include "content/public/test/test_renderer_host.h" |
| 56 #include "mojo/public/cpp/bindings/binding.h" |
57 #include "net/base/net_errors.h" | 57 #include "net/base/net_errors.h" |
58 #include "net/url_request/test_url_fetcher_factory.h" | 58 #include "net/url_request/test_url_fetcher_factory.h" |
59 #include "net/url_request/url_fetcher_delegate.h" | 59 #include "net/url_request/url_fetcher_delegate.h" |
60 #include "net/url_request/url_request_status.h" | 60 #include "net/url_request/url_request_status.h" |
61 #include "testing/gmock/include/gmock/gmock.h" | 61 #include "testing/gmock/include/gmock/gmock.h" |
62 #include "third_party/WebKit/public/web/WebContextMenuData.h" | 62 #include "third_party/WebKit/public/web/WebContextMenuData.h" |
63 #include "url/gurl.h" | 63 #include "url/gurl.h" |
64 | 64 |
65 #if !defined(USE_AURA) | 65 #if !defined(USE_AURA) |
66 #include "components/translate/core/browser/translate_infobar_delegate.h" | 66 #include "components/translate/core/browser/translate_infobar_delegate.h" |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
108 } | 108 } |
109 | 109 |
110 TranslateBubbleModel* model() { return model_.get(); } | 110 TranslateBubbleModel* model() { return model_.get(); } |
111 | 111 |
112 private: | 112 private: |
113 std::unique_ptr<TranslateBubbleModel> model_; | 113 std::unique_ptr<TranslateBubbleModel> model_; |
114 | 114 |
115 DISALLOW_COPY_AND_ASSIGN(MockTranslateBubbleFactory); | 115 DISALLOW_COPY_AND_ASSIGN(MockTranslateBubbleFactory); |
116 }; | 116 }; |
117 | 117 |
| 118 class FakePageImpl : public translate::mojom::Page { |
| 119 public: |
| 120 FakePageImpl() |
| 121 : called_translate_(false), |
| 122 called_revert_translation_(false), |
| 123 binding_(this) {} |
| 124 ~FakePageImpl() override {} |
| 125 |
| 126 translate::mojom::PagePtr BindToNewPagePtr() { |
| 127 binding_.Close(); |
| 128 translate_callback_pending_.Reset(); |
| 129 return binding_.CreateInterfacePtrAndBind(); |
| 130 } |
| 131 |
| 132 // translate::mojom::Page implementation. |
| 133 void Translate(const std::string& translate_script, |
| 134 const std::string& source_lang, |
| 135 const std::string& target_lang, |
| 136 const TranslateCallback& callback) override { |
| 137 // Ensure pending callback gets called. |
| 138 if (translate_callback_pending_) { |
| 139 translate_callback_pending_.Run(true, "", "", |
| 140 translate::TranslateErrors::NONE); |
| 141 translate_callback_pending_.Reset(); |
| 142 } |
| 143 |
| 144 called_translate_ = true; |
| 145 source_lang_ = source_lang; |
| 146 target_lang_ = target_lang; |
| 147 |
| 148 translate_callback_pending_ = callback; |
| 149 } |
| 150 |
| 151 void RevertTranslation() override { called_revert_translation_ = true; } |
| 152 |
| 153 void PageTranslated(bool cancelled, |
| 154 const std::string& source_lang, |
| 155 const std::string& target_lang, |
| 156 translate::TranslateErrors::Type error) { |
| 157 translate_callback_pending_.Run(cancelled, source_lang, target_lang, error); |
| 158 translate_callback_pending_.Reset(); |
| 159 } |
| 160 |
| 161 bool called_translate_; |
| 162 base::Optional<std::string> source_lang_; |
| 163 base::Optional<std::string> target_lang_; |
| 164 bool called_revert_translation_; |
| 165 |
| 166 private: |
| 167 TranslateCallback translate_callback_pending_; |
| 168 |
| 169 mojo::Binding<translate::mojom::Page> binding_; |
| 170 |
| 171 DISALLOW_COPY_AND_ASSIGN(FakePageImpl); |
| 172 }; |
| 173 |
118 } // namespace | 174 } // namespace |
119 | 175 |
120 // An observer that keeps track of whether a navigation entry was committed. | 176 // An observer that keeps track of whether a navigation entry was committed. |
121 class NavEntryCommittedObserver : public content::NotificationObserver { | 177 class NavEntryCommittedObserver : public content::NotificationObserver { |
122 public: | 178 public: |
123 explicit NavEntryCommittedObserver(content::WebContents* web_contents) { | 179 explicit NavEntryCommittedObserver(content::WebContents* web_contents) { |
124 registrar_.Add(this, | 180 registrar_.Add(this, |
125 content::NOTIFICATION_NAV_ENTRY_COMMITTED, | 181 content::NOTIFICATION_NAV_ENTRY_COMMITTED, |
126 content::Source<content::NavigationController>( | 182 content::Source<content::NavigationController>( |
127 &web_contents->GetController())); | 183 &web_contents->GetController())); |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
231 Reload(); | 287 Reload(); |
232 else | 288 else |
233 NavigateAndCommit(url); | 289 NavigateAndCommit(url); |
234 SimulateOnTranslateLanguageDetermined(lang, page_translatable); | 290 SimulateOnTranslateLanguageDetermined(lang, page_translatable); |
235 } | 291 } |
236 | 292 |
237 void SimulateOnTranslateLanguageDetermined(const std::string& lang, | 293 void SimulateOnTranslateLanguageDetermined(const std::string& lang, |
238 bool page_translatable) { | 294 bool page_translatable) { |
239 translate::LanguageDetectionDetails details; | 295 translate::LanguageDetectionDetails details; |
240 details.adopted_language = lang; | 296 details.adopted_language = lang; |
241 main_rfh()->OnMessageReceived( | 297 ChromeTranslateClient::FromWebContents(web_contents()) |
242 ChromeFrameHostMsg_TranslateLanguageDetermined(0, details, | 298 ->translate_driver() |
243 page_translatable)); | 299 .RegisterPage(fake_page_.BindToNewPagePtr(), details, |
| 300 page_translatable); |
244 } | 301 } |
245 | 302 |
246 void SimulateOnPageTranslated(int routing_id, | 303 void SimulateOnPageTranslated(const std::string& source_lang, |
247 const std::string& source_lang, | |
248 const std::string& target_lang, | 304 const std::string& target_lang, |
249 translate::TranslateErrors::Type error) { | 305 translate::TranslateErrors::Type error) { |
250 main_rfh()->OnMessageReceived(ChromeFrameHostMsg_PageTranslated( | 306 // Ensure fake_page_ Translate() call gets dispatched. |
251 routing_id, source_lang, target_lang, error)); | 307 base::RunLoop().RunUntilIdle(); |
| 308 |
| 309 fake_page_.PageTranslated(false, source_lang, target_lang, error); |
| 310 |
| 311 // Ensure fake_page_ Translate() response callback gets dispatched. |
| 312 base::RunLoop().RunUntilIdle(); |
252 } | 313 } |
253 | 314 |
254 void SimulateOnPageTranslated(const std::string& source_lang, | 315 void SimulateOnPageTranslated(const std::string& source_lang, |
255 const std::string& target_lang) { | 316 const std::string& target_lang) { |
256 SimulateOnPageTranslated( | 317 SimulateOnPageTranslated(source_lang, target_lang, |
257 0, source_lang, target_lang, translate::TranslateErrors::NONE); | 318 translate::TranslateErrors::NONE); |
258 } | 319 } |
259 | 320 |
260 bool GetTranslateMessage(std::string* original_lang, | 321 bool GetTranslateMessage(std::string* original_lang, |
261 std::string* target_lang) { | 322 std::string* target_lang) { |
262 const IPC::Message* message = process()->sink().GetFirstMessageMatching( | 323 base::RunLoop().RunUntilIdle(); |
263 ChromeFrameMsg_TranslatePage::ID); | 324 |
264 if (!message) | 325 if (!fake_page_.called_translate_) |
265 return false; | 326 return false; |
266 std::tuple<int, std::string, std::string, std::string> translate_param; | 327 EXPECT_TRUE(fake_page_.source_lang_); |
267 ChromeFrameMsg_TranslatePage::Read(message, &translate_param); | 328 EXPECT_TRUE(fake_page_.target_lang_); |
268 // Ignore get<0>(translate_param) which is the page seq no. | 329 |
269 // Ignore get<1>(translate_param) which is the script injected in the page. | |
270 if (original_lang) | 330 if (original_lang) |
271 *original_lang = std::get<2>(translate_param); | 331 *original_lang = *fake_page_.source_lang_; |
272 if (target_lang) | 332 if (target_lang) |
273 *target_lang = std::get<3>(translate_param); | 333 *target_lang = *fake_page_.target_lang_; |
| 334 |
| 335 // Reset |
| 336 fake_page_.called_translate_ = false; |
| 337 fake_page_.source_lang_ = base::nullopt; |
| 338 fake_page_.target_lang_ = base::nullopt; |
| 339 |
274 return true; | 340 return true; |
275 } | 341 } |
276 | 342 |
| 343 bool IsTranslationReverted() { |
| 344 base::RunLoop().RunUntilIdle(); |
| 345 return fake_page_.called_revert_translation_; |
| 346 } |
| 347 |
277 InfoBarService* infobar_service() { | 348 InfoBarService* infobar_service() { |
278 return InfoBarService::FromWebContents(web_contents()); | 349 return InfoBarService::FromWebContents(web_contents()); |
279 } | 350 } |
280 | 351 |
281 #if !defined(USE_AURA) | 352 #if !defined(USE_AURA) |
282 // Returns the translate infobar if there is 1 infobar and it is a translate | 353 // Returns the translate infobar if there is 1 infobar and it is a translate |
283 // infobar. | 354 // infobar. |
284 translate::TranslateInfoBarDelegate* GetTranslateInfoBar() { | 355 translate::TranslateInfoBarDelegate* GetTranslateInfoBar() { |
285 return (infobar_service()->infobar_count() == 1) ? | 356 return (infobar_service()->infobar_count() == 1) ? |
286 infobar_service()->infobar_at(0)->delegate()-> | 357 infobar_service()->infobar_at(0)->delegate()-> |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
397 ->translate_driver() | 468 ->translate_driver() |
398 .set_translate_max_reload_attempts(0); | 469 .set_translate_max_reload_attempts(0); |
399 | 470 |
400 notification_registrar_.Add( | 471 notification_registrar_.Add( |
401 this, | 472 this, |
402 chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_REMOVED, | 473 chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_REMOVED, |
403 content::Source<InfoBarService>(infobar_service())); | 474 content::Source<InfoBarService>(infobar_service())); |
404 } | 475 } |
405 | 476 |
406 virtual void TearDown() { | 477 virtual void TearDown() { |
407 process()->sink().ClearMessages(); | |
408 | |
409 notification_registrar_.Remove( | 478 notification_registrar_.Remove( |
410 this, | 479 this, |
411 chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_REMOVED, | 480 chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_REMOVED, |
412 content::Source<InfoBarService>(infobar_service())); | 481 content::Source<InfoBarService>(infobar_service())); |
413 | 482 |
414 ChromeRenderViewHostTestHarness::TearDown(); | 483 ChromeRenderViewHostTestHarness::TearDown(); |
415 TranslateService::ShutdownForTesting(); | 484 TranslateService::ShutdownForTesting(); |
416 } | 485 } |
417 | 486 |
418 void SetApplicationLocale(const std::string& locale) { | 487 void SetApplicationLocale(const std::string& locale) { |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
485 | 554 |
486 private: | 555 private: |
487 content::NotificationRegistrar notification_registrar_; | 556 content::NotificationRegistrar notification_registrar_; |
488 net::TestURLFetcherFactory url_fetcher_factory_; | 557 net::TestURLFetcherFactory url_fetcher_factory_; |
489 | 558 |
490 // The infobars that have been removed. | 559 // The infobars that have been removed. |
491 // WARNING: the pointers point to deleted objects, use only for comparison. | 560 // WARNING: the pointers point to deleted objects, use only for comparison. |
492 std::set<infobars::InfoBarDelegate*> removed_infobars_; | 561 std::set<infobars::InfoBarDelegate*> removed_infobars_; |
493 | 562 |
494 std::unique_ptr<MockTranslateBubbleFactory> bubble_factory_; | 563 std::unique_ptr<MockTranslateBubbleFactory> bubble_factory_; |
| 564 FakePageImpl fake_page_; |
| 565 |
495 DISALLOW_COPY_AND_ASSIGN(TranslateManagerRenderViewHostTest); | 566 DISALLOW_COPY_AND_ASSIGN(TranslateManagerRenderViewHostTest); |
496 }; | 567 }; |
497 | 568 |
498 | 569 |
499 // A list of languages to fake being returned by the translate server. | 570 // A list of languages to fake being returned by the translate server. |
500 // Use only langauges for which Chrome's copy of ICU has | 571 // Use only langauges for which Chrome's copy of ICU has |
501 // display names in English locale. To save space, Chrome's copy of ICU | 572 // display names in English locale. To save space, Chrome's copy of ICU |
502 // does not have the display name for a language unless it's in the | 573 // does not have the display name for a language unless it's in the |
503 // Accept-Language list. | 574 // Accept-Language list. |
504 static const char* server_language_list[] = | 575 static const char* server_language_list[] = |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
614 | 685 |
615 SimulateNavigation(GURL("http://www.google.fr"), "fr", true); | 686 SimulateNavigation(GURL("http://www.google.fr"), "fr", true); |
616 | 687 |
617 // We should have an infobar. | 688 // We should have an infobar. |
618 translate::TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); | 689 translate::TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); |
619 ASSERT_TRUE(infobar != NULL); | 690 ASSERT_TRUE(infobar != NULL); |
620 EXPECT_EQ(translate::TRANSLATE_STEP_BEFORE_TRANSLATE, | 691 EXPECT_EQ(translate::TRANSLATE_STEP_BEFORE_TRANSLATE, |
621 infobar->translate_step()); | 692 infobar->translate_step()); |
622 | 693 |
623 // Simulate clicking translate. | 694 // Simulate clicking translate. |
624 process()->sink().ClearMessages(); | |
625 infobar->Translate(); | 695 infobar->Translate(); |
626 | 696 |
627 // The "Translating..." infobar should be showing. | 697 // The "Translating..." infobar should be showing. |
628 infobar = GetTranslateInfoBar(); | 698 infobar = GetTranslateInfoBar(); |
629 ASSERT_TRUE(infobar != NULL); | 699 ASSERT_TRUE(infobar != NULL); |
630 EXPECT_EQ(translate::TRANSLATE_STEP_TRANSLATING, infobar->translate_step()); | 700 EXPECT_EQ(translate::TRANSLATE_STEP_TRANSLATING, infobar->translate_step()); |
631 | 701 |
632 // Simulate the translate script being retrieved (it only needs to be done | 702 // Simulate the translate script being retrieved (it only needs to be done |
633 // once in the test as it is cached). | 703 // once in the test as it is cached). |
634 SimulateTranslateScriptURLFetch(true); | 704 SimulateTranslateScriptURLFetch(true); |
635 | 705 |
636 // Test that we sent the right message to the renderer. | 706 // Test that we sent the right message to the renderer. |
637 std::string original_lang, target_lang; | 707 std::string original_lang, target_lang; |
638 EXPECT_TRUE(GetTranslateMessage(&original_lang, &target_lang)); | 708 EXPECT_TRUE(GetTranslateMessage(&original_lang, &target_lang)); |
639 EXPECT_EQ("fr", original_lang); | 709 EXPECT_EQ("fr", original_lang); |
640 EXPECT_EQ("en", target_lang); | 710 EXPECT_EQ("en", target_lang); |
641 | 711 |
642 // Simulate the render notifying the translation has been done. | 712 // Simulate the render notifying the translation has been done. |
643 SimulateOnPageTranslated("fr", "en"); | 713 SimulateOnPageTranslated("fr", "en"); |
644 | 714 |
645 // The after translate infobar should be showing. | 715 // The after translate infobar should be showing. |
646 infobar = GetTranslateInfoBar(); | 716 infobar = GetTranslateInfoBar(); |
647 ASSERT_TRUE(infobar != NULL); | 717 ASSERT_TRUE(infobar != NULL); |
648 EXPECT_EQ(translate::TRANSLATE_STEP_AFTER_TRANSLATE, | 718 EXPECT_EQ(translate::TRANSLATE_STEP_AFTER_TRANSLATE, |
649 infobar->translate_step()); | 719 infobar->translate_step()); |
650 | 720 |
651 // Simulate changing the original language and translating. | 721 // Simulate changing the original language and translating. |
652 process()->sink().ClearMessages(); | |
653 std::string new_original_lang = infobar->language_code_at(0); | 722 std::string new_original_lang = infobar->language_code_at(0); |
654 infobar->UpdateOriginalLanguage(new_original_lang); | 723 infobar->UpdateOriginalLanguage(new_original_lang); |
655 infobar->Translate(); | 724 infobar->Translate(); |
656 EXPECT_TRUE(GetTranslateMessage(&original_lang, &target_lang)); | 725 EXPECT_TRUE(GetTranslateMessage(&original_lang, &target_lang)); |
657 EXPECT_EQ(new_original_lang, original_lang); | 726 EXPECT_EQ(new_original_lang, original_lang); |
658 EXPECT_EQ("en", target_lang); | 727 EXPECT_EQ("en", target_lang); |
659 // Simulate the render notifying the translation has been done. | 728 // Simulate the render notifying the translation has been done. |
660 SimulateOnPageTranslated(new_original_lang, "en"); | 729 SimulateOnPageTranslated(new_original_lang, "en"); |
661 infobar = GetTranslateInfoBar(); | 730 infobar = GetTranslateInfoBar(); |
662 ASSERT_TRUE(infobar != NULL); | 731 ASSERT_TRUE(infobar != NULL); |
663 | 732 |
664 // Simulate changing the target language and translating. | 733 // Simulate changing the target language and translating. |
665 process()->sink().ClearMessages(); | |
666 std::string new_target_lang = infobar->language_code_at(1); | 734 std::string new_target_lang = infobar->language_code_at(1); |
667 infobar->UpdateTargetLanguage(new_target_lang); | 735 infobar->UpdateTargetLanguage(new_target_lang); |
668 infobar->Translate(); | 736 infobar->Translate(); |
669 EXPECT_TRUE(GetTranslateMessage(&original_lang, &target_lang)); | 737 EXPECT_TRUE(GetTranslateMessage(&original_lang, &target_lang)); |
670 EXPECT_EQ(new_original_lang, original_lang); | 738 EXPECT_EQ(new_original_lang, original_lang); |
671 EXPECT_EQ(new_target_lang, target_lang); | 739 EXPECT_EQ(new_target_lang, target_lang); |
672 // Simulate the render notifying the translation has been done. | 740 // Simulate the render notifying the translation has been done. |
673 SimulateOnPageTranslated(new_original_lang, new_target_lang); | 741 SimulateOnPageTranslated(new_original_lang, new_target_lang); |
674 infobar = GetTranslateInfoBar(); | 742 infobar = GetTranslateInfoBar(); |
675 ASSERT_TRUE(infobar != NULL); | 743 ASSERT_TRUE(infobar != NULL); |
(...skipping 21 matching lines...) Expand all Loading... |
697 | 765 |
698 SimulateNavigation(GURL("http://www.google.fr"), "fr", true); | 766 SimulateNavigation(GURL("http://www.google.fr"), "fr", true); |
699 | 767 |
700 // We should have an infobar. | 768 // We should have an infobar. |
701 translate::TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); | 769 translate::TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); |
702 ASSERT_TRUE(infobar != NULL); | 770 ASSERT_TRUE(infobar != NULL); |
703 EXPECT_EQ(translate::TRANSLATE_STEP_BEFORE_TRANSLATE, | 771 EXPECT_EQ(translate::TRANSLATE_STEP_BEFORE_TRANSLATE, |
704 infobar->translate_step()); | 772 infobar->translate_step()); |
705 | 773 |
706 // Simulate clicking translate. | 774 // Simulate clicking translate. |
707 process()->sink().ClearMessages(); | |
708 infobar->Translate(); | 775 infobar->Translate(); |
709 SimulateTranslateScriptURLFetch(false); | 776 SimulateTranslateScriptURLFetch(false); |
710 | 777 |
711 // We should not have sent any message to translate to the renderer. | 778 // We should not have sent any message to translate to the renderer. |
712 EXPECT_FALSE(GetTranslateMessage(NULL, NULL)); | 779 EXPECT_FALSE(GetTranslateMessage(NULL, NULL)); |
713 | 780 |
714 // And we should have an error infobar showing. | 781 // And we should have an error infobar showing. |
715 infobar = GetTranslateInfoBar(); | 782 infobar = GetTranslateInfoBar(); |
716 ASSERT_TRUE(infobar != NULL); | 783 ASSERT_TRUE(infobar != NULL); |
717 EXPECT_EQ(translate::TRANSLATE_STEP_TRANSLATE_ERROR, | 784 EXPECT_EQ(translate::TRANSLATE_STEP_TRANSLATE_ERROR, |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
759 infobar->translate_step()); | 826 infobar->translate_step()); |
760 EXPECT_EQ("fr", infobar->original_language_code()); | 827 EXPECT_EQ("fr", infobar->original_language_code()); |
761 EXPECT_EQ("en", infobar->target_language_code()); | 828 EXPECT_EQ("en", infobar->target_language_code()); |
762 | 829 |
763 // Let's run the same steps but this time the server detects the page is | 830 // Let's run the same steps but this time the server detects the page is |
764 // already in English. | 831 // already in English. |
765 SimulateNavigation(GURL("http://www.google.com"), "und", true); | 832 SimulateNavigation(GURL("http://www.google.com"), "und", true); |
766 menu.reset(CreateContextMenu()); | 833 menu.reset(CreateContextMenu()); |
767 menu->Init(); | 834 menu->Init(); |
768 menu->ExecuteCommand(IDC_CONTENT_CONTEXT_TRANSLATE, 0); | 835 menu->ExecuteCommand(IDC_CONTENT_CONTEXT_TRANSLATE, 0); |
769 SimulateOnPageTranslated( | 836 SimulateOnPageTranslated("en", "en", |
770 1, "en", "en", translate::TranslateErrors::IDENTICAL_LANGUAGES); | 837 translate::TranslateErrors::IDENTICAL_LANGUAGES); |
771 infobar = GetTranslateInfoBar(); | 838 infobar = GetTranslateInfoBar(); |
772 ASSERT_TRUE(infobar != NULL); | 839 ASSERT_TRUE(infobar != NULL); |
773 EXPECT_EQ(translate::TRANSLATE_STEP_TRANSLATE_ERROR, | 840 EXPECT_EQ(translate::TRANSLATE_STEP_TRANSLATE_ERROR, |
774 infobar->translate_step()); | 841 infobar->translate_step()); |
775 EXPECT_EQ(translate::TranslateErrors::IDENTICAL_LANGUAGES, | 842 EXPECT_EQ(translate::TranslateErrors::IDENTICAL_LANGUAGES, |
776 infobar->error_type()); | 843 infobar->error_type()); |
777 | 844 |
778 // Let's run the same steps again but this time the server fails to detect the | 845 // Let's run the same steps again but this time the server fails to detect the |
779 // page's language (it returns an empty string). | 846 // page's language (it returns an empty string). |
780 SimulateNavigation(GURL("http://www.google.com"), "und", true); | 847 SimulateNavigation(GURL("http://www.google.com"), "und", true); |
781 menu.reset(CreateContextMenu()); | 848 menu.reset(CreateContextMenu()); |
782 menu->Init(); | 849 menu->Init(); |
783 menu->ExecuteCommand(IDC_CONTENT_CONTEXT_TRANSLATE, 0); | 850 menu->ExecuteCommand(IDC_CONTENT_CONTEXT_TRANSLATE, 0); |
784 SimulateOnPageTranslated( | 851 SimulateOnPageTranslated(std::string(), "en", |
785 2, std::string(), "en", translate::TranslateErrors::UNKNOWN_LANGUAGE); | 852 translate::TranslateErrors::UNKNOWN_LANGUAGE); |
786 infobar = GetTranslateInfoBar(); | 853 infobar = GetTranslateInfoBar(); |
787 ASSERT_TRUE(infobar != NULL); | 854 ASSERT_TRUE(infobar != NULL); |
788 EXPECT_EQ(translate::TRANSLATE_STEP_TRANSLATE_ERROR, | 855 EXPECT_EQ(translate::TRANSLATE_STEP_TRANSLATE_ERROR, |
789 infobar->translate_step()); | 856 infobar->translate_step()); |
790 EXPECT_EQ(translate::TranslateErrors::UNKNOWN_LANGUAGE, | 857 EXPECT_EQ(translate::TranslateErrors::UNKNOWN_LANGUAGE, |
791 infobar->error_type()); | 858 infobar->error_type()); |
792 } | 859 } |
793 | 860 |
794 // Tests that we show/don't show an info-bar for the languages. | 861 // Tests that we show/don't show an info-bar for the languages. |
795 TEST_F(TranslateManagerRenderViewHostTest, TestLanguages) { | 862 TEST_F(TranslateManagerRenderViewHostTest, TestLanguages) { |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
836 TEST_F(TranslateManagerRenderViewHostTest, AutoTranslateOnNavigate) { | 903 TEST_F(TranslateManagerRenderViewHostTest, AutoTranslateOnNavigate) { |
837 EnableBubbleTest(); | 904 EnableBubbleTest(); |
838 | 905 |
839 SimulateNavigation(GURL("http://www.google.fr"), "fr", true); | 906 SimulateNavigation(GURL("http://www.google.fr"), "fr", true); |
840 | 907 |
841 SimulateTranslatePress(); | 908 SimulateTranslatePress(); |
842 SimulateTranslateScriptURLFetch(true); | 909 SimulateTranslateScriptURLFetch(true); |
843 SimulateOnPageTranslated("fr", "en"); | 910 SimulateOnPageTranslated("fr", "en"); |
844 | 911 |
845 // Now navigate to a new page in the same language. | 912 // Now navigate to a new page in the same language. |
846 process()->sink().ClearMessages(); | |
847 SimulateNavigation(GURL("http://news.google.fr"), "fr", true); | 913 SimulateNavigation(GURL("http://news.google.fr"), "fr", true); |
848 | 914 |
849 // This should have automatically triggered a translation. | 915 // This should have automatically triggered a translation. |
850 std::string original_lang, target_lang; | 916 std::string original_lang, target_lang; |
851 EXPECT_TRUE(GetTranslateMessage(&original_lang, &target_lang)); | 917 EXPECT_TRUE(GetTranslateMessage(&original_lang, &target_lang)); |
852 EXPECT_EQ("fr", original_lang); | 918 EXPECT_EQ("fr", original_lang); |
853 EXPECT_EQ("en", target_lang); | 919 EXPECT_EQ("en", target_lang); |
854 | 920 |
855 // Now navigate to a page in a different language. | 921 // Now navigate to a page in a different language. |
856 process()->sink().ClearMessages(); | |
857 SimulateNavigation(GURL("http://news.google.es"), "es", true); | 922 SimulateNavigation(GURL("http://news.google.es"), "es", true); |
858 | 923 |
859 // This should not have triggered a translate. | 924 // This should not have triggered a translate. |
860 EXPECT_FALSE(GetTranslateMessage(&original_lang, &target_lang)); | 925 EXPECT_FALSE(GetTranslateMessage(&original_lang, &target_lang)); |
861 } | 926 } |
862 | 927 |
863 // Tests that multiple OnPageContents do not cause multiple infobars. | 928 // Tests that multiple OnPageContents do not cause multiple infobars. |
864 TEST_F(TranslateManagerRenderViewHostTest, MultipleOnPageContents) { | 929 TEST_F(TranslateManagerRenderViewHostTest, MultipleOnPageContents) { |
865 EnableBubbleTest(); | 930 EnableBubbleTest(); |
866 | 931 |
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1090 EXPECT_FALSE(TranslateUiVisible()); | 1155 EXPECT_FALSE(TranslateUiVisible()); |
1091 } | 1156 } |
1092 | 1157 |
1093 // Tests that we deal correctly with unsupported languages returned by the | 1158 // Tests that we deal correctly with unsupported languages returned by the |
1094 // server. | 1159 // server. |
1095 // The translation server might return a language we don't support. | 1160 // The translation server might return a language we don't support. |
1096 TEST_F(TranslateManagerRenderViewHostTest, ServerReportsUnsupportedLanguage) { | 1161 TEST_F(TranslateManagerRenderViewHostTest, ServerReportsUnsupportedLanguage) { |
1097 EnableBubbleTest(); | 1162 EnableBubbleTest(); |
1098 | 1163 |
1099 SimulateNavigation(GURL("http://mail.google.fr"), "fr", true); | 1164 SimulateNavigation(GURL("http://mail.google.fr"), "fr", true); |
1100 process()->sink().ClearMessages(); | |
1101 SimulateTranslatePress(); | 1165 SimulateTranslatePress(); |
1102 SimulateTranslateScriptURLFetch(true); | 1166 SimulateTranslateScriptURLFetch(true); |
1103 // Simulate the render notifying the translation has been done, but it | 1167 // Simulate the render notifying the translation has been done, but it |
1104 // reports a language we don't support. | 1168 // reports a language we don't support. |
1105 SimulateOnPageTranslated("qbz", "en"); | 1169 SimulateOnPageTranslated("qbz", "en"); |
1106 | 1170 |
1107 // An error infobar should be showing to report that we don't support this | 1171 // An error infobar should be showing to report that we don't support this |
1108 // language. | 1172 // language. |
1109 EXPECT_EQ(translate::TRANSLATE_STEP_TRANSLATE_ERROR, CurrentStep()); | 1173 EXPECT_EQ(translate::TRANSLATE_STEP_TRANSLATE_ERROR, CurrentStep()); |
1110 | 1174 |
1111 // This infobar should have a button (so the string should not be empty). | 1175 // This infobar should have a button (so the string should not be empty). |
1112 // The error string on bubbles is currently not retrievable. | 1176 // The error string on bubbles is currently not retrievable. |
1113 // TODO(http://crbug.com/589301): OSX does not have an error view (yet). | 1177 // TODO(http://crbug.com/589301): OSX does not have an error view (yet). |
1114 if (!TranslateService::IsTranslateBubbleEnabled()) { | 1178 if (!TranslateService::IsTranslateBubbleEnabled()) { |
1115 translate::TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); | 1179 translate::TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); |
1116 ASSERT_TRUE(infobar); | 1180 ASSERT_TRUE(infobar); |
1117 ASSERT_FALSE(infobar->GetMessageInfoBarButtonText().empty()); | 1181 ASSERT_FALSE(infobar->GetMessageInfoBarButtonText().empty()); |
1118 | 1182 |
1119 // Pressing the button on that infobar should revert to the original | 1183 // Pressing the button on that infobar should revert to the original |
1120 // language. | 1184 // language. |
1121 process()->sink().ClearMessages(); | |
1122 infobar->MessageInfoBarButtonPressed(); | 1185 infobar->MessageInfoBarButtonPressed(); |
1123 const IPC::Message* message = process()->sink().GetFirstMessageMatching( | 1186 EXPECT_TRUE(IsTranslationReverted()); |
1124 ChromeFrameMsg_RevertTranslation::ID); | |
1125 EXPECT_TRUE(message != NULL); | |
1126 // And it should have removed the infobar. | 1187 // And it should have removed the infobar. |
1127 EXPECT_TRUE(GetTranslateInfoBar() == NULL); | 1188 EXPECT_TRUE(GetTranslateInfoBar() == NULL); |
1128 } | 1189 } |
1129 } | 1190 } |
1130 | 1191 |
1131 // Tests that no translate infobar is shown and context menu is disabled, when | 1192 // Tests that no translate infobar is shown and context menu is disabled, when |
1132 // Chrome is in a language that the translate server does not support. | 1193 // Chrome is in a language that the translate server does not support. |
1133 TEST_F(TranslateManagerRenderViewHostTest, UnsupportedUILanguage) { | 1194 TEST_F(TranslateManagerRenderViewHostTest, UnsupportedUILanguage) { |
1134 // TODO(port): Test corresponding bubble translate UX: http://crbug.com/383235 | 1195 // TODO(port): Test corresponding bubble translate UX: http://crbug.com/383235 |
1135 if (TranslateService::IsTranslateBubbleEnabled()) | 1196 if (TranslateService::IsTranslateBubbleEnabled()) |
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1366 | 1427 |
1367 // The translating infobar should be showing. | 1428 // The translating infobar should be showing. |
1368 translate::TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); | 1429 translate::TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); |
1369 ASSERT_TRUE(infobar != NULL); | 1430 ASSERT_TRUE(infobar != NULL); |
1370 EXPECT_EQ(translate::TRANSLATE_STEP_TRANSLATING, infobar->translate_step()); | 1431 EXPECT_EQ(translate::TRANSLATE_STEP_TRANSLATING, infobar->translate_step()); |
1371 SimulateTranslateScriptURLFetch(true); | 1432 SimulateTranslateScriptURLFetch(true); |
1372 std::string original_lang, target_lang; | 1433 std::string original_lang, target_lang; |
1373 EXPECT_TRUE(GetTranslateMessage(&original_lang, &target_lang)); | 1434 EXPECT_TRUE(GetTranslateMessage(&original_lang, &target_lang)); |
1374 EXPECT_EQ("fr", original_lang); | 1435 EXPECT_EQ("fr", original_lang); |
1375 EXPECT_EQ("en", target_lang); | 1436 EXPECT_EQ("en", target_lang); |
1376 process()->sink().ClearMessages(); | |
1377 | 1437 |
1378 // Try another language, it should not be autotranslated. | 1438 // Try another language, it should not be autotranslated. |
1379 SimulateNavigation(GURL("http://www.google.es"), "es", true); | 1439 SimulateNavigation(GURL("http://www.google.es"), "es", true); |
1380 EXPECT_FALSE(GetTranslateMessage(&original_lang, &target_lang)); | 1440 EXPECT_FALSE(GetTranslateMessage(&original_lang, &target_lang)); |
1381 EXPECT_TRUE(GetTranslateInfoBar() != NULL); | 1441 EXPECT_TRUE(GetTranslateInfoBar() != NULL); |
1382 EXPECT_TRUE(CloseTranslateInfoBar()); | 1442 EXPECT_TRUE(CloseTranslateInfoBar()); |
1383 | 1443 |
1384 // Let's switch to incognito mode, it should not be autotranslated in that | 1444 // Let's switch to incognito mode, it should not be autotranslated in that |
1385 // case either. | 1445 // case either. |
1386 TestingProfile* test_profile = | 1446 TestingProfile* test_profile = |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1443 // That should have triggered a translation. | 1503 // That should have triggered a translation. |
1444 // The "translating..." infobar should be showing. | 1504 // The "translating..." infobar should be showing. |
1445 translate::TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); | 1505 translate::TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); |
1446 ASSERT_TRUE(infobar != NULL); | 1506 ASSERT_TRUE(infobar != NULL); |
1447 EXPECT_EQ(translate::TRANSLATE_STEP_TRANSLATING, infobar->translate_step()); | 1507 EXPECT_EQ(translate::TRANSLATE_STEP_TRANSLATING, infobar->translate_step()); |
1448 SimulateTranslateScriptURLFetch(true); | 1508 SimulateTranslateScriptURLFetch(true); |
1449 std::string original_lang, target_lang; | 1509 std::string original_lang, target_lang; |
1450 EXPECT_TRUE(GetTranslateMessage(&original_lang, &target_lang)); | 1510 EXPECT_TRUE(GetTranslateMessage(&original_lang, &target_lang)); |
1451 EXPECT_EQ("fr", original_lang); | 1511 EXPECT_EQ("fr", original_lang); |
1452 EXPECT_EQ("en", target_lang); | 1512 EXPECT_EQ("en", target_lang); |
1453 process()->sink().ClearMessages(); | |
1454 | 1513 |
1455 // This should also have reverted the blacklisting of this site and language. | 1514 // This should also have reverted the blacklisting of this site and language. |
1456 EXPECT_FALSE(translate_prefs->IsBlockedLanguage("fr")); | 1515 EXPECT_FALSE(translate_prefs->IsBlockedLanguage("fr")); |
1457 EXPECT_FALSE(translate_prefs->IsSiteBlacklisted(url.host())); | 1516 EXPECT_FALSE(translate_prefs->IsSiteBlacklisted(url.host())); |
1458 | 1517 |
1459 // Let's simulate the page being translated. | 1518 // Let's simulate the page being translated. |
1460 SimulateOnPageTranslated("fr", "en"); | 1519 SimulateOnPageTranslated("fr", "en"); |
1461 | 1520 |
1462 // The translate menu should now be disabled. | 1521 // The translate menu should now be disabled. |
1463 menu.reset(CreateContextMenu()); | 1522 menu.reset(CreateContextMenu()); |
1464 menu->Init(); | 1523 menu->Init(); |
1465 EXPECT_TRUE(menu->IsItemPresent(IDC_CONTENT_CONTEXT_TRANSLATE)); | 1524 EXPECT_TRUE(menu->IsItemPresent(IDC_CONTENT_CONTEXT_TRANSLATE)); |
1466 EXPECT_FALSE(menu->IsCommandIdEnabled(IDC_CONTENT_CONTEXT_TRANSLATE)); | 1525 EXPECT_FALSE(menu->IsCommandIdEnabled(IDC_CONTENT_CONTEXT_TRANSLATE)); |
1467 | 1526 |
1468 // Test that selecting translate in the context menu WHILE the page is being | 1527 // Test that selecting translate in the context menu WHILE the page is being |
1469 // translated does nothing (this could happen if autotranslate kicks-in and | 1528 // translated does nothing (this could happen if autotranslate kicks-in and |
1470 // the user selects the menu while the translation is being performed). | 1529 // the user selects the menu while the translation is being performed). |
1471 SimulateNavigation(GURL("http://www.google.es"), "es", true); | 1530 SimulateNavigation(GURL("http://www.google.es"), "es", true); |
1472 infobar = GetTranslateInfoBar(); | 1531 infobar = GetTranslateInfoBar(); |
1473 ASSERT_TRUE(infobar != NULL); | 1532 ASSERT_TRUE(infobar != NULL); |
1474 infobar->Translate(); | 1533 infobar->Translate(); |
1475 EXPECT_TRUE(GetTranslateMessage(&original_lang, &target_lang)); | 1534 EXPECT_TRUE(GetTranslateMessage(&original_lang, &target_lang)); |
1476 process()->sink().ClearMessages(); | |
1477 menu.reset(CreateContextMenu()); | 1535 menu.reset(CreateContextMenu()); |
1478 menu->Init(); | 1536 menu->Init(); |
1479 EXPECT_TRUE(menu->IsCommandIdEnabled(IDC_CONTENT_CONTEXT_TRANSLATE)); | 1537 EXPECT_TRUE(menu->IsCommandIdEnabled(IDC_CONTENT_CONTEXT_TRANSLATE)); |
1480 menu->ExecuteCommand(IDC_CONTENT_CONTEXT_TRANSLATE, 0); | 1538 menu->ExecuteCommand(IDC_CONTENT_CONTEXT_TRANSLATE, 0); |
1481 // No message expected since the translation should have been ignored. | 1539 // No message expected since the translation should have been ignored. |
1482 EXPECT_FALSE(GetTranslateMessage(&original_lang, &target_lang)); | 1540 EXPECT_FALSE(GetTranslateMessage(&original_lang, &target_lang)); |
1483 | 1541 |
1484 // Now test that selecting translate in the context menu AFTER the page has | 1542 // Now test that selecting translate in the context menu AFTER the page has |
1485 // been translated does nothing. | 1543 // been translated does nothing. |
1486 SimulateNavigation(GURL("http://www.google.de"), "de", true); | 1544 SimulateNavigation(GURL("http://www.google.de"), "de", true); |
1487 infobar = GetTranslateInfoBar(); | 1545 infobar = GetTranslateInfoBar(); |
1488 ASSERT_TRUE(infobar != NULL); | 1546 ASSERT_TRUE(infobar != NULL); |
1489 infobar->Translate(); | 1547 infobar->Translate(); |
1490 EXPECT_TRUE(GetTranslateMessage(&original_lang, &target_lang)); | 1548 EXPECT_TRUE(GetTranslateMessage(&original_lang, &target_lang)); |
1491 process()->sink().ClearMessages(); | |
1492 menu.reset(CreateContextMenu()); | 1549 menu.reset(CreateContextMenu()); |
1493 menu->Init(); | 1550 menu->Init(); |
1494 EXPECT_TRUE(menu->IsCommandIdEnabled(IDC_CONTENT_CONTEXT_TRANSLATE)); | 1551 EXPECT_TRUE(menu->IsCommandIdEnabled(IDC_CONTENT_CONTEXT_TRANSLATE)); |
1495 SimulateOnPageTranslated("de", "en"); | 1552 SimulateOnPageTranslated("de", "en"); |
1496 menu->ExecuteCommand(IDC_CONTENT_CONTEXT_TRANSLATE, 0); | 1553 menu->ExecuteCommand(IDC_CONTENT_CONTEXT_TRANSLATE, 0); |
1497 // No message expected since the translation should have been ignored. | 1554 // No message expected since the translation should have been ignored. |
1498 EXPECT_FALSE(GetTranslateMessage(&original_lang, &target_lang)); | 1555 EXPECT_FALSE(GetTranslateMessage(&original_lang, &target_lang)); |
1499 | 1556 |
1500 // Test that the translate context menu is enabled when the page is in an | 1557 // Test that the translate context menu is enabled when the page is in an |
1501 // unknown language. | 1558 // unknown language. |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1541 SCOPED_TRACE(::testing::Message() << "Iteration " << i << " incognito mode=" | 1598 SCOPED_TRACE(::testing::Message() << "Iteration " << i << " incognito mode=" |
1542 << test_profile->IsOffTheRecord()); | 1599 << test_profile->IsOffTheRecord()); |
1543 SimulateNavigation(GURL("http://www.google.fr"), "fr", true); | 1600 SimulateNavigation(GURL("http://www.google.fr"), "fr", true); |
1544 infobar = GetTranslateInfoBar(); | 1601 infobar = GetTranslateInfoBar(); |
1545 ASSERT_TRUE(infobar != NULL); | 1602 ASSERT_TRUE(infobar != NULL); |
1546 EXPECT_EQ(translate::TRANSLATE_STEP_BEFORE_TRANSLATE, | 1603 EXPECT_EQ(translate::TRANSLATE_STEP_BEFORE_TRANSLATE, |
1547 infobar->translate_step()); | 1604 infobar->translate_step()); |
1548 if (i < 7) { | 1605 if (i < 7) { |
1549 EXPECT_FALSE(infobar->ShouldShowAlwaysTranslateShortcut()); | 1606 EXPECT_FALSE(infobar->ShouldShowAlwaysTranslateShortcut()); |
1550 infobar->Translate(); | 1607 infobar->Translate(); |
1551 process()->sink().ClearMessages(); | |
1552 } else { | 1608 } else { |
1553 EXPECT_TRUE(infobar->ShouldShowAlwaysTranslateShortcut()); | 1609 EXPECT_TRUE(infobar->ShouldShowAlwaysTranslateShortcut()); |
1554 } | 1610 } |
1555 if (i == 3) | 1611 if (i == 3) |
1556 test_profile->ForceIncognito(false); | 1612 test_profile->ForceIncognito(false); |
1557 } | 1613 } |
1558 // Simulate the user pressing "Always translate French". | 1614 // Simulate the user pressing "Always translate French". |
1559 infobar->AlwaysTranslatePageLanguage(); | 1615 infobar->AlwaysTranslatePageLanguage(); |
1560 EXPECT_TRUE(translate_prefs->IsLanguagePairWhitelisted("fr", "en")); | 1616 EXPECT_TRUE(translate_prefs->IsLanguagePairWhitelisted("fr", "en")); |
1561 // Simulate the translate script being retrieved (it only needs to be done | 1617 // Simulate the translate script being retrieved (it only needs to be done |
1562 // once in the test as it is cached). | 1618 // once in the test as it is cached). |
1563 SimulateTranslateScriptURLFetch(true); | 1619 SimulateTranslateScriptURLFetch(true); |
1564 // That should have triggered a page translate. | 1620 // That should have triggered a page translate. |
1565 std::string original_lang, target_lang; | 1621 std::string original_lang, target_lang; |
1566 EXPECT_TRUE(GetTranslateMessage(&original_lang, &target_lang)); | 1622 EXPECT_TRUE(GetTranslateMessage(&original_lang, &target_lang)); |
1567 process()->sink().ClearMessages(); | |
1568 | 1623 |
1569 // Now test that declining the translation causes a "never translate" button | 1624 // Now test that declining the translation causes a "never translate" button |
1570 // to be shown (in non incognito mode only). | 1625 // to be shown (in non incognito mode only). |
1571 test_profile->ForceIncognito(true); | 1626 test_profile->ForceIncognito(true); |
1572 for (int i = 0; i < 8; ++i) { | 1627 for (int i = 0; i < 8; ++i) { |
1573 SCOPED_TRACE(::testing::Message() << "Iteration " << i << " incognito mode=" | 1628 SCOPED_TRACE(::testing::Message() << "Iteration " << i << " incognito mode=" |
1574 << test_profile->IsOffTheRecord()); | 1629 << test_profile->IsOffTheRecord()); |
1575 SimulateNavigation(GURL("http://www.google.de"), "de", true); | 1630 SimulateNavigation(GURL("http://www.google.de"), "de", true); |
1576 infobar = GetTranslateInfoBar(); | 1631 infobar = GetTranslateInfoBar(); |
1577 ASSERT_TRUE(infobar != NULL); | 1632 ASSERT_TRUE(infobar != NULL); |
1578 EXPECT_EQ(translate::TRANSLATE_STEP_BEFORE_TRANSLATE, | 1633 EXPECT_EQ(translate::TRANSLATE_STEP_BEFORE_TRANSLATE, |
1579 infobar->translate_step()); | 1634 infobar->translate_step()); |
1580 if (i < 7) { | 1635 if (i < 7) { |
1581 EXPECT_FALSE(infobar->ShouldShowNeverTranslateShortcut()); | 1636 EXPECT_FALSE(infobar->ShouldShowNeverTranslateShortcut()); |
1582 infobar->TranslationDeclined(); | 1637 infobar->TranslationDeclined(); |
1583 } else { | 1638 } else { |
1584 EXPECT_TRUE(infobar->ShouldShowNeverTranslateShortcut()); | 1639 EXPECT_TRUE(infobar->ShouldShowNeverTranslateShortcut()); |
1585 } | 1640 } |
1586 if (i == 3) | 1641 if (i == 3) |
1587 test_profile->ForceIncognito(false); | 1642 test_profile->ForceIncognito(false); |
1588 } | 1643 } |
1589 // Simulate the user pressing "Never translate French". | 1644 // Simulate the user pressing "Never translate French". |
1590 infobar->NeverTranslatePageLanguage(); | 1645 infobar->NeverTranslatePageLanguage(); |
1591 EXPECT_TRUE(translate_prefs->IsBlockedLanguage("de")); | 1646 EXPECT_TRUE(translate_prefs->IsBlockedLanguage("de")); |
1592 // No translation should have occured and the infobar should be gone. | 1647 // No translation should have occured and the infobar should be gone. |
1593 EXPECT_FALSE(GetTranslateMessage(&original_lang, &target_lang)); | 1648 EXPECT_FALSE(GetTranslateMessage(&original_lang, &target_lang)); |
1594 process()->sink().ClearMessages(); | |
1595 ASSERT_TRUE(GetTranslateInfoBar() == NULL); | 1649 ASSERT_TRUE(GetTranslateInfoBar() == NULL); |
1596 } | 1650 } |
1597 | 1651 |
1598 // Tests that we don't show a translate infobar when a page instructs that it | 1652 // Tests that we don't show a translate infobar when a page instructs that it |
1599 // should not be translated. | 1653 // should not be translated. |
1600 TEST_F(TranslateManagerRenderViewHostTest, NonTranslatablePage) { | 1654 TEST_F(TranslateManagerRenderViewHostTest, NonTranslatablePage) { |
1601 // TODO(port): Test corresponding bubble translate UX: http://crbug.com/383235 | 1655 // TODO(port): Test corresponding bubble translate UX: http://crbug.com/383235 |
1602 if (TranslateService::IsTranslateBubbleEnabled()) | 1656 if (TranslateService::IsTranslateBubbleEnabled()) |
1603 return; | 1657 return; |
1604 | 1658 |
(...skipping 13 matching lines...) Expand all Loading... |
1618 TEST_F(TranslateManagerRenderViewHostTest, ScriptExpires) { | 1672 TEST_F(TranslateManagerRenderViewHostTest, ScriptExpires) { |
1619 // TODO(port): Test corresponding bubble translate UX: http://crbug.com/383235 | 1673 // TODO(port): Test corresponding bubble translate UX: http://crbug.com/383235 |
1620 if (TranslateService::IsTranslateBubbleEnabled()) | 1674 if (TranslateService::IsTranslateBubbleEnabled()) |
1621 return; | 1675 return; |
1622 | 1676 |
1623 ExpireTranslateScriptImmediately(); | 1677 ExpireTranslateScriptImmediately(); |
1624 | 1678 |
1625 SimulateNavigation(GURL("http://www.google.fr"), "fr", true); | 1679 SimulateNavigation(GURL("http://www.google.fr"), "fr", true); |
1626 translate::TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); | 1680 translate::TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); |
1627 ASSERT_TRUE(infobar != NULL); | 1681 ASSERT_TRUE(infobar != NULL); |
1628 process()->sink().ClearMessages(); | |
1629 infobar->Translate(); | 1682 infobar->Translate(); |
1630 SimulateTranslateScriptURLFetch(true); | 1683 SimulateTranslateScriptURLFetch(true); |
| 1684 // The translate request should have been sent. |
| 1685 EXPECT_TRUE(GetTranslateMessage(NULL, NULL)); |
1631 SimulateOnPageTranslated("fr", "en"); | 1686 SimulateOnPageTranslated("fr", "en"); |
1632 | 1687 |
1633 // A task should have been posted to clear the script, run it. | 1688 // A task should have been posted to clear the script, run it. |
1634 base::RunLoop().RunUntilIdle(); | 1689 base::RunLoop().RunUntilIdle(); |
1635 | 1690 |
1636 // Do another navigation and translation. | 1691 // Do another navigation and translation. |
1637 SimulateNavigation(GURL("http://www.google.es"), "es", true); | 1692 SimulateNavigation(GURL("http://www.google.es"), "es", true); |
1638 infobar = GetTranslateInfoBar(); | 1693 infobar = GetTranslateInfoBar(); |
1639 ASSERT_TRUE(infobar != NULL); | 1694 ASSERT_TRUE(infobar != NULL); |
1640 process()->sink().ClearMessages(); | |
1641 infobar->Translate(); | 1695 infobar->Translate(); |
1642 // If we don't simulate the URL fetch, the TranslateManager should be waiting | 1696 // If we don't simulate the URL fetch, the TranslateManager should be waiting |
1643 // for the script and no message should have been sent to the renderer. | 1697 // for the script and no message should have been sent to the renderer. |
1644 EXPECT_TRUE(process()->sink().GetFirstMessageMatching( | 1698 EXPECT_FALSE(GetTranslateMessage(NULL, NULL)); |
1645 ChromeFrameMsg_TranslatePage::ID) == NULL); | |
1646 // Now simulate the URL fetch. | 1699 // Now simulate the URL fetch. |
1647 SimulateTranslateScriptURLFetch(true); | 1700 SimulateTranslateScriptURLFetch(true); |
1648 // Now the message should have been sent. | 1701 // Now the message should have been sent. |
1649 std::string original_lang, target_lang; | 1702 std::string original_lang, target_lang; |
1650 EXPECT_TRUE(GetTranslateMessage(&original_lang, &target_lang)); | 1703 EXPECT_TRUE(GetTranslateMessage(&original_lang, &target_lang)); |
1651 EXPECT_EQ("es", original_lang); | 1704 EXPECT_EQ("es", original_lang); |
1652 EXPECT_EQ("en", target_lang); | 1705 EXPECT_EQ("en", target_lang); |
1653 } | 1706 } |
1654 | 1707 |
1655 TEST_F(TranslateManagerRenderViewHostTest, DownloadsAndHistoryNotTranslated) { | 1708 TEST_F(TranslateManagerRenderViewHostTest, DownloadsAndHistoryNotTranslated) { |
(...skipping 16 matching lines...) Expand all Loading... |
1672 | 1725 |
1673 // Check the bubble exists instead of the infobar. | 1726 // Check the bubble exists instead of the infobar. |
1674 translate::TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); | 1727 translate::TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); |
1675 ASSERT_TRUE(infobar == NULL); | 1728 ASSERT_TRUE(infobar == NULL); |
1676 TranslateBubbleModel* bubble = factory->model(); | 1729 TranslateBubbleModel* bubble = factory->model(); |
1677 ASSERT_TRUE(bubble != NULL); | 1730 ASSERT_TRUE(bubble != NULL); |
1678 EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_BEFORE_TRANSLATE, | 1731 EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_BEFORE_TRANSLATE, |
1679 bubble->GetViewState()); | 1732 bubble->GetViewState()); |
1680 | 1733 |
1681 // Simulate clicking translate. | 1734 // Simulate clicking translate. |
1682 process()->sink().ClearMessages(); | |
1683 bubble->Translate(); | 1735 bubble->Translate(); |
1684 | 1736 |
1685 // Check the bubble shows "Translating...". | 1737 // Check the bubble shows "Translating...". |
1686 bubble = factory->model(); | 1738 bubble = factory->model(); |
1687 ASSERT_TRUE(bubble != NULL); | 1739 ASSERT_TRUE(bubble != NULL); |
1688 EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_TRANSLATING, | 1740 EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_TRANSLATING, |
1689 bubble->GetViewState()); | 1741 bubble->GetViewState()); |
1690 | 1742 |
1691 // Simulate the translate script being retrieved (it only needs to be done | 1743 // Simulate the translate script being retrieved (it only needs to be done |
1692 // once in the test as it is cached). | 1744 // once in the test as it is cached). |
(...skipping 22 matching lines...) Expand all Loading... |
1715 | 1767 |
1716 // Check the bubble exists instead of the infobar. | 1768 // Check the bubble exists instead of the infobar. |
1717 translate::TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); | 1769 translate::TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); |
1718 ASSERT_TRUE(infobar == NULL); | 1770 ASSERT_TRUE(infobar == NULL); |
1719 TranslateBubbleModel* bubble = factory->model(); | 1771 TranslateBubbleModel* bubble = factory->model(); |
1720 ASSERT_TRUE(bubble != NULL); | 1772 ASSERT_TRUE(bubble != NULL); |
1721 EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_BEFORE_TRANSLATE, | 1773 EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_BEFORE_TRANSLATE, |
1722 bubble->GetViewState()); | 1774 bubble->GetViewState()); |
1723 | 1775 |
1724 // Simulate clicking translate. | 1776 // Simulate clicking translate. |
1725 process()->sink().ClearMessages(); | |
1726 bubble->Translate(); | 1777 bubble->Translate(); |
1727 SimulateTranslateScriptURLFetch(false); | 1778 SimulateTranslateScriptURLFetch(false); |
1728 | 1779 |
1729 // We should not have sent any message to translate to the renderer. | 1780 // We should not have sent any message to translate to the renderer. |
1730 EXPECT_FALSE(GetTranslateMessage(NULL, NULL)); | 1781 EXPECT_FALSE(GetTranslateMessage(NULL, NULL)); |
1731 | 1782 |
1732 // And we should have an error infobar showing. | 1783 // And we should have an error infobar showing. |
1733 bubble = factory->model(); | 1784 bubble = factory->model(); |
1734 ASSERT_TRUE(bubble != NULL); | 1785 ASSERT_TRUE(bubble != NULL); |
1735 EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_ERROR, bubble->GetViewState()); | 1786 EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_ERROR, bubble->GetViewState()); |
(...skipping 22 matching lines...) Expand all Loading... |
1758 | 1809 |
1759 // Check the bubble exists instead of the infobar. | 1810 // Check the bubble exists instead of the infobar. |
1760 translate::TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); | 1811 translate::TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); |
1761 ASSERT_TRUE(infobar == NULL); | 1812 ASSERT_TRUE(infobar == NULL); |
1762 TranslateBubbleModel* bubble = factory->model(); | 1813 TranslateBubbleModel* bubble = factory->model(); |
1763 ASSERT_TRUE(bubble != NULL); | 1814 ASSERT_TRUE(bubble != NULL); |
1764 EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_TRANSLATING, | 1815 EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_TRANSLATING, |
1765 bubble->GetViewState()); | 1816 bubble->GetViewState()); |
1766 } | 1817 } |
1767 #endif // defined(USE_AURA) | 1818 #endif // defined(USE_AURA) |
OLD | NEW |