| 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 303 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 357 TranslateErrors::Type error_type) OVERRIDE { | 358 TranslateErrors::Type error_type) OVERRIDE { |
| 358 if (model_) { | 359 if (model_) { |
| 359 model_->SetViewState(view_state); | 360 model_->SetViewState(view_state); |
| 360 return; | 361 return; |
| 361 } | 362 } |
| 362 | 363 |
| 363 TranslateTabHelper* translate_tab_helper = | 364 TranslateTabHelper* translate_tab_helper = |
| 364 TranslateTabHelper::FromWebContents(web_contents); | 365 TranslateTabHelper::FromWebContents(web_contents); |
| 365 std::string source_language = | 366 std::string source_language = |
| 366 translate_tab_helper->GetLanguageState().original_language(); | 367 translate_tab_helper->GetLanguageState().original_language(); |
| 367 std::string target_language = TranslateManager::GetLanguageCode( | 368 std::string target_language = TranslateDownloadManager::GetLanguageCode( |
| 368 g_browser_process->GetApplicationLocale()); | 369 g_browser_process->GetApplicationLocale()); |
| 369 scoped_ptr<TranslateUIDelegate> ui_delegate( | 370 scoped_ptr<TranslateUIDelegate> ui_delegate( |
| 370 new TranslateUIDelegate(web_contents, | 371 new TranslateUIDelegate(web_contents, |
| 371 source_language, | 372 source_language, |
| 372 target_language)); | 373 target_language)); |
| 373 model_.reset( | 374 model_.reset( |
| 374 new TranslateBubbleModelImpl(view_state, ui_delegate.Pass())); | 375 new TranslateBubbleModelImpl(view_state, ui_delegate.Pass())); |
| 375 } | 376 } |
| 376 | 377 |
| 377 TranslateBubbleModel* model() { return model_.get(); } | 378 TranslateBubbleModel* model() { return model_.get(); } |
| (...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 615 " language=" << lang); | 616 " language=" << lang); |
| 616 | 617 |
| 617 // We should not have a translate infobar. | 618 // We should not have a translate infobar. |
| 618 TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); | 619 TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); |
| 619 ASSERT_TRUE(infobar == NULL); | 620 ASSERT_TRUE(infobar == NULL); |
| 620 | 621 |
| 621 SimulateNavigation(url, lang, true); | 622 SimulateNavigation(url, lang, true); |
| 622 | 623 |
| 623 // Verify we have/don't have an info-bar as expected. | 624 // Verify we have/don't have an info-bar as expected. |
| 624 infobar = GetTranslateInfoBar(); | 625 infobar = GetTranslateInfoBar(); |
| 625 bool expected = TranslateManager::IsSupportedLanguage(lang) && | 626 bool expected = |
| 626 lang != "en"; | 627 TranslateDownloadManager::IsSupportedLanguage(lang) && lang != "en"; |
| 627 EXPECT_EQ(expected, infobar != NULL); | 628 EXPECT_EQ(expected, infobar != NULL); |
| 628 | 629 |
| 629 if (infobar != NULL) | 630 if (infobar != NULL) |
| 630 EXPECT_TRUE(CloseTranslateInfoBar()); | 631 EXPECT_TRUE(CloseTranslateInfoBar()); |
| 631 } | 632 } |
| 632 } | 633 } |
| 633 | 634 |
| 634 // Test the fetching of languages from the translate server | 635 // Test the fetching of languages from the translate server |
| 635 TEST_F(TranslateManagerBrowserTest, FetchLanguagesFromTranslateServer) { | 636 TEST_F(TranslateManagerBrowserTest, FetchLanguagesFromTranslateServer) { |
| 636 std::vector<std::string> server_languages; | 637 std::vector<std::string> server_languages; |
| 637 // A list of languages to fake being returned by the translate server. | 638 // A list of languages to fake being returned by the translate server. |
| 638 server_languages.push_back("aa"); | 639 server_languages.push_back("aa"); |
| 639 server_languages.push_back("ak"); | 640 server_languages.push_back("ak"); |
| 640 server_languages.push_back("ab"); | 641 server_languages.push_back("ab"); |
| 641 server_languages.push_back("en-CA"); | 642 server_languages.push_back("en-CA"); |
| 642 server_languages.push_back("zh"); | 643 server_languages.push_back("zh"); |
| 643 server_languages.push_back("yi"); | 644 server_languages.push_back("yi"); |
| 644 server_languages.push_back("fr-FR"); | 645 server_languages.push_back("fr-FR"); |
| 645 server_languages.push_back("xx"); | 646 server_languages.push_back("xx"); |
| 646 | 647 |
| 647 std::vector<std::string> alpha_languages; | 648 std::vector<std::string> alpha_languages; |
| 648 alpha_languages.push_back("aa"); | 649 alpha_languages.push_back("aa"); |
| 649 alpha_languages.push_back("yi"); | 650 alpha_languages.push_back("yi"); |
| 650 | 651 |
| 651 // First, get the default languages list. Note that calling | 652 // First, get the default languages list. Note that calling |
| 652 // GetSupportedLanguages() invokes RequestLanguageList() internally. | 653 // GetSupportedLanguages() invokes RequestLanguageList() internally. |
| 653 std::vector<std::string> default_supported_languages; | 654 std::vector<std::string> default_supported_languages; |
| 654 TranslateManager::GetSupportedLanguages(&default_supported_languages); | 655 TranslateDownloadManager::GetSupportedLanguages(&default_supported_languages); |
| 655 // To make sure we got the defaults and don't confuse them with the mocks. | 656 // To make sure we got the defaults and don't confuse them with the mocks. |
| 656 ASSERT_NE(default_supported_languages.size(), server_languages.size()); | 657 ASSERT_NE(default_supported_languages.size(), server_languages.size()); |
| 657 | 658 |
| 658 // Check that we still get the defaults until the URLFetch has completed. | 659 // Check that we still get the defaults until the URLFetch has completed. |
| 659 std::vector<std::string> current_supported_languages; | 660 std::vector<std::string> current_supported_languages; |
| 660 TranslateManager::GetSupportedLanguages(¤t_supported_languages); | 661 TranslateDownloadManager::GetSupportedLanguages(¤t_supported_languages); |
| 661 EXPECT_EQ(default_supported_languages, current_supported_languages); | 662 EXPECT_EQ(default_supported_languages, current_supported_languages); |
| 662 | 663 |
| 663 // Also check that it didn't change if we failed the URL fetch. | 664 // Also check that it didn't change if we failed the URL fetch. |
| 664 SimulateSupportedLanguagesURLFetch(false, std::vector<std::string>(), | 665 SimulateSupportedLanguagesURLFetch(false, std::vector<std::string>(), |
| 665 true, std::vector<std::string>()); | 666 true, std::vector<std::string>()); |
| 666 current_supported_languages.clear(); | 667 current_supported_languages.clear(); |
| 667 TranslateManager::GetSupportedLanguages(¤t_supported_languages); | 668 TranslateDownloadManager::GetSupportedLanguages(¤t_supported_languages); |
| 668 EXPECT_EQ(default_supported_languages, current_supported_languages); | 669 EXPECT_EQ(default_supported_languages, current_supported_languages); |
| 669 | 670 |
| 670 // Now check that we got the appropriate set of languages from the server. | 671 // Now check that we got the appropriate set of languages from the server. |
| 671 SimulateSupportedLanguagesURLFetch(true, server_languages, | 672 SimulateSupportedLanguagesURLFetch(true, server_languages, |
| 672 true, alpha_languages); | 673 true, alpha_languages); |
| 673 current_supported_languages.clear(); | 674 current_supported_languages.clear(); |
| 674 TranslateManager::GetSupportedLanguages(¤t_supported_languages); | 675 TranslateDownloadManager::GetSupportedLanguages(¤t_supported_languages); |
| 675 // "xx" can't be displayed in the Translate inforbar, so this is eliminated. | 676 // "xx" can't be displayed in the Translate inforbar, so this is eliminated. |
| 676 EXPECT_EQ(server_languages.size() - 1, current_supported_languages.size()); | 677 EXPECT_EQ(server_languages.size() - 1, current_supported_languages.size()); |
| 677 // Not sure we need to guarantee the order of languages, so we find them. | 678 // Not sure we need to guarantee the order of languages, so we find them. |
| 678 for (size_t i = 0; i < server_languages.size(); ++i) { | 679 for (size_t i = 0; i < server_languages.size(); ++i) { |
| 679 const std::string& lang = server_languages[i]; | 680 const std::string& lang = server_languages[i]; |
| 680 if (lang == "xx") | 681 if (lang == "xx") |
| 681 continue; | 682 continue; |
| 682 EXPECT_NE(current_supported_languages.end(), | 683 EXPECT_NE(current_supported_languages.end(), |
| 683 std::find(current_supported_languages.begin(), | 684 std::find(current_supported_languages.begin(), |
| 684 current_supported_languages.end(), | 685 current_supported_languages.end(), |
| 685 lang)); | 686 lang)); |
| 686 bool is_alpha = std::find(alpha_languages.begin(), | 687 bool is_alpha = std::find(alpha_languages.begin(), |
| 687 alpha_languages.end(), | 688 alpha_languages.end(), |
| 688 lang) != alpha_languages.end(); | 689 lang) != alpha_languages.end(); |
| 689 EXPECT_EQ(TranslateManager::IsAlphaLanguage(lang), is_alpha); | 690 EXPECT_EQ(TranslateDownloadManager::IsAlphaLanguage(lang), is_alpha); |
| 690 } | 691 } |
| 691 } | 692 } |
| 692 | 693 |
| 693 // Test the fetching of languages from the translate server without 'al' | 694 // Test the fetching of languages from the translate server without 'al' |
| 694 // parameter. | 695 // parameter. |
| 695 TEST_F(TranslateManagerBrowserTest, | 696 TEST_F(TranslateManagerBrowserTest, |
| 696 FetchLanguagesFromTranslateServerWithoutAlpha) { | 697 FetchLanguagesFromTranslateServerWithoutAlpha) { |
| 697 std::vector<std::string> server_languages; | 698 std::vector<std::string> server_languages; |
| 698 server_languages.push_back("aa"); | 699 server_languages.push_back("aa"); |
| 699 server_languages.push_back("ak"); | 700 server_languages.push_back("ak"); |
| 700 server_languages.push_back("ab"); | 701 server_languages.push_back("ab"); |
| 701 server_languages.push_back("en-CA"); | 702 server_languages.push_back("en-CA"); |
| 702 server_languages.push_back("zh"); | 703 server_languages.push_back("zh"); |
| 703 server_languages.push_back("yi"); | 704 server_languages.push_back("yi"); |
| 704 server_languages.push_back("fr-FR"); | 705 server_languages.push_back("fr-FR"); |
| 705 server_languages.push_back("xx"); | 706 server_languages.push_back("xx"); |
| 706 | 707 |
| 707 std::vector<std::string> alpha_languages; | 708 std::vector<std::string> alpha_languages; |
| 708 alpha_languages.push_back("aa"); | 709 alpha_languages.push_back("aa"); |
| 709 alpha_languages.push_back("yi"); | 710 alpha_languages.push_back("yi"); |
| 710 | 711 |
| 711 // call GetSupportedLanguages to call RequestLanguageList internally. | 712 // call GetSupportedLanguages to call RequestLanguageList internally. |
| 712 std::vector<std::string> default_supported_languages; | 713 std::vector<std::string> default_supported_languages; |
| 713 TranslateManager::GetSupportedLanguages(&default_supported_languages); | 714 TranslateDownloadManager::GetSupportedLanguages(&default_supported_languages); |
| 714 | 715 |
| 715 SimulateSupportedLanguagesURLFetch(true, server_languages, | 716 SimulateSupportedLanguagesURLFetch(true, server_languages, |
| 716 false, alpha_languages); | 717 false, alpha_languages); |
| 717 | 718 |
| 718 std::vector<std::string> current_supported_languages; | 719 std::vector<std::string> current_supported_languages; |
| 719 TranslateManager::GetSupportedLanguages(¤t_supported_languages); | 720 TranslateDownloadManager::GetSupportedLanguages(¤t_supported_languages); |
| 720 | 721 |
| 721 // "xx" can't be displayed in the Translate inforbar, so this is eliminated. | 722 // "xx" can't be displayed in the Translate inforbar, so this is eliminated. |
| 722 EXPECT_EQ(server_languages.size() - 1, current_supported_languages.size()); | 723 EXPECT_EQ(server_languages.size() - 1, current_supported_languages.size()); |
| 723 | 724 |
| 724 for (size_t i = 0; i < server_languages.size(); ++i) { | 725 for (size_t i = 0; i < server_languages.size(); ++i) { |
| 725 const std::string& lang = server_languages[i]; | 726 const std::string& lang = server_languages[i]; |
| 726 if (lang == "xx") | 727 if (lang == "xx") |
| 727 continue; | 728 continue; |
| 728 EXPECT_NE(current_supported_languages.end(), | 729 EXPECT_NE(current_supported_languages.end(), |
| 729 std::find(current_supported_languages.begin(), | 730 std::find(current_supported_languages.begin(), |
| 730 current_supported_languages.end(), | 731 current_supported_languages.end(), |
| 731 lang)); | 732 lang)); |
| 732 EXPECT_FALSE(TranslateManager::IsAlphaLanguage(lang)); | 733 EXPECT_FALSE(TranslateDownloadManager::IsAlphaLanguage(lang)); |
| 733 } | 734 } |
| 734 } | 735 } |
| 735 | 736 |
| 736 // Tests auto-translate on page. | 737 // Tests auto-translate on page. |
| 737 TEST_F(TranslateManagerBrowserTest, AutoTranslateOnNavigate) { | 738 TEST_F(TranslateManagerBrowserTest, AutoTranslateOnNavigate) { |
| 738 SimulateNavigation(GURL("http://www.google.fr"), "fr", true); | 739 SimulateNavigation(GURL("http://www.google.fr"), "fr", true); |
| 739 | 740 |
| 740 // Simulate the user translating. | 741 // Simulate the user translating. |
| 741 TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); | 742 TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); |
| 742 ASSERT_TRUE(infobar != NULL); | 743 ASSERT_TRUE(infobar != NULL); |
| (...skipping 880 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1623 content::WebContents* current_web_contents = | 1624 content::WebContents* current_web_contents = |
| 1624 browser()->tab_strip_model()->GetActiveWebContents(); | 1625 browser()->tab_strip_model()->GetActiveWebContents(); |
| 1625 content::Source<content::WebContents> source(current_web_contents); | 1626 content::Source<content::WebContents> source(current_web_contents); |
| 1626 | 1627 |
| 1627 ui_test_utils::WindowedNotificationObserverWithDetails< | 1628 ui_test_utils::WindowedNotificationObserverWithDetails< |
| 1628 LanguageDetectionDetails> | 1629 LanguageDetectionDetails> |
| 1629 fr_language_detected_signal(chrome::NOTIFICATION_TAB_LANGUAGE_DETERMINED, | 1630 fr_language_detected_signal(chrome::NOTIFICATION_TAB_LANGUAGE_DETERMINED, |
| 1630 source); | 1631 source); |
| 1631 fr_language_detected_signal.Wait(); | 1632 fr_language_detected_signal.Wait(); |
| 1632 } | 1633 } |
| OLD | NEW |