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