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

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

Powered by Google App Engine
This is Rietveld 408576698