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/public/interfaces/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" | 55 #include "content/public/test/mock_render_process_host.h" |
56 #include "content/public/test/test_renderer_host.h" | 56 #include "content/public/test/test_renderer_host.h" |
57 #include "mojo/public/cpp/bindings/binding.h" | |
57 #include "net/base/net_errors.h" | 58 #include "net/base/net_errors.h" |
58 #include "net/url_request/test_url_fetcher_factory.h" | 59 #include "net/url_request/test_url_fetcher_factory.h" |
59 #include "net/url_request/url_fetcher_delegate.h" | 60 #include "net/url_request/url_fetcher_delegate.h" |
60 #include "net/url_request/url_request_status.h" | 61 #include "net/url_request/url_request_status.h" |
61 #include "testing/gmock/include/gmock/gmock.h" | 62 #include "testing/gmock/include/gmock/gmock.h" |
62 #include "third_party/WebKit/public/web/WebContextMenuData.h" | 63 #include "third_party/WebKit/public/web/WebContextMenuData.h" |
63 #include "url/gurl.h" | 64 #include "url/gurl.h" |
64 | 65 |
65 #if !defined(USE_AURA) | 66 #if !defined(USE_AURA) |
66 #include "components/translate/core/browser/translate_infobar_delegate.h" | 67 #include "components/translate/core/browser/translate_infobar_delegate.h" |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
108 } | 109 } |
109 | 110 |
110 TranslateBubbleModel* model() { return model_.get(); } | 111 TranslateBubbleModel* model() { return model_.get(); } |
111 | 112 |
112 private: | 113 private: |
113 std::unique_ptr<TranslateBubbleModel> model_; | 114 std::unique_ptr<TranslateBubbleModel> model_; |
114 | 115 |
115 DISALLOW_COPY_AND_ASSIGN(MockTranslateBubbleFactory); | 116 DISALLOW_COPY_AND_ASSIGN(MockTranslateBubbleFactory); |
116 }; | 117 }; |
117 | 118 |
119 class FakePageImpl : public translate::mojom::Page { | |
120 public: | |
121 FakePageImpl() | |
122 : called_translate_(false), | |
123 called_revert_translation_(false), | |
124 trans_callback_cancelled_(false), | |
125 trans_callback_error_(translate::TranslateErrors::NONE), | |
126 binding_(this) {} | |
127 ~FakePageImpl() override {} | |
128 | |
129 translate::mojom::PagePtr BindToNewPagePtr() { | |
130 binding_.Close(); | |
131 return binding_.CreateInterfacePtrAndBind(); | |
132 } | |
133 | |
134 // translate::mojom::Page implementation. | |
135 void Translate(const mojo::String& translate_script, | |
136 const mojo::String& source_lang, | |
137 const mojo::String& target_lang, | |
138 const TranslateCallback& callback) override { | |
139 called_translate_ = true; | |
140 source_lang_ = source_lang.get(); | |
141 target_lang_ = target_lang.get(); | |
142 | |
143 callback.Run(trans_callback_cancelled_, trans_callback_original_lang_, | |
144 trans_callback_translated_lang_, trans_callback_error_); | |
145 } | |
146 | |
147 void RevertTranslation() override { called_revert_translation_ = true; } | |
148 | |
149 bool called_translate_; | |
150 base::Optional<std::string> source_lang_; | |
151 base::Optional<std::string> target_lang_; | |
152 bool called_revert_translation_; | |
153 | |
154 bool trans_callback_cancelled_; | |
155 std::string trans_callback_original_lang_; | |
156 std::string trans_callback_translated_lang_; | |
157 translate::TranslateErrors::Type trans_callback_error_; | |
158 | |
159 private: | |
160 mojo::Binding<translate::mojom::Page> binding_; | |
161 | |
162 DISALLOW_COPY_AND_ASSIGN(FakePageImpl); | |
163 }; | |
164 | |
118 } // namespace | 165 } // namespace |
119 | 166 |
120 // An observer that keeps track of whether a navigation entry was committed. | 167 // An observer that keeps track of whether a navigation entry was committed. |
121 class NavEntryCommittedObserver : public content::NotificationObserver { | 168 class NavEntryCommittedObserver : public content::NotificationObserver { |
122 public: | 169 public: |
123 explicit NavEntryCommittedObserver(content::WebContents* web_contents) { | 170 explicit NavEntryCommittedObserver(content::WebContents* web_contents) { |
124 registrar_.Add(this, | 171 registrar_.Add(this, |
125 content::NOTIFICATION_NAV_ENTRY_COMMITTED, | 172 content::NOTIFICATION_NAV_ENTRY_COMMITTED, |
126 content::Source<content::NavigationController>( | 173 content::Source<content::NavigationController>( |
127 &web_contents->GetController())); | 174 &web_contents->GetController())); |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
231 Reload(); | 278 Reload(); |
232 else | 279 else |
233 NavigateAndCommit(url); | 280 NavigateAndCommit(url); |
234 SimulateOnTranslateLanguageDetermined(lang, page_translatable); | 281 SimulateOnTranslateLanguageDetermined(lang, page_translatable); |
235 } | 282 } |
236 | 283 |
237 void SimulateOnTranslateLanguageDetermined(const std::string& lang, | 284 void SimulateOnTranslateLanguageDetermined(const std::string& lang, |
238 bool page_translatable) { | 285 bool page_translatable) { |
239 translate::LanguageDetectionDetails details; | 286 translate::LanguageDetectionDetails details; |
240 details.adopted_language = lang; | 287 details.adopted_language = lang; |
241 main_rfh()->OnMessageReceived( | 288 ChromeTranslateClient::FromWebContents(web_contents()) |
242 ChromeFrameHostMsg_TranslateLanguageDetermined(0, details, | 289 ->translate_driver() |
243 page_translatable)); | 290 .NewPage(fake_page_.BindToNewPagePtr(), details, page_translatable); |
244 } | 291 } |
245 | 292 |
246 void SimulateOnPageTranslated(int routing_id, | 293 void PreSetPageTranslatedResult(const std::string& source_lang, |
247 const std::string& source_lang, | 294 const std::string& target_lang, |
248 const std::string& target_lang, | 295 translate::TranslateErrors::Type error) { |
249 translate::TranslateErrors::Type error) { | 296 fake_page_.trans_callback_cancelled_ = false; |
250 main_rfh()->OnMessageReceived(ChromeFrameHostMsg_PageTranslated( | 297 fake_page_.trans_callback_original_lang_ = source_lang; |
251 routing_id, source_lang, target_lang, error)); | 298 fake_page_.trans_callback_translated_lang_ = target_lang; |
299 fake_page_.trans_callback_error_ = error; | |
252 } | 300 } |
253 | 301 |
254 void SimulateOnPageTranslated(const std::string& source_lang, | 302 void PreSetPageTranslatedResult(const std::string& source_lang, |
255 const std::string& target_lang) { | 303 const std::string& target_lang) { |
256 SimulateOnPageTranslated( | 304 PreSetPageTranslatedResult(source_lang, target_lang, |
257 0, source_lang, target_lang, translate::TranslateErrors::NONE); | 305 translate::TranslateErrors::NONE); |
258 } | 306 } |
259 | 307 |
260 bool GetTranslateMessage(std::string* original_lang, | 308 bool GetTranslateRequestAndReset(std::string* original_lang, |
261 std::string* target_lang) { | 309 std::string* target_lang) { |
262 const IPC::Message* message = process()->sink().GetFirstMessageMatching( | 310 if (!fake_page_.called_translate_) |
263 ChromeFrameMsg_TranslatePage::ID); | |
264 if (!message) | |
265 return false; | 311 return false; |
266 std::tuple<int, std::string, std::string, std::string> translate_param; | 312 EXPECT_TRUE(fake_page_.source_lang_); |
267 ChromeFrameMsg_TranslatePage::Read(message, &translate_param); | 313 EXPECT_TRUE(fake_page_.target_lang_); |
268 // Ignore get<0>(translate_param) which is the page seq no. | 314 |
269 // Ignore get<1>(translate_param) which is the script injected in the page. | |
270 if (original_lang) | 315 if (original_lang) |
271 *original_lang = std::get<2>(translate_param); | 316 *original_lang = *fake_page_.source_lang_; |
272 if (target_lang) | 317 if (target_lang) |
273 *target_lang = std::get<3>(translate_param); | 318 *target_lang = *fake_page_.target_lang_; |
319 | |
320 // Reset | |
321 fake_page_.called_translate_ = false; | |
322 fake_page_.source_lang_ = base::nullopt; | |
323 fake_page_.target_lang_ = base::nullopt; | |
324 | |
274 return true; | 325 return true; |
275 } | 326 } |
276 | 327 |
277 InfoBarService* infobar_service() { | 328 InfoBarService* infobar_service() { |
278 return InfoBarService::FromWebContents(web_contents()); | 329 return InfoBarService::FromWebContents(web_contents()); |
279 } | 330 } |
280 | 331 |
281 #if !defined(USE_AURA) | 332 #if !defined(USE_AURA) |
282 // Returns the translate infobar if there is 1 infobar and it is a translate | 333 // Returns the translate infobar if there is 1 infobar and it is a translate |
283 // infobar. | 334 // infobar. |
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
485 | 536 |
486 private: | 537 private: |
487 content::NotificationRegistrar notification_registrar_; | 538 content::NotificationRegistrar notification_registrar_; |
488 net::TestURLFetcherFactory url_fetcher_factory_; | 539 net::TestURLFetcherFactory url_fetcher_factory_; |
489 | 540 |
490 // The infobars that have been removed. | 541 // The infobars that have been removed. |
491 // WARNING: the pointers point to deleted objects, use only for comparison. | 542 // WARNING: the pointers point to deleted objects, use only for comparison. |
492 std::set<infobars::InfoBarDelegate*> removed_infobars_; | 543 std::set<infobars::InfoBarDelegate*> removed_infobars_; |
493 | 544 |
494 std::unique_ptr<MockTranslateBubbleFactory> bubble_factory_; | 545 std::unique_ptr<MockTranslateBubbleFactory> bubble_factory_; |
546 FakePageImpl fake_page_; | |
547 | |
495 DISALLOW_COPY_AND_ASSIGN(TranslateManagerRenderViewHostTest); | 548 DISALLOW_COPY_AND_ASSIGN(TranslateManagerRenderViewHostTest); |
496 }; | 549 }; |
497 | 550 |
498 | 551 |
499 // A list of languages to fake being returned by the translate server. | 552 // A list of languages to fake being returned by the translate server. |
500 // Use only langauges for which Chrome's copy of ICU has | 553 // 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 | 554 // 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 | 555 // does not have the display name for a language unless it's in the |
503 // Accept-Language list. | 556 // Accept-Language list. |
504 static const char* server_language_list[] = | 557 static const char* server_language_list[] = |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
595 if (lang == "xx") | 648 if (lang == "xx") |
596 continue; | 649 continue; |
597 EXPECT_NE(current_supported_languages.end(), | 650 EXPECT_NE(current_supported_languages.end(), |
598 std::find(current_supported_languages.begin(), | 651 std::find(current_supported_languages.begin(), |
599 current_supported_languages.end(), | 652 current_supported_languages.end(), |
600 lang)) << "lang=" << lang; | 653 lang)) << "lang=" << lang; |
601 EXPECT_FALSE(translate::TranslateDownloadManager::IsAlphaLanguage(lang)) | 654 EXPECT_FALSE(translate::TranslateDownloadManager::IsAlphaLanguage(lang)) |
602 << "lang=" << lang; | 655 << "lang=" << lang; |
603 } | 656 } |
604 } | 657 } |
605 | 658 #if 0 |
606 // The rest of the tests in this file depend on the translate infobar. They | 659 // The rest of the tests in this file depend on the translate infobar. They |
607 // should be ported to use the translate bubble. On Aura there is no infobar | 660 // should be ported to use the translate bubble. On Aura there is no infobar |
608 // so the tests are not compiled. | 661 // so the tests are not compiled. |
609 #if !defined(USE_AURA) | 662 #if !defined(USE_AURA) |
leonhsl(Using Gerrit)
2016/07/15 12:43:22
Hi, groby, would you please share with me how to g
groby-ooo-7-16
2016/07/21 14:41:29
aura is automatically enabled for Windows/Linux bu
| |
610 TEST_F(TranslateManagerRenderViewHostTest, NormalTranslate) { | 663 TEST_F(TranslateManagerRenderViewHostTest, NormalTranslate) { |
611 // See BubbleNormalTranslate for corresponding bubble UX testing. | 664 // See BubbleNormalTranslate for corresponding bubble UX testing. |
612 if (TranslateService::IsTranslateBubbleEnabled()) | 665 if (TranslateService::IsTranslateBubbleEnabled()) |
613 return; | 666 return; |
614 | 667 |
615 SimulateNavigation(GURL("http://www.google.fr"), "fr", true); | 668 SimulateNavigation(GURL("http://www.google.fr"), "fr", true); |
616 | 669 |
617 // We should have an infobar. | 670 // We should have an infobar. |
618 translate::TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); | 671 translate::TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); |
619 ASSERT_TRUE(infobar != NULL); | 672 ASSERT_TRUE(infobar != NULL); |
620 EXPECT_EQ(translate::TRANSLATE_STEP_BEFORE_TRANSLATE, | 673 EXPECT_EQ(translate::TRANSLATE_STEP_BEFORE_TRANSLATE, |
621 infobar->translate_step()); | 674 infobar->translate_step()); |
622 | 675 |
676 // Preset the translation result values which will be returned back by fake | |
677 // render page. | |
678 PreSetPageTranslatedResult("fr", "en"); | |
679 | |
623 // Simulate clicking translate. | 680 // Simulate clicking translate. |
624 process()->sink().ClearMessages(); | |
625 infobar->Translate(); | 681 infobar->Translate(); |
626 | 682 |
627 // The "Translating..." infobar should be showing. | 683 // The "Translating..." infobar should be showing. |
628 infobar = GetTranslateInfoBar(); | 684 infobar = GetTranslateInfoBar(); |
629 ASSERT_TRUE(infobar != NULL); | 685 ASSERT_TRUE(infobar != NULL); |
630 EXPECT_EQ(translate::TRANSLATE_STEP_TRANSLATING, infobar->translate_step()); | 686 EXPECT_EQ(translate::TRANSLATE_STEP_TRANSLATING, infobar->translate_step()); |
631 | 687 |
632 // Simulate the translate script being retrieved (it only needs to be done | 688 // Simulate the translate script being retrieved (it only needs to be done |
633 // once in the test as it is cached). | 689 // once in the test as it is cached). |
634 SimulateTranslateScriptURLFetch(true); | 690 SimulateTranslateScriptURLFetch(true); |
635 | 691 |
636 // Test that we sent the right message to the renderer. | 692 // Test that we sent the right message to the renderer. |
637 std::string original_lang, target_lang; | 693 std::string original_lang, target_lang; |
638 EXPECT_TRUE(GetTranslateMessage(&original_lang, &target_lang)); | 694 EXPECT_TRUE(GetTranslateRequestAndReset(&original_lang, &target_lang)); |
639 EXPECT_EQ("fr", original_lang); | 695 EXPECT_EQ("fr", original_lang); |
640 EXPECT_EQ("en", target_lang); | 696 EXPECT_EQ("en", target_lang); |
641 | 697 |
642 // Simulate the render notifying the translation has been done. | |
643 SimulateOnPageTranslated("fr", "en"); | |
644 | |
645 // The after translate infobar should be showing. | 698 // The after translate infobar should be showing. |
646 infobar = GetTranslateInfoBar(); | 699 infobar = GetTranslateInfoBar(); |
647 ASSERT_TRUE(infobar != NULL); | 700 ASSERT_TRUE(infobar != NULL); |
648 EXPECT_EQ(translate::TRANSLATE_STEP_AFTER_TRANSLATE, | 701 EXPECT_EQ(translate::TRANSLATE_STEP_AFTER_TRANSLATE, |
649 infobar->translate_step()); | 702 infobar->translate_step()); |
650 | 703 |
651 // Simulate changing the original language and translating. | 704 // Simulate changing the original language and translating. |
652 process()->sink().ClearMessages(); | |
653 std::string new_original_lang = infobar->language_code_at(0); | 705 std::string new_original_lang = infobar->language_code_at(0); |
654 infobar->UpdateOriginalLanguage(new_original_lang); | 706 infobar->UpdateOriginalLanguage(new_original_lang); |
707 // Preset the translation result values which will be returned back by fake | |
708 // render page. | |
709 PreSetPageTranslatedResult(new_original_lang, "en"); | |
655 infobar->Translate(); | 710 infobar->Translate(); |
656 EXPECT_TRUE(GetTranslateMessage(&original_lang, &target_lang)); | 711 EXPECT_TRUE(GetTranslateRequestAndReset(&original_lang, &target_lang)); |
657 EXPECT_EQ(new_original_lang, original_lang); | 712 EXPECT_EQ(new_original_lang, original_lang); |
658 EXPECT_EQ("en", target_lang); | 713 EXPECT_EQ("en", target_lang); |
659 // Simulate the render notifying the translation has been done. | |
660 SimulateOnPageTranslated(new_original_lang, "en"); | |
661 infobar = GetTranslateInfoBar(); | 714 infobar = GetTranslateInfoBar(); |
662 ASSERT_TRUE(infobar != NULL); | 715 ASSERT_TRUE(infobar != NULL); |
663 | 716 |
664 // Simulate changing the target language and translating. | 717 // Simulate changing the target language and translating. |
665 process()->sink().ClearMessages(); | |
666 std::string new_target_lang = infobar->language_code_at(1); | 718 std::string new_target_lang = infobar->language_code_at(1); |
667 infobar->UpdateTargetLanguage(new_target_lang); | 719 infobar->UpdateTargetLanguage(new_target_lang); |
720 // Preset the translation result values which will be returned back by fake | |
721 // render page. | |
722 PreSetPageTranslatedResult(new_original_lang, new_target_lang); | |
668 infobar->Translate(); | 723 infobar->Translate(); |
669 EXPECT_TRUE(GetTranslateMessage(&original_lang, &target_lang)); | 724 EXPECT_TRUE(GetTranslateRequestAndReset(&original_lang, &target_lang)); |
670 EXPECT_EQ(new_original_lang, original_lang); | 725 EXPECT_EQ(new_original_lang, original_lang); |
671 EXPECT_EQ(new_target_lang, target_lang); | 726 EXPECT_EQ(new_target_lang, target_lang); |
672 // Simulate the render notifying the translation has been done. | |
673 SimulateOnPageTranslated(new_original_lang, new_target_lang); | |
674 infobar = GetTranslateInfoBar(); | 727 infobar = GetTranslateInfoBar(); |
675 ASSERT_TRUE(infobar != NULL); | 728 ASSERT_TRUE(infobar != NULL); |
676 EXPECT_EQ(new_target_lang, infobar->target_language_code()); | 729 EXPECT_EQ(new_target_lang, infobar->target_language_code()); |
677 | 730 |
678 // Reloading should trigger translation iff Always Translate is on. | 731 // Reloading should trigger translation iff Always Translate is on. |
679 ReloadAndWait(true); | 732 ReloadAndWait(true); |
680 infobar = GetTranslateInfoBar(); | 733 infobar = GetTranslateInfoBar(); |
681 ASSERT_TRUE(infobar != NULL); | 734 ASSERT_TRUE(infobar != NULL); |
682 EXPECT_EQ(translate::TRANSLATE_STEP_BEFORE_TRANSLATE, | 735 EXPECT_EQ(translate::TRANSLATE_STEP_BEFORE_TRANSLATE, |
683 infobar->translate_step()); | 736 infobar->translate_step()); |
(...skipping 18 matching lines...) Expand all Loading... | |
702 ASSERT_TRUE(infobar != NULL); | 755 ASSERT_TRUE(infobar != NULL); |
703 EXPECT_EQ(translate::TRANSLATE_STEP_BEFORE_TRANSLATE, | 756 EXPECT_EQ(translate::TRANSLATE_STEP_BEFORE_TRANSLATE, |
704 infobar->translate_step()); | 757 infobar->translate_step()); |
705 | 758 |
706 // Simulate clicking translate. | 759 // Simulate clicking translate. |
707 process()->sink().ClearMessages(); | 760 process()->sink().ClearMessages(); |
708 infobar->Translate(); | 761 infobar->Translate(); |
709 SimulateTranslateScriptURLFetch(false); | 762 SimulateTranslateScriptURLFetch(false); |
710 | 763 |
711 // We should not have sent any message to translate to the renderer. | 764 // We should not have sent any message to translate to the renderer. |
712 EXPECT_FALSE(GetTranslateMessage(NULL, NULL)); | 765 EXPECT_FALSE(GetTranslateRequestAndReset(NULL, NULL)); |
713 | 766 |
714 // And we should have an error infobar showing. | 767 // And we should have an error infobar showing. |
715 infobar = GetTranslateInfoBar(); | 768 infobar = GetTranslateInfoBar(); |
716 ASSERT_TRUE(infobar != NULL); | 769 ASSERT_TRUE(infobar != NULL); |
717 EXPECT_EQ(translate::TRANSLATE_STEP_TRANSLATE_ERROR, | 770 EXPECT_EQ(translate::TRANSLATE_STEP_TRANSLATE_ERROR, |
718 infobar->translate_step()); | 771 infobar->translate_step()); |
719 } | 772 } |
720 | 773 |
721 // Ensures we deal correctly with pages for which the browser does not recognize | 774 // Ensures we deal correctly with pages for which the browser does not recognize |
722 // the language (the translate server may or not detect the language). | 775 // the language (the translate server may or not detect the language). |
(...skipping 20 matching lines...) Expand all Loading... | |
743 translate::TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); | 796 translate::TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); |
744 ASSERT_TRUE(infobar != NULL); | 797 ASSERT_TRUE(infobar != NULL); |
745 EXPECT_EQ(translate::TRANSLATE_STEP_TRANSLATE_ERROR, | 798 EXPECT_EQ(translate::TRANSLATE_STEP_TRANSLATE_ERROR, |
746 infobar->translate_step()); | 799 infobar->translate_step()); |
747 EXPECT_TRUE(infobar->is_error()); | 800 EXPECT_TRUE(infobar->is_error()); |
748 infobar->MessageInfoBarButtonPressed(); | 801 infobar->MessageInfoBarButtonPressed(); |
749 SimulateTranslateScriptURLFetch(true); // This time succeed. | 802 SimulateTranslateScriptURLFetch(true); // This time succeed. |
750 | 803 |
751 // Simulate the render notifying the translation has been done, the server | 804 // Simulate the render notifying the translation has been done, the server |
752 // having detected the page was in a known and supported language. | 805 // having detected the page was in a known and supported language. |
753 SimulateOnPageTranslated("fr", "en"); | 806 PreSetPageTranslatedResult("fr", "en"); |
754 | 807 |
755 // The after translate infobar should be showing. | 808 // The after translate infobar should be showing. |
756 infobar = GetTranslateInfoBar(); | 809 infobar = GetTranslateInfoBar(); |
757 ASSERT_TRUE(infobar != NULL); | 810 ASSERT_TRUE(infobar != NULL); |
758 EXPECT_EQ(translate::TRANSLATE_STEP_AFTER_TRANSLATE, | 811 EXPECT_EQ(translate::TRANSLATE_STEP_AFTER_TRANSLATE, |
759 infobar->translate_step()); | 812 infobar->translate_step()); |
760 EXPECT_EQ("fr", infobar->original_language_code()); | 813 EXPECT_EQ("fr", infobar->original_language_code()); |
761 EXPECT_EQ("en", infobar->target_language_code()); | 814 EXPECT_EQ("en", infobar->target_language_code()); |
762 | 815 |
763 // Let's run the same steps but this time the server detects the page is | 816 // Let's run the same steps but this time the server detects the page is |
764 // already in English. | 817 // already in English. |
765 SimulateNavigation(GURL("http://www.google.com"), "und", true); | 818 SimulateNavigation(GURL("http://www.google.com"), "und", true); |
766 menu.reset(CreateContextMenu()); | 819 menu.reset(CreateContextMenu()); |
767 menu->Init(); | 820 menu->Init(); |
768 menu->ExecuteCommand(IDC_CONTENT_CONTEXT_TRANSLATE, 0); | 821 menu->ExecuteCommand(IDC_CONTENT_CONTEXT_TRANSLATE, 0); |
769 SimulateOnPageTranslated( | 822 PreSetPageTranslatedResult( |
770 1, "en", "en", translate::TranslateErrors::IDENTICAL_LANGUAGES); | 823 1, "en", "en", translate::TranslateErrors::IDENTICAL_LANGUAGES); |
771 infobar = GetTranslateInfoBar(); | 824 infobar = GetTranslateInfoBar(); |
772 ASSERT_TRUE(infobar != NULL); | 825 ASSERT_TRUE(infobar != NULL); |
773 EXPECT_EQ(translate::TRANSLATE_STEP_TRANSLATE_ERROR, | 826 EXPECT_EQ(translate::TRANSLATE_STEP_TRANSLATE_ERROR, |
774 infobar->translate_step()); | 827 infobar->translate_step()); |
775 EXPECT_EQ(translate::TranslateErrors::IDENTICAL_LANGUAGES, | 828 EXPECT_EQ(translate::TranslateErrors::IDENTICAL_LANGUAGES, |
776 infobar->error_type()); | 829 infobar->error_type()); |
777 | 830 |
778 // Let's run the same steps again but this time the server fails to detect the | 831 // 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). | 832 // page's language (it returns an empty string). |
780 SimulateNavigation(GURL("http://www.google.com"), "und", true); | 833 SimulateNavigation(GURL("http://www.google.com"), "und", true); |
781 menu.reset(CreateContextMenu()); | 834 menu.reset(CreateContextMenu()); |
782 menu->Init(); | 835 menu->Init(); |
783 menu->ExecuteCommand(IDC_CONTENT_CONTEXT_TRANSLATE, 0); | 836 menu->ExecuteCommand(IDC_CONTENT_CONTEXT_TRANSLATE, 0); |
784 SimulateOnPageTranslated( | 837 PreSetPageTranslatedResult( |
785 2, std::string(), "en", translate::TranslateErrors::UNKNOWN_LANGUAGE); | 838 2, std::string(), "en", translate::TranslateErrors::UNKNOWN_LANGUAGE); |
786 infobar = GetTranslateInfoBar(); | 839 infobar = GetTranslateInfoBar(); |
787 ASSERT_TRUE(infobar != NULL); | 840 ASSERT_TRUE(infobar != NULL); |
788 EXPECT_EQ(translate::TRANSLATE_STEP_TRANSLATE_ERROR, | 841 EXPECT_EQ(translate::TRANSLATE_STEP_TRANSLATE_ERROR, |
789 infobar->translate_step()); | 842 infobar->translate_step()); |
790 EXPECT_EQ(translate::TranslateErrors::UNKNOWN_LANGUAGE, | 843 EXPECT_EQ(translate::TranslateErrors::UNKNOWN_LANGUAGE, |
791 infobar->error_type()); | 844 infobar->error_type()); |
792 } | 845 } |
793 | 846 |
794 // Tests that we show/don't show an info-bar for the languages. | 847 // Tests that we show/don't show an info-bar for the languages. |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
833 } | 886 } |
834 | 887 |
835 // Tests auto-translate on page. | 888 // Tests auto-translate on page. |
836 TEST_F(TranslateManagerRenderViewHostTest, AutoTranslateOnNavigate) { | 889 TEST_F(TranslateManagerRenderViewHostTest, AutoTranslateOnNavigate) { |
837 EnableBubbleTest(); | 890 EnableBubbleTest(); |
838 | 891 |
839 SimulateNavigation(GURL("http://www.google.fr"), "fr", true); | 892 SimulateNavigation(GURL("http://www.google.fr"), "fr", true); |
840 | 893 |
841 SimulateTranslatePress(); | 894 SimulateTranslatePress(); |
842 SimulateTranslateScriptURLFetch(true); | 895 SimulateTranslateScriptURLFetch(true); |
843 SimulateOnPageTranslated("fr", "en"); | 896 PreSetPageTranslatedResult("fr", "en"); |
844 | 897 |
845 // Now navigate to a new page in the same language. | 898 // Now navigate to a new page in the same language. |
846 process()->sink().ClearMessages(); | 899 process()->sink().ClearMessages(); |
847 SimulateNavigation(GURL("http://news.google.fr"), "fr", true); | 900 SimulateNavigation(GURL("http://news.google.fr"), "fr", true); |
848 | 901 |
849 // This should have automatically triggered a translation. | 902 // This should have automatically triggered a translation. |
850 std::string original_lang, target_lang; | 903 std::string original_lang, target_lang; |
851 EXPECT_TRUE(GetTranslateMessage(&original_lang, &target_lang)); | 904 EXPECT_TRUE(GetTranslateRequestAndReset(&original_lang, &target_lang)); |
852 EXPECT_EQ("fr", original_lang); | 905 EXPECT_EQ("fr", original_lang); |
853 EXPECT_EQ("en", target_lang); | 906 EXPECT_EQ("en", target_lang); |
854 | 907 |
855 // Now navigate to a page in a different language. | 908 // Now navigate to a page in a different language. |
856 process()->sink().ClearMessages(); | 909 process()->sink().ClearMessages(); |
857 SimulateNavigation(GURL("http://news.google.es"), "es", true); | 910 SimulateNavigation(GURL("http://news.google.es"), "es", true); |
858 | 911 |
859 // This should not have triggered a translate. | 912 // This should not have triggered a translate. |
860 EXPECT_FALSE(GetTranslateMessage(&original_lang, &target_lang)); | 913 EXPECT_FALSE(GetTranslateRequestAndReset(&original_lang, &target_lang)); |
861 } | 914 } |
862 | 915 |
863 // Tests that multiple OnPageContents do not cause multiple infobars. | 916 // Tests that multiple OnPageContents do not cause multiple infobars. |
864 TEST_F(TranslateManagerRenderViewHostTest, MultipleOnPageContents) { | 917 TEST_F(TranslateManagerRenderViewHostTest, MultipleOnPageContents) { |
865 EnableBubbleTest(); | 918 EnableBubbleTest(); |
866 | 919 |
867 SimulateNavigation(GURL("http://www.google.fr"), "fr", true); | 920 SimulateNavigation(GURL("http://www.google.fr"), "fr", true); |
868 | 921 |
869 // Simulate clicking 'Nope' (don't translate). | 922 // Simulate clicking 'Nope' (don't translate). |
870 EXPECT_TRUE(TranslateUiVisible()); | 923 EXPECT_TRUE(TranslateUiVisible()); |
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1024 TranslateCloseInfoBarInPageNavigation) { | 1077 TranslateCloseInfoBarInPageNavigation) { |
1025 EnableBubbleTest(); | 1078 EnableBubbleTest(); |
1026 | 1079 |
1027 SimulateNavigation(GURL("http://www.google.fr"), "fr", true); | 1080 SimulateNavigation(GURL("http://www.google.fr"), "fr", true); |
1028 | 1081 |
1029 // Simulate the user translating. | 1082 // Simulate the user translating. |
1030 SimulateTranslatePress(); | 1083 SimulateTranslatePress(); |
1031 | 1084 |
1032 // Simulate the translate script being retrieved. | 1085 // Simulate the translate script being retrieved. |
1033 SimulateTranslateScriptURLFetch(true); | 1086 SimulateTranslateScriptURLFetch(true); |
1034 SimulateOnPageTranslated("fr", "en"); | 1087 PreSetPageTranslatedResult("fr", "en"); |
1035 | 1088 |
1036 EXPECT_TRUE(CloseTranslateUi()); | 1089 EXPECT_TRUE(CloseTranslateUi()); |
1037 | 1090 |
1038 // Navigate in page, no infobar should be shown. | 1091 // Navigate in page, no infobar should be shown. |
1039 SimulateNavigation(GURL("http://www.google.fr/#ref1"), "fr", true); | 1092 SimulateNavigation(GURL("http://www.google.fr/#ref1"), "fr", true); |
1040 EXPECT_FALSE(TranslateUiVisible()); | 1093 EXPECT_FALSE(TranslateUiVisible()); |
1041 | 1094 |
1042 // Navigate out of page, a new infobar should show. | 1095 // Navigate out of page, a new infobar should show. |
1043 // Note that we navigate to a page in a different language so we don't trigger | 1096 // Note that we navigate to a page in a different language so we don't trigger |
1044 // the auto-translate feature (it would translate the page automatically and | 1097 // the auto-translate feature (it would translate the page automatically and |
1045 // the before translate infobar would not be shown). | 1098 // the before translate infobar would not be shown). |
1046 SimulateNavigation(GURL("http://www.google.de"), "de", true); | 1099 SimulateNavigation(GURL("http://www.google.de"), "de", true); |
1047 EXPECT_TRUE(TranslateUiVisible()); | 1100 EXPECT_TRUE(TranslateUiVisible()); |
1048 } | 1101 } |
1049 | 1102 |
1050 // Tests that the after translate the infobar still shows when navigating | 1103 // Tests that the after translate the infobar still shows when navigating |
1051 // in-page. | 1104 // in-page. |
1052 TEST_F(TranslateManagerRenderViewHostTest, TranslateInPageNavigation) { | 1105 TEST_F(TranslateManagerRenderViewHostTest, TranslateInPageNavigation) { |
1053 EnableBubbleTest(); | 1106 EnableBubbleTest(); |
1054 | 1107 |
1055 SimulateNavigation(GURL("http://www.google.fr"), "fr", true); | 1108 SimulateNavigation(GURL("http://www.google.fr"), "fr", true); |
1056 | 1109 |
1057 // Simulate the user translating. | 1110 // Simulate the user translating. |
1058 SimulateTranslatePress(); | 1111 SimulateTranslatePress(); |
1059 SimulateTranslateScriptURLFetch(true); | 1112 SimulateTranslateScriptURLFetch(true); |
1060 SimulateOnPageTranslated("fr", "en"); | 1113 PreSetPageTranslatedResult("fr", "en"); |
1061 // The after translate UI is showing. | 1114 // The after translate UI is showing. |
1062 EXPECT_TRUE(TranslateUiVisible()); | 1115 EXPECT_TRUE(TranslateUiVisible()); |
1063 | 1116 |
1064 // Remember infobar, so removal can be verified. | 1117 // Remember infobar, so removal can be verified. |
1065 translate::TranslateInfoBarDelegate* infobar = nullptr; | 1118 translate::TranslateInfoBarDelegate* infobar = nullptr; |
1066 if (!TranslateService::IsTranslateBubbleEnabled()) | 1119 if (!TranslateService::IsTranslateBubbleEnabled()) |
1067 infobar = GetTranslateInfoBar(); | 1120 infobar = GetTranslateInfoBar(); |
1068 | 1121 |
1069 // Navigate out of page, a new infobar should show. | 1122 // Navigate out of page, a new infobar should show. |
1070 // See note in TranslateCloseInfoBarInPageNavigation test on why it is | 1123 // See note in TranslateCloseInfoBarInPageNavigation test on why it is |
(...skipping 24 matching lines...) Expand all Loading... | |
1095 // The translation server might return a language we don't support. | 1148 // The translation server might return a language we don't support. |
1096 TEST_F(TranslateManagerRenderViewHostTest, ServerReportsUnsupportedLanguage) { | 1149 TEST_F(TranslateManagerRenderViewHostTest, ServerReportsUnsupportedLanguage) { |
1097 EnableBubbleTest(); | 1150 EnableBubbleTest(); |
1098 | 1151 |
1099 SimulateNavigation(GURL("http://mail.google.fr"), "fr", true); | 1152 SimulateNavigation(GURL("http://mail.google.fr"), "fr", true); |
1100 process()->sink().ClearMessages(); | 1153 process()->sink().ClearMessages(); |
1101 SimulateTranslatePress(); | 1154 SimulateTranslatePress(); |
1102 SimulateTranslateScriptURLFetch(true); | 1155 SimulateTranslateScriptURLFetch(true); |
1103 // Simulate the render notifying the translation has been done, but it | 1156 // Simulate the render notifying the translation has been done, but it |
1104 // reports a language we don't support. | 1157 // reports a language we don't support. |
1105 SimulateOnPageTranslated("qbz", "en"); | 1158 PreSetPageTranslatedResult("qbz", "en"); |
1106 | 1159 |
1107 // An error infobar should be showing to report that we don't support this | 1160 // An error infobar should be showing to report that we don't support this |
1108 // language. | 1161 // language. |
1109 EXPECT_EQ(translate::TRANSLATE_STEP_TRANSLATE_ERROR, CurrentStep()); | 1162 EXPECT_EQ(translate::TRANSLATE_STEP_TRANSLATE_ERROR, CurrentStep()); |
1110 | 1163 |
1111 // This infobar should have a button (so the string should not be empty). | 1164 // This infobar should have a button (so the string should not be empty). |
1112 // The error string on bubbles is currently not retrievable. | 1165 // The error string on bubbles is currently not retrievable. |
1113 // TODO(http://crbug.com/589301): OSX does not have an error view (yet). | 1166 // TODO(http://crbug.com/589301): OSX does not have an error view (yet). |
1114 if (!TranslateService::IsTranslateBubbleEnabled()) { | 1167 if (!TranslateService::IsTranslateBubbleEnabled()) { |
1115 translate::TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); | 1168 translate::TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); |
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1363 SimulateNavigation(GURL("http://www.google.fr"), "fr", true); | 1416 SimulateNavigation(GURL("http://www.google.fr"), "fr", true); |
1364 | 1417 |
1365 // It should have triggered an automatic translation to English. | 1418 // It should have triggered an automatic translation to English. |
1366 | 1419 |
1367 // The translating infobar should be showing. | 1420 // The translating infobar should be showing. |
1368 translate::TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); | 1421 translate::TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); |
1369 ASSERT_TRUE(infobar != NULL); | 1422 ASSERT_TRUE(infobar != NULL); |
1370 EXPECT_EQ(translate::TRANSLATE_STEP_TRANSLATING, infobar->translate_step()); | 1423 EXPECT_EQ(translate::TRANSLATE_STEP_TRANSLATING, infobar->translate_step()); |
1371 SimulateTranslateScriptURLFetch(true); | 1424 SimulateTranslateScriptURLFetch(true); |
1372 std::string original_lang, target_lang; | 1425 std::string original_lang, target_lang; |
1373 EXPECT_TRUE(GetTranslateMessage(&original_lang, &target_lang)); | 1426 EXPECT_TRUE(GetTranslateRequestAndReset(&original_lang, &target_lang)); |
1374 EXPECT_EQ("fr", original_lang); | 1427 EXPECT_EQ("fr", original_lang); |
1375 EXPECT_EQ("en", target_lang); | 1428 EXPECT_EQ("en", target_lang); |
1376 process()->sink().ClearMessages(); | 1429 process()->sink().ClearMessages(); |
1377 | 1430 |
1378 // Try another language, it should not be autotranslated. | 1431 // Try another language, it should not be autotranslated. |
1379 SimulateNavigation(GURL("http://www.google.es"), "es", true); | 1432 SimulateNavigation(GURL("http://www.google.es"), "es", true); |
1380 EXPECT_FALSE(GetTranslateMessage(&original_lang, &target_lang)); | 1433 EXPECT_FALSE(GetTranslateRequestAndReset(&original_lang, &target_lang)); |
1381 EXPECT_TRUE(GetTranslateInfoBar() != NULL); | 1434 EXPECT_TRUE(GetTranslateInfoBar() != NULL); |
1382 EXPECT_TRUE(CloseTranslateInfoBar()); | 1435 EXPECT_TRUE(CloseTranslateInfoBar()); |
1383 | 1436 |
1384 // Let's switch to incognito mode, it should not be autotranslated in that | 1437 // Let's switch to incognito mode, it should not be autotranslated in that |
1385 // case either. | 1438 // case either. |
1386 TestingProfile* test_profile = | 1439 TestingProfile* test_profile = |
1387 static_cast<TestingProfile*>(web_contents()->GetBrowserContext()); | 1440 static_cast<TestingProfile*>(web_contents()->GetBrowserContext()); |
1388 test_profile->ForceIncognito(true); | 1441 test_profile->ForceIncognito(true); |
1389 SimulateNavigation(GURL("http://www.youtube.fr"), "fr", true); | 1442 SimulateNavigation(GURL("http://www.youtube.fr"), "fr", true); |
1390 EXPECT_FALSE(GetTranslateMessage(&original_lang, &target_lang)); | 1443 EXPECT_FALSE(GetTranslateRequestAndReset(&original_lang, &target_lang)); |
1391 EXPECT_TRUE(GetTranslateInfoBar() != NULL); | 1444 EXPECT_TRUE(GetTranslateInfoBar() != NULL); |
1392 EXPECT_TRUE(CloseTranslateInfoBar()); | 1445 EXPECT_TRUE(CloseTranslateInfoBar()); |
1393 test_profile->ForceIncognito(false); // Get back to non incognito. | 1446 test_profile->ForceIncognito(false); // Get back to non incognito. |
1394 | 1447 |
1395 // Now revert the always translate pref and make sure we go back to expected | 1448 // Now revert the always translate pref and make sure we go back to expected |
1396 // behavior, which is show a "before translate" infobar. | 1449 // behavior, which is show a "before translate" infobar. |
1397 SetPrefObserverExpectation( | 1450 SetPrefObserverExpectation( |
1398 translate::TranslatePrefs::kPrefTranslateWhitelists); | 1451 translate::TranslatePrefs::kPrefTranslateWhitelists); |
1399 translate_prefs->RemoveLanguagePairFromWhitelist("fr", "en"); | 1452 translate_prefs->RemoveLanguagePairFromWhitelist("fr", "en"); |
1400 SimulateNavigation(GURL("http://www.google.fr"), "fr", true); | 1453 SimulateNavigation(GURL("http://www.google.fr"), "fr", true); |
1401 EXPECT_FALSE(GetTranslateMessage(&original_lang, &target_lang)); | 1454 EXPECT_FALSE(GetTranslateRequestAndReset(&original_lang, &target_lang)); |
1402 infobar = GetTranslateInfoBar(); | 1455 infobar = GetTranslateInfoBar(); |
1403 ASSERT_TRUE(infobar != NULL); | 1456 ASSERT_TRUE(infobar != NULL); |
1404 EXPECT_EQ(translate::TRANSLATE_STEP_BEFORE_TRANSLATE, | 1457 EXPECT_EQ(translate::TRANSLATE_STEP_BEFORE_TRANSLATE, |
1405 infobar->translate_step()); | 1458 infobar->translate_step()); |
1406 } | 1459 } |
1407 | 1460 |
1408 // Context menu. | 1461 // Context menu. |
1409 TEST_F(TranslateManagerRenderViewHostTest, ContextMenu) { | 1462 TEST_F(TranslateManagerRenderViewHostTest, ContextMenu) { |
1410 // TODO(port): Test corresponding bubble translate UX: http://crbug.com/383235 | 1463 // TODO(port): Test corresponding bubble translate UX: http://crbug.com/383235 |
1411 if (TranslateService::IsTranslateBubbleEnabled()) | 1464 if (TranslateService::IsTranslateBubbleEnabled()) |
(...skipping 28 matching lines...) Expand all Loading... | |
1440 // Use the menu to translate the page. | 1493 // Use the menu to translate the page. |
1441 menu->ExecuteCommand(IDC_CONTENT_CONTEXT_TRANSLATE, 0); | 1494 menu->ExecuteCommand(IDC_CONTENT_CONTEXT_TRANSLATE, 0); |
1442 | 1495 |
1443 // That should have triggered a translation. | 1496 // That should have triggered a translation. |
1444 // The "translating..." infobar should be showing. | 1497 // The "translating..." infobar should be showing. |
1445 translate::TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); | 1498 translate::TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); |
1446 ASSERT_TRUE(infobar != NULL); | 1499 ASSERT_TRUE(infobar != NULL); |
1447 EXPECT_EQ(translate::TRANSLATE_STEP_TRANSLATING, infobar->translate_step()); | 1500 EXPECT_EQ(translate::TRANSLATE_STEP_TRANSLATING, infobar->translate_step()); |
1448 SimulateTranslateScriptURLFetch(true); | 1501 SimulateTranslateScriptURLFetch(true); |
1449 std::string original_lang, target_lang; | 1502 std::string original_lang, target_lang; |
1450 EXPECT_TRUE(GetTranslateMessage(&original_lang, &target_lang)); | 1503 EXPECT_TRUE(GetTranslateRequestAndReset(&original_lang, &target_lang)); |
1451 EXPECT_EQ("fr", original_lang); | 1504 EXPECT_EQ("fr", original_lang); |
1452 EXPECT_EQ("en", target_lang); | 1505 EXPECT_EQ("en", target_lang); |
1453 process()->sink().ClearMessages(); | 1506 process()->sink().ClearMessages(); |
1454 | 1507 |
1455 // This should also have reverted the blacklisting of this site and language. | 1508 // This should also have reverted the blacklisting of this site and language. |
1456 EXPECT_FALSE(translate_prefs->IsBlockedLanguage("fr")); | 1509 EXPECT_FALSE(translate_prefs->IsBlockedLanguage("fr")); |
1457 EXPECT_FALSE(translate_prefs->IsSiteBlacklisted(url.host())); | 1510 EXPECT_FALSE(translate_prefs->IsSiteBlacklisted(url.host())); |
1458 | 1511 |
1459 // Let's simulate the page being translated. | 1512 // Let's simulate the page being translated. |
1460 SimulateOnPageTranslated("fr", "en"); | 1513 PreSetPageTranslatedResult("fr", "en"); |
1461 | 1514 |
1462 // The translate menu should now be disabled. | 1515 // The translate menu should now be disabled. |
1463 menu.reset(CreateContextMenu()); | 1516 menu.reset(CreateContextMenu()); |
1464 menu->Init(); | 1517 menu->Init(); |
1465 EXPECT_TRUE(menu->IsItemPresent(IDC_CONTENT_CONTEXT_TRANSLATE)); | 1518 EXPECT_TRUE(menu->IsItemPresent(IDC_CONTENT_CONTEXT_TRANSLATE)); |
1466 EXPECT_FALSE(menu->IsCommandIdEnabled(IDC_CONTENT_CONTEXT_TRANSLATE)); | 1519 EXPECT_FALSE(menu->IsCommandIdEnabled(IDC_CONTENT_CONTEXT_TRANSLATE)); |
1467 | 1520 |
1468 // Test that selecting translate in the context menu WHILE the page is being | 1521 // 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 | 1522 // translated does nothing (this could happen if autotranslate kicks-in and |
1470 // the user selects the menu while the translation is being performed). | 1523 // the user selects the menu while the translation is being performed). |
1471 SimulateNavigation(GURL("http://www.google.es"), "es", true); | 1524 SimulateNavigation(GURL("http://www.google.es"), "es", true); |
1472 infobar = GetTranslateInfoBar(); | 1525 infobar = GetTranslateInfoBar(); |
1473 ASSERT_TRUE(infobar != NULL); | 1526 ASSERT_TRUE(infobar != NULL); |
1474 infobar->Translate(); | 1527 infobar->Translate(); |
1475 EXPECT_TRUE(GetTranslateMessage(&original_lang, &target_lang)); | 1528 EXPECT_TRUE(GetTranslateRequestAndReset(&original_lang, &target_lang)); |
1476 process()->sink().ClearMessages(); | 1529 process()->sink().ClearMessages(); |
1477 menu.reset(CreateContextMenu()); | 1530 menu.reset(CreateContextMenu()); |
1478 menu->Init(); | 1531 menu->Init(); |
1479 EXPECT_TRUE(menu->IsCommandIdEnabled(IDC_CONTENT_CONTEXT_TRANSLATE)); | 1532 EXPECT_TRUE(menu->IsCommandIdEnabled(IDC_CONTENT_CONTEXT_TRANSLATE)); |
1480 menu->ExecuteCommand(IDC_CONTENT_CONTEXT_TRANSLATE, 0); | 1533 menu->ExecuteCommand(IDC_CONTENT_CONTEXT_TRANSLATE, 0); |
1481 // No message expected since the translation should have been ignored. | 1534 // No message expected since the translation should have been ignored. |
1482 EXPECT_FALSE(GetTranslateMessage(&original_lang, &target_lang)); | 1535 EXPECT_FALSE(GetTranslateRequestAndReset(&original_lang, &target_lang)); |
1483 | 1536 |
1484 // Now test that selecting translate in the context menu AFTER the page has | 1537 // Now test that selecting translate in the context menu AFTER the page has |
1485 // been translated does nothing. | 1538 // been translated does nothing. |
1486 SimulateNavigation(GURL("http://www.google.de"), "de", true); | 1539 SimulateNavigation(GURL("http://www.google.de"), "de", true); |
1487 infobar = GetTranslateInfoBar(); | 1540 infobar = GetTranslateInfoBar(); |
1488 ASSERT_TRUE(infobar != NULL); | 1541 ASSERT_TRUE(infobar != NULL); |
1489 infobar->Translate(); | 1542 infobar->Translate(); |
1490 EXPECT_TRUE(GetTranslateMessage(&original_lang, &target_lang)); | 1543 EXPECT_TRUE(GetTranslateRequestAndReset(&original_lang, &target_lang)); |
1491 process()->sink().ClearMessages(); | 1544 process()->sink().ClearMessages(); |
1492 menu.reset(CreateContextMenu()); | 1545 menu.reset(CreateContextMenu()); |
1493 menu->Init(); | 1546 menu->Init(); |
1494 EXPECT_TRUE(menu->IsCommandIdEnabled(IDC_CONTENT_CONTEXT_TRANSLATE)); | 1547 EXPECT_TRUE(menu->IsCommandIdEnabled(IDC_CONTENT_CONTEXT_TRANSLATE)); |
1495 SimulateOnPageTranslated("de", "en"); | 1548 PreSetPageTranslatedResult("de", "en"); |
1496 menu->ExecuteCommand(IDC_CONTENT_CONTEXT_TRANSLATE, 0); | 1549 menu->ExecuteCommand(IDC_CONTENT_CONTEXT_TRANSLATE, 0); |
1497 // No message expected since the translation should have been ignored. | 1550 // No message expected since the translation should have been ignored. |
1498 EXPECT_FALSE(GetTranslateMessage(&original_lang, &target_lang)); | 1551 EXPECT_FALSE(GetTranslateRequestAndReset(&original_lang, &target_lang)); |
1499 | 1552 |
1500 // Test that the translate context menu is enabled when the page is in an | 1553 // Test that the translate context menu is enabled when the page is in an |
1501 // unknown language. | 1554 // unknown language. |
1502 SimulateNavigation(url, "und", true); | 1555 SimulateNavigation(url, "und", true); |
1503 menu.reset(CreateContextMenu()); | 1556 menu.reset(CreateContextMenu()); |
1504 menu->Init(); | 1557 menu->Init(); |
1505 EXPECT_TRUE(menu->IsItemPresent(IDC_CONTENT_CONTEXT_TRANSLATE)); | 1558 EXPECT_TRUE(menu->IsItemPresent(IDC_CONTENT_CONTEXT_TRANSLATE)); |
1506 EXPECT_TRUE(menu->IsCommandIdEnabled(IDC_CONTENT_CONTEXT_TRANSLATE)); | 1559 EXPECT_TRUE(menu->IsCommandIdEnabled(IDC_CONTENT_CONTEXT_TRANSLATE)); |
1507 | 1560 |
1508 // Test that the translate context menu is enabled even if the page is in an | 1561 // Test that the translate context menu is enabled even if the page is in an |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1556 test_profile->ForceIncognito(false); | 1609 test_profile->ForceIncognito(false); |
1557 } | 1610 } |
1558 // Simulate the user pressing "Always translate French". | 1611 // Simulate the user pressing "Always translate French". |
1559 infobar->AlwaysTranslatePageLanguage(); | 1612 infobar->AlwaysTranslatePageLanguage(); |
1560 EXPECT_TRUE(translate_prefs->IsLanguagePairWhitelisted("fr", "en")); | 1613 EXPECT_TRUE(translate_prefs->IsLanguagePairWhitelisted("fr", "en")); |
1561 // Simulate the translate script being retrieved (it only needs to be done | 1614 // Simulate the translate script being retrieved (it only needs to be done |
1562 // once in the test as it is cached). | 1615 // once in the test as it is cached). |
1563 SimulateTranslateScriptURLFetch(true); | 1616 SimulateTranslateScriptURLFetch(true); |
1564 // That should have triggered a page translate. | 1617 // That should have triggered a page translate. |
1565 std::string original_lang, target_lang; | 1618 std::string original_lang, target_lang; |
1566 EXPECT_TRUE(GetTranslateMessage(&original_lang, &target_lang)); | 1619 EXPECT_TRUE(GetTranslateRequestAndReset(&original_lang, &target_lang)); |
1567 process()->sink().ClearMessages(); | 1620 process()->sink().ClearMessages(); |
1568 | 1621 |
1569 // Now test that declining the translation causes a "never translate" button | 1622 // Now test that declining the translation causes a "never translate" button |
1570 // to be shown (in non incognito mode only). | 1623 // to be shown (in non incognito mode only). |
1571 test_profile->ForceIncognito(true); | 1624 test_profile->ForceIncognito(true); |
1572 for (int i = 0; i < 8; ++i) { | 1625 for (int i = 0; i < 8; ++i) { |
1573 SCOPED_TRACE(::testing::Message() << "Iteration " << i << " incognito mode=" | 1626 SCOPED_TRACE(::testing::Message() << "Iteration " << i << " incognito mode=" |
1574 << test_profile->IsOffTheRecord()); | 1627 << test_profile->IsOffTheRecord()); |
1575 SimulateNavigation(GURL("http://www.google.de"), "de", true); | 1628 SimulateNavigation(GURL("http://www.google.de"), "de", true); |
1576 infobar = GetTranslateInfoBar(); | 1629 infobar = GetTranslateInfoBar(); |
1577 ASSERT_TRUE(infobar != NULL); | 1630 ASSERT_TRUE(infobar != NULL); |
1578 EXPECT_EQ(translate::TRANSLATE_STEP_BEFORE_TRANSLATE, | 1631 EXPECT_EQ(translate::TRANSLATE_STEP_BEFORE_TRANSLATE, |
1579 infobar->translate_step()); | 1632 infobar->translate_step()); |
1580 if (i < 7) { | 1633 if (i < 7) { |
1581 EXPECT_FALSE(infobar->ShouldShowNeverTranslateShortcut()); | 1634 EXPECT_FALSE(infobar->ShouldShowNeverTranslateShortcut()); |
1582 infobar->TranslationDeclined(); | 1635 infobar->TranslationDeclined(); |
1583 } else { | 1636 } else { |
1584 EXPECT_TRUE(infobar->ShouldShowNeverTranslateShortcut()); | 1637 EXPECT_TRUE(infobar->ShouldShowNeverTranslateShortcut()); |
1585 } | 1638 } |
1586 if (i == 3) | 1639 if (i == 3) |
1587 test_profile->ForceIncognito(false); | 1640 test_profile->ForceIncognito(false); |
1588 } | 1641 } |
1589 // Simulate the user pressing "Never translate French". | 1642 // Simulate the user pressing "Never translate French". |
1590 infobar->NeverTranslatePageLanguage(); | 1643 infobar->NeverTranslatePageLanguage(); |
1591 EXPECT_TRUE(translate_prefs->IsBlockedLanguage("de")); | 1644 EXPECT_TRUE(translate_prefs->IsBlockedLanguage("de")); |
1592 // No translation should have occured and the infobar should be gone. | 1645 // No translation should have occured and the infobar should be gone. |
1593 EXPECT_FALSE(GetTranslateMessage(&original_lang, &target_lang)); | 1646 EXPECT_FALSE(GetTranslateRequestAndReset(&original_lang, &target_lang)); |
1594 process()->sink().ClearMessages(); | 1647 process()->sink().ClearMessages(); |
1595 ASSERT_TRUE(GetTranslateInfoBar() == NULL); | 1648 ASSERT_TRUE(GetTranslateInfoBar() == NULL); |
1596 } | 1649 } |
1597 | 1650 |
1598 // Tests that we don't show a translate infobar when a page instructs that it | 1651 // Tests that we don't show a translate infobar when a page instructs that it |
1599 // should not be translated. | 1652 // should not be translated. |
1600 TEST_F(TranslateManagerRenderViewHostTest, NonTranslatablePage) { | 1653 TEST_F(TranslateManagerRenderViewHostTest, NonTranslatablePage) { |
1601 // TODO(port): Test corresponding bubble translate UX: http://crbug.com/383235 | 1654 // TODO(port): Test corresponding bubble translate UX: http://crbug.com/383235 |
1602 if (TranslateService::IsTranslateBubbleEnabled()) | 1655 if (TranslateService::IsTranslateBubbleEnabled()) |
1603 return; | 1656 return; |
(...skipping 17 matching lines...) Expand all Loading... | |
1621 return; | 1674 return; |
1622 | 1675 |
1623 ExpireTranslateScriptImmediately(); | 1676 ExpireTranslateScriptImmediately(); |
1624 | 1677 |
1625 SimulateNavigation(GURL("http://www.google.fr"), "fr", true); | 1678 SimulateNavigation(GURL("http://www.google.fr"), "fr", true); |
1626 translate::TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); | 1679 translate::TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); |
1627 ASSERT_TRUE(infobar != NULL); | 1680 ASSERT_TRUE(infobar != NULL); |
1628 process()->sink().ClearMessages(); | 1681 process()->sink().ClearMessages(); |
1629 infobar->Translate(); | 1682 infobar->Translate(); |
1630 SimulateTranslateScriptURLFetch(true); | 1683 SimulateTranslateScriptURLFetch(true); |
1631 SimulateOnPageTranslated("fr", "en"); | 1684 PreSetPageTranslatedResult("fr", "en"); |
1632 | 1685 |
1633 // A task should have been posted to clear the script, run it. | 1686 // A task should have been posted to clear the script, run it. |
1634 base::RunLoop().RunUntilIdle(); | 1687 base::RunLoop().RunUntilIdle(); |
1635 | 1688 |
1636 // Do another navigation and translation. | 1689 // Do another navigation and translation. |
1637 SimulateNavigation(GURL("http://www.google.es"), "es", true); | 1690 SimulateNavigation(GURL("http://www.google.es"), "es", true); |
1638 infobar = GetTranslateInfoBar(); | 1691 infobar = GetTranslateInfoBar(); |
1639 ASSERT_TRUE(infobar != NULL); | 1692 ASSERT_TRUE(infobar != NULL); |
1640 process()->sink().ClearMessages(); | 1693 process()->sink().ClearMessages(); |
1641 infobar->Translate(); | 1694 infobar->Translate(); |
1642 // If we don't simulate the URL fetch, the TranslateManager should be waiting | 1695 // 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. | 1696 // for the script and no message should have been sent to the renderer. |
1644 EXPECT_TRUE(process()->sink().GetFirstMessageMatching( | 1697 EXPECT_TRUE(process()->sink().GetFirstMessageMatching( |
1645 ChromeFrameMsg_TranslatePage::ID) == NULL); | 1698 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(GetTranslateRequestAndReset(&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) { |
1656 ASSERT_FALSE( | 1709 ASSERT_FALSE( |
1657 TranslateService::IsTranslatableURL(GURL(chrome::kChromeUIDownloadsURL))); | 1710 TranslateService::IsTranslatableURL(GURL(chrome::kChromeUIDownloadsURL))); |
1658 ASSERT_FALSE( | 1711 ASSERT_FALSE( |
1659 TranslateService::IsTranslatableURL(GURL(chrome::kChromeUIHistoryURL))); | 1712 TranslateService::IsTranslatableURL(GURL(chrome::kChromeUIHistoryURL))); |
1660 } | 1713 } |
(...skipping 25 matching lines...) Expand all Loading... | |
1686 bubble = factory->model(); | 1739 bubble = factory->model(); |
1687 ASSERT_TRUE(bubble != NULL); | 1740 ASSERT_TRUE(bubble != NULL); |
1688 EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_TRANSLATING, | 1741 EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_TRANSLATING, |
1689 bubble->GetViewState()); | 1742 bubble->GetViewState()); |
1690 | 1743 |
1691 // Simulate the translate script being retrieved (it only needs to be done | 1744 // Simulate the translate script being retrieved (it only needs to be done |
1692 // once in the test as it is cached). | 1745 // once in the test as it is cached). |
1693 SimulateTranslateScriptURLFetch(true); | 1746 SimulateTranslateScriptURLFetch(true); |
1694 | 1747 |
1695 // Simulate the render notifying the translation has been done. | 1748 // Simulate the render notifying the translation has been done. |
1696 SimulateOnPageTranslated("fr", "en"); | 1749 PreSetPageTranslatedResult("fr", "en"); |
1697 | 1750 |
1698 // Check the bubble shows "Translated." | 1751 // Check the bubble shows "Translated." |
1699 bubble = factory->model(); | 1752 bubble = factory->model(); |
1700 ASSERT_TRUE(bubble != NULL); | 1753 ASSERT_TRUE(bubble != NULL); |
1701 EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_AFTER_TRANSLATE, | 1754 EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_AFTER_TRANSLATE, |
1702 bubble->GetViewState()); | 1755 bubble->GetViewState()); |
1703 } | 1756 } |
1704 | 1757 |
1705 TEST_F(TranslateManagerRenderViewHostTest, BubbleTranslateScriptNotAvailable) { | 1758 TEST_F(TranslateManagerRenderViewHostTest, BubbleTranslateScriptNotAvailable) { |
1706 // See TranslateScriptNotAvailable for corresponding infobar UX testing. | 1759 // See TranslateScriptNotAvailable for corresponding infobar UX testing. |
(...skipping 13 matching lines...) Expand all Loading... | |
1720 ASSERT_TRUE(bubble != NULL); | 1773 ASSERT_TRUE(bubble != NULL); |
1721 EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_BEFORE_TRANSLATE, | 1774 EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_BEFORE_TRANSLATE, |
1722 bubble->GetViewState()); | 1775 bubble->GetViewState()); |
1723 | 1776 |
1724 // Simulate clicking translate. | 1777 // Simulate clicking translate. |
1725 process()->sink().ClearMessages(); | 1778 process()->sink().ClearMessages(); |
1726 bubble->Translate(); | 1779 bubble->Translate(); |
1727 SimulateTranslateScriptURLFetch(false); | 1780 SimulateTranslateScriptURLFetch(false); |
1728 | 1781 |
1729 // We should not have sent any message to translate to the renderer. | 1782 // We should not have sent any message to translate to the renderer. |
1730 EXPECT_FALSE(GetTranslateMessage(NULL, NULL)); | 1783 EXPECT_FALSE(GetTranslateRequestAndReset(NULL, NULL)); |
1731 | 1784 |
1732 // And we should have an error infobar showing. | 1785 // And we should have an error infobar showing. |
1733 bubble = factory->model(); | 1786 bubble = factory->model(); |
1734 ASSERT_TRUE(bubble != NULL); | 1787 ASSERT_TRUE(bubble != NULL); |
1735 EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_ERROR, bubble->GetViewState()); | 1788 EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_ERROR, bubble->GetViewState()); |
1736 } | 1789 } |
1737 | 1790 |
1738 TEST_F(TranslateManagerRenderViewHostTest, BubbleUnknownLanguage) { | 1791 TEST_F(TranslateManagerRenderViewHostTest, BubbleUnknownLanguage) { |
1739 // See TranslateUnknownLanguage for corresponding infobar UX testing. | 1792 // See TranslateUnknownLanguage for corresponding infobar UX testing. |
1740 if (!TranslateService::IsTranslateBubbleEnabled()) | 1793 if (!TranslateService::IsTranslateBubbleEnabled()) |
(...skipping 17 matching lines...) Expand all Loading... | |
1758 | 1811 |
1759 // Check the bubble exists instead of the infobar. | 1812 // Check the bubble exists instead of the infobar. |
1760 translate::TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); | 1813 translate::TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); |
1761 ASSERT_TRUE(infobar == NULL); | 1814 ASSERT_TRUE(infobar == NULL); |
1762 TranslateBubbleModel* bubble = factory->model(); | 1815 TranslateBubbleModel* bubble = factory->model(); |
1763 ASSERT_TRUE(bubble != NULL); | 1816 ASSERT_TRUE(bubble != NULL); |
1764 EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_TRANSLATING, | 1817 EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_TRANSLATING, |
1765 bubble->GetViewState()); | 1818 bubble->GetViewState()); |
1766 } | 1819 } |
1767 #endif // defined(USE_AURA) | 1820 #endif // defined(USE_AURA) |
1821 #endif | |
OLD | NEW |