| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 <algorithm> | 5 #include <algorithm> |
| 6 #include <set> | 6 #include <set> |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
| 11 #include "base/prefs/pref_change_registrar.h" | 11 #include "base/prefs/pref_change_registrar.h" |
| 12 #include "base/prefs/pref_service.h" | 12 #include "base/prefs/pref_service.h" |
| 13 #include "base/strings/stringprintf.h" | 13 #include "base/strings/stringprintf.h" |
| 14 #include "chrome/app/chrome_command_ids.h" | 14 #include "chrome/app/chrome_command_ids.h" |
| 15 #include "chrome/browser/chrome_notification_types.h" | 15 #include "chrome/browser/chrome_notification_types.h" |
| 16 #include "chrome/browser/extensions/test_extension_system.h" | 16 #include "chrome/browser/extensions/test_extension_system.h" |
| 17 #include "chrome/browser/infobars/infobar.h" | 17 #include "chrome/browser/infobars/infobar.h" |
| 18 #include "chrome/browser/infobars/infobar_service.h" | 18 #include "chrome/browser/infobars/infobar_service.h" |
| 19 #include "chrome/browser/prefs/session_startup_pref.h" | 19 #include "chrome/browser/prefs/session_startup_pref.h" |
| 20 #include "chrome/browser/tab_contents/render_view_context_menu.h" | 20 #include "chrome/browser/tab_contents/render_view_context_menu.h" |
| 21 #include "chrome/browser/translate/translate_infobar_delegate.h" | 21 #include "chrome/browser/translate/translate_infobar_delegate.h" |
| 22 #include "chrome/browser/translate/translate_language_list.h" | |
| 23 #include "chrome/browser/translate/translate_manager.h" | 22 #include "chrome/browser/translate/translate_manager.h" |
| 24 #include "chrome/browser/translate/translate_prefs.h" | 23 #include "chrome/browser/translate/translate_prefs.h" |
| 25 #include "chrome/browser/translate/translate_script.h" | 24 #include "chrome/browser/translate/translate_script.h" |
| 26 #include "chrome/browser/translate/translate_service.h" | 25 #include "chrome/browser/translate/translate_service.h" |
| 27 #include "chrome/browser/translate/translate_tab_helper.h" | 26 #include "chrome/browser/translate/translate_tab_helper.h" |
| 28 #include "chrome/browser/ui/browser.h" | 27 #include "chrome/browser/ui/browser.h" |
| 29 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 28 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
| 30 #include "chrome/browser/ui/translate/translate_bubble_factory.h" | 29 #include "chrome/browser/ui/translate/translate_bubble_factory.h" |
| 31 #include "chrome/browser/ui/translate/translate_bubble_model.h" | 30 #include "chrome/browser/ui/translate/translate_bubble_model.h" |
| 32 #include "chrome/browser/ui/translate/translate_bubble_model_impl.h" | 31 #include "chrome/browser/ui/translate/translate_bubble_model_impl.h" |
| 33 #include "chrome/common/chrome_switches.h" | 32 #include "chrome/common/chrome_switches.h" |
| 34 #include "chrome/common/pref_names.h" | 33 #include "chrome/common/pref_names.h" |
| 35 #include "chrome/common/render_messages.h" | 34 #include "chrome/common/render_messages.h" |
| 36 #include "chrome/common/url_constants.h" | 35 #include "chrome/common/url_constants.h" |
| 37 #include "chrome/test/base/chrome_render_view_host_test_harness.h" | 36 #include "chrome/test/base/chrome_render_view_host_test_harness.h" |
| 38 #include "chrome/test/base/in_process_browser_test.h" | 37 #include "chrome/test/base/in_process_browser_test.h" |
| 39 #include "chrome/test/base/testing_browser_process.h" | 38 #include "chrome/test/base/testing_browser_process.h" |
| 40 #include "chrome/test/base/testing_profile.h" | 39 #include "chrome/test/base/testing_profile.h" |
| 41 #include "chrome/test/base/ui_test_utils.h" | 40 #include "chrome/test/base/ui_test_utils.h" |
| 42 #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" |
| 43 #include "components/translate/core/common/language_detection_details.h" | 43 #include "components/translate/core/common/language_detection_details.h" |
| 44 #include "components/translate/core/common/translate_pref_names.h" |
| 44 #include "content/public/browser/navigation_details.h" | 45 #include "content/public/browser/navigation_details.h" |
| 45 #include "content/public/browser/navigation_entry.h" | 46 #include "content/public/browser/navigation_entry.h" |
| 46 #include "content/public/browser/notification_details.h" | 47 #include "content/public/browser/notification_details.h" |
| 47 #include "content/public/browser/notification_registrar.h" | 48 #include "content/public/browser/notification_registrar.h" |
| 48 #include "content/public/browser/web_contents.h" | 49 #include "content/public/browser/web_contents.h" |
| 49 #include "content/public/test/mock_render_process_host.h" | 50 #include "content/public/test/mock_render_process_host.h" |
| 50 #include "content/public/test/test_renderer_host.h" | 51 #include "content/public/test/test_renderer_host.h" |
| 51 #include "net/url_request/test_url_fetcher_factory.h" | 52 #include "net/url_request/test_url_fetcher_factory.h" |
| 52 #include "net/url_request/url_fetcher_delegate.h" | 53 #include "net/url_request/url_fetcher_delegate.h" |
| 53 #include "testing/gmock/include/gmock/gmock.h" | 54 #include "testing/gmock/include/gmock/gmock.h" |
| (...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 356 TranslateErrors::Type error_type) OVERRIDE { | 357 TranslateErrors::Type error_type) OVERRIDE { |
| 357 if (model_) { | 358 if (model_) { |
| 358 model_->SetViewState(view_state); | 359 model_->SetViewState(view_state); |
| 359 return; | 360 return; |
| 360 } | 361 } |
| 361 | 362 |
| 362 TranslateTabHelper* translate_tab_helper = | 363 TranslateTabHelper* translate_tab_helper = |
| 363 TranslateTabHelper::FromWebContents(web_contents); | 364 TranslateTabHelper::FromWebContents(web_contents); |
| 364 std::string source_language = | 365 std::string source_language = |
| 365 translate_tab_helper->GetLanguageState().original_language(); | 366 translate_tab_helper->GetLanguageState().original_language(); |
| 366 std::string target_language = TranslateManager::GetLanguageCode( | 367 std::string target_language = TranslateDownloadManager::GetLanguageCode( |
| 367 g_browser_process->GetApplicationLocale()); | 368 g_browser_process->GetApplicationLocale()); |
| 368 scoped_ptr<TranslateUIDelegate> ui_delegate( | 369 scoped_ptr<TranslateUIDelegate> ui_delegate( |
| 369 new TranslateUIDelegate(web_contents, | 370 new TranslateUIDelegate(web_contents, |
| 370 source_language, | 371 source_language, |
| 371 target_language)); | 372 target_language)); |
| 372 model_.reset( | 373 model_.reset( |
| 373 new TranslateBubbleModelImpl(view_state, ui_delegate.Pass())); | 374 new TranslateBubbleModelImpl(view_state, ui_delegate.Pass())); |
| 374 } | 375 } |
| 375 | 376 |
| 376 TranslateBubbleModel* model() { return model_.get(); } | 377 TranslateBubbleModel* model() { return model_.get(); } |
| (...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 614 " language=" << lang); | 615 " language=" << lang); |
| 615 | 616 |
| 616 // We should not have a translate infobar. | 617 // We should not have a translate infobar. |
| 617 TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); | 618 TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); |
| 618 ASSERT_TRUE(infobar == NULL); | 619 ASSERT_TRUE(infobar == NULL); |
| 619 | 620 |
| 620 SimulateNavigation(url, lang, true); | 621 SimulateNavigation(url, lang, true); |
| 621 | 622 |
| 622 // Verify we have/don't have an info-bar as expected. | 623 // Verify we have/don't have an info-bar as expected. |
| 623 infobar = GetTranslateInfoBar(); | 624 infobar = GetTranslateInfoBar(); |
| 624 bool expected = TranslateManager::IsSupportedLanguage(lang) && | 625 bool expected = |
| 625 lang != "en"; | 626 TranslateDownloadManager::IsSupportedLanguage(lang) && lang != "en"; |
| 626 EXPECT_EQ(expected, infobar != NULL); | 627 EXPECT_EQ(expected, infobar != NULL); |
| 627 | 628 |
| 628 if (infobar != NULL) | 629 if (infobar != NULL) |
| 629 EXPECT_TRUE(CloseTranslateInfoBar()); | 630 EXPECT_TRUE(CloseTranslateInfoBar()); |
| 630 } | 631 } |
| 631 } | 632 } |
| 632 | 633 |
| 633 // Test the fetching of languages from the translate server | 634 // Test the fetching of languages from the translate server |
| 634 TEST_F(TranslateManagerBrowserTest, FetchLanguagesFromTranslateServer) { | 635 TEST_F(TranslateManagerBrowserTest, FetchLanguagesFromTranslateServer) { |
| 635 std::vector<std::string> server_languages; | 636 std::vector<std::string> server_languages; |
| 636 // A list of languages to fake being returned by the translate server. | 637 // A list of languages to fake being returned by the translate server. |
| 637 server_languages.push_back("aa"); | 638 server_languages.push_back("aa"); |
| 638 server_languages.push_back("ak"); | 639 server_languages.push_back("ak"); |
| 639 server_languages.push_back("ab"); | 640 server_languages.push_back("ab"); |
| 640 server_languages.push_back("en-CA"); | 641 server_languages.push_back("en-CA"); |
| 641 server_languages.push_back("zh"); | 642 server_languages.push_back("zh"); |
| 642 server_languages.push_back("yi"); | 643 server_languages.push_back("yi"); |
| 643 server_languages.push_back("fr-FR"); | 644 server_languages.push_back("fr-FR"); |
| 644 server_languages.push_back("xx"); | 645 server_languages.push_back("xx"); |
| 645 | 646 |
| 646 std::vector<std::string> alpha_languages; | 647 std::vector<std::string> alpha_languages; |
| 647 alpha_languages.push_back("aa"); | 648 alpha_languages.push_back("aa"); |
| 648 alpha_languages.push_back("yi"); | 649 alpha_languages.push_back("yi"); |
| 649 | 650 |
| 650 // First, get the default languages list. Note that calling | 651 // First, get the default languages list. Note that calling |
| 651 // GetSupportedLanguages() invokes RequestLanguageList() internally. | 652 // GetSupportedLanguages() invokes RequestLanguageList() internally. |
| 652 std::vector<std::string> default_supported_languages; | 653 std::vector<std::string> default_supported_languages; |
| 653 TranslateManager::GetSupportedLanguages(&default_supported_languages); | 654 TranslateDownloadManager::GetSupportedLanguages(&default_supported_languages); |
| 654 // To make sure we got the defaults and don't confuse them with the mocks. | 655 // To make sure we got the defaults and don't confuse them with the mocks. |
| 655 ASSERT_NE(default_supported_languages.size(), server_languages.size()); | 656 ASSERT_NE(default_supported_languages.size(), server_languages.size()); |
| 656 | 657 |
| 657 // Check that we still get the defaults until the URLFetch has completed. | 658 // Check that we still get the defaults until the URLFetch has completed. |
| 658 std::vector<std::string> current_supported_languages; | 659 std::vector<std::string> current_supported_languages; |
| 659 TranslateManager::GetSupportedLanguages(¤t_supported_languages); | 660 TranslateDownloadManager::GetSupportedLanguages(¤t_supported_languages); |
| 660 EXPECT_EQ(default_supported_languages, current_supported_languages); | 661 EXPECT_EQ(default_supported_languages, current_supported_languages); |
| 661 | 662 |
| 662 // Also check that it didn't change if we failed the URL fetch. | 663 // Also check that it didn't change if we failed the URL fetch. |
| 663 SimulateSupportedLanguagesURLFetch(false, std::vector<std::string>(), | 664 SimulateSupportedLanguagesURLFetch(false, std::vector<std::string>(), |
| 664 true, std::vector<std::string>()); | 665 true, std::vector<std::string>()); |
| 665 current_supported_languages.clear(); | 666 current_supported_languages.clear(); |
| 666 TranslateManager::GetSupportedLanguages(¤t_supported_languages); | 667 TranslateDownloadManager::GetSupportedLanguages(¤t_supported_languages); |
| 667 EXPECT_EQ(default_supported_languages, current_supported_languages); | 668 EXPECT_EQ(default_supported_languages, current_supported_languages); |
| 668 | 669 |
| 669 // Now check that we got the appropriate set of languages from the server. | 670 // Now check that we got the appropriate set of languages from the server. |
| 670 SimulateSupportedLanguagesURLFetch(true, server_languages, | 671 SimulateSupportedLanguagesURLFetch(true, server_languages, |
| 671 true, alpha_languages); | 672 true, alpha_languages); |
| 672 current_supported_languages.clear(); | 673 current_supported_languages.clear(); |
| 673 TranslateManager::GetSupportedLanguages(¤t_supported_languages); | 674 TranslateDownloadManager::GetSupportedLanguages(¤t_supported_languages); |
| 674 // "xx" can't be displayed in the Translate inforbar, so this is eliminated. | 675 // "xx" can't be displayed in the Translate inforbar, so this is eliminated. |
| 675 EXPECT_EQ(server_languages.size() - 1, current_supported_languages.size()); | 676 EXPECT_EQ(server_languages.size() - 1, current_supported_languages.size()); |
| 676 // Not sure we need to guarantee the order of languages, so we find them. | 677 // Not sure we need to guarantee the order of languages, so we find them. |
| 677 for (size_t i = 0; i < server_languages.size(); ++i) { | 678 for (size_t i = 0; i < server_languages.size(); ++i) { |
| 678 const std::string& lang = server_languages[i]; | 679 const std::string& lang = server_languages[i]; |
| 679 if (lang == "xx") | 680 if (lang == "xx") |
| 680 continue; | 681 continue; |
| 681 EXPECT_NE(current_supported_languages.end(), | 682 EXPECT_NE(current_supported_languages.end(), |
| 682 std::find(current_supported_languages.begin(), | 683 std::find(current_supported_languages.begin(), |
| 683 current_supported_languages.end(), | 684 current_supported_languages.end(), |
| 684 lang)); | 685 lang)); |
| 685 bool is_alpha = std::find(alpha_languages.begin(), | 686 bool is_alpha = std::find(alpha_languages.begin(), |
| 686 alpha_languages.end(), | 687 alpha_languages.end(), |
| 687 lang) != alpha_languages.end(); | 688 lang) != alpha_languages.end(); |
| 688 EXPECT_EQ(TranslateManager::IsAlphaLanguage(lang), is_alpha); | 689 EXPECT_EQ(TranslateDownloadManager::IsAlphaLanguage(lang), is_alpha); |
| 689 } | 690 } |
| 690 } | 691 } |
| 691 | 692 |
| 692 // Test the fetching of languages from the translate server without 'al' | 693 // Test the fetching of languages from the translate server without 'al' |
| 693 // parameter. | 694 // parameter. |
| 694 TEST_F(TranslateManagerBrowserTest, | 695 TEST_F(TranslateManagerBrowserTest, |
| 695 FetchLanguagesFromTranslateServerWithoutAlpha) { | 696 FetchLanguagesFromTranslateServerWithoutAlpha) { |
| 696 std::vector<std::string> server_languages; | 697 std::vector<std::string> server_languages; |
| 697 server_languages.push_back("aa"); | 698 server_languages.push_back("aa"); |
| 698 server_languages.push_back("ak"); | 699 server_languages.push_back("ak"); |
| 699 server_languages.push_back("ab"); | 700 server_languages.push_back("ab"); |
| 700 server_languages.push_back("en-CA"); | 701 server_languages.push_back("en-CA"); |
| 701 server_languages.push_back("zh"); | 702 server_languages.push_back("zh"); |
| 702 server_languages.push_back("yi"); | 703 server_languages.push_back("yi"); |
| 703 server_languages.push_back("fr-FR"); | 704 server_languages.push_back("fr-FR"); |
| 704 server_languages.push_back("xx"); | 705 server_languages.push_back("xx"); |
| 705 | 706 |
| 706 std::vector<std::string> alpha_languages; | 707 std::vector<std::string> alpha_languages; |
| 707 alpha_languages.push_back("aa"); | 708 alpha_languages.push_back("aa"); |
| 708 alpha_languages.push_back("yi"); | 709 alpha_languages.push_back("yi"); |
| 709 | 710 |
| 710 // call GetSupportedLanguages to call RequestLanguageList internally. | 711 // call GetSupportedLanguages to call RequestLanguageList internally. |
| 711 std::vector<std::string> default_supported_languages; | 712 std::vector<std::string> default_supported_languages; |
| 712 TranslateManager::GetSupportedLanguages(&default_supported_languages); | 713 TranslateDownloadManager::GetSupportedLanguages(&default_supported_languages); |
| 713 | 714 |
| 714 SimulateSupportedLanguagesURLFetch(true, server_languages, | 715 SimulateSupportedLanguagesURLFetch(true, server_languages, |
| 715 false, alpha_languages); | 716 false, alpha_languages); |
| 716 | 717 |
| 717 std::vector<std::string> current_supported_languages; | 718 std::vector<std::string> current_supported_languages; |
| 718 TranslateManager::GetSupportedLanguages(¤t_supported_languages); | 719 TranslateDownloadManager::GetSupportedLanguages(¤t_supported_languages); |
| 719 | 720 |
| 720 // "xx" can't be displayed in the Translate inforbar, so this is eliminated. | 721 // "xx" can't be displayed in the Translate inforbar, so this is eliminated. |
| 721 EXPECT_EQ(server_languages.size() - 1, current_supported_languages.size()); | 722 EXPECT_EQ(server_languages.size() - 1, current_supported_languages.size()); |
| 722 | 723 |
| 723 for (size_t i = 0; i < server_languages.size(); ++i) { | 724 for (size_t i = 0; i < server_languages.size(); ++i) { |
| 724 const std::string& lang = server_languages[i]; | 725 const std::string& lang = server_languages[i]; |
| 725 if (lang == "xx") | 726 if (lang == "xx") |
| 726 continue; | 727 continue; |
| 727 EXPECT_NE(current_supported_languages.end(), | 728 EXPECT_NE(current_supported_languages.end(), |
| 728 std::find(current_supported_languages.begin(), | 729 std::find(current_supported_languages.begin(), |
| 729 current_supported_languages.end(), | 730 current_supported_languages.end(), |
| 730 lang)); | 731 lang)); |
| 731 EXPECT_FALSE(TranslateManager::IsAlphaLanguage(lang)); | 732 EXPECT_FALSE(TranslateDownloadManager::IsAlphaLanguage(lang)); |
| 732 } | 733 } |
| 733 } | 734 } |
| 734 | 735 |
| 735 // Tests auto-translate on page. | 736 // Tests auto-translate on page. |
| 736 TEST_F(TranslateManagerBrowserTest, AutoTranslateOnNavigate) { | 737 TEST_F(TranslateManagerBrowserTest, AutoTranslateOnNavigate) { |
| 737 SimulateNavigation(GURL("http://www.google.fr"), "fr", true); | 738 SimulateNavigation(GURL("http://www.google.fr"), "fr", true); |
| 738 | 739 |
| 739 // Simulate the user translating. | 740 // Simulate the user translating. |
| 740 TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); | 741 TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); |
| 741 ASSERT_TRUE(infobar != NULL); | 742 ASSERT_TRUE(infobar != NULL); |
| (...skipping 883 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1625 content::WebContents* current_web_contents = | 1626 content::WebContents* current_web_contents = |
| 1626 browser()->tab_strip_model()->GetActiveWebContents(); | 1627 browser()->tab_strip_model()->GetActiveWebContents(); |
| 1627 content::Source<content::WebContents> source(current_web_contents); | 1628 content::Source<content::WebContents> source(current_web_contents); |
| 1628 | 1629 |
| 1629 ui_test_utils::WindowedNotificationObserverWithDetails< | 1630 ui_test_utils::WindowedNotificationObserverWithDetails< |
| 1630 LanguageDetectionDetails> | 1631 LanguageDetectionDetails> |
| 1631 fr_language_detected_signal(chrome::NOTIFICATION_TAB_LANGUAGE_DETERMINED, | 1632 fr_language_detected_signal(chrome::NOTIFICATION_TAB_LANGUAGE_DETERMINED, |
| 1632 source); | 1633 source); |
| 1633 fr_language_detected_signal.Wait(); | 1634 fr_language_detected_signal.Wait(); |
| 1634 } | 1635 } |
| OLD | NEW |