Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(187)

Side by Side Diff: chrome/browser/translate/translate_manager_render_view_host_unittest.cc

Issue 2143383002: [Translate] Migrate IPCs to Mojo interfaces. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add browser tests. No gyp, No unit tests Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698