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 "chrome/browser/translate/translate_manager.h" | 5 #include "chrome/browser/translate/translate_manager.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
9 #include "base/compiler_specific.h" | 9 #include "base/compiler_specific.h" |
10 #include "base/json/json_reader.h" | 10 #include "base/json/json_reader.h" |
(...skipping 28 matching lines...) Expand all Loading... |
39 #include "content/public/browser/navigation_controller.h" | 39 #include "content/public/browser/navigation_controller.h" |
40 #include "content/public/browser/navigation_details.h" | 40 #include "content/public/browser/navigation_details.h" |
41 #include "content/public/browser/navigation_entry.h" | 41 #include "content/public/browser/navigation_entry.h" |
42 #include "content/public/browser/notification_details.h" | 42 #include "content/public/browser/notification_details.h" |
43 #include "content/public/browser/notification_service.h" | 43 #include "content/public/browser/notification_service.h" |
44 #include "content/public/browser/notification_source.h" | 44 #include "content/public/browser/notification_source.h" |
45 #include "content/public/browser/notification_types.h" | 45 #include "content/public/browser/notification_types.h" |
46 #include "content/public/browser/render_process_host.h" | 46 #include "content/public/browser/render_process_host.h" |
47 #include "content/public/browser/render_view_host.h" | 47 #include "content/public/browser/render_view_host.h" |
48 #include "content/public/browser/web_contents.h" | 48 #include "content/public/browser/web_contents.h" |
| 49 #include "google_apis/google_api_keys.h" |
49 #include "grit/browser_resources.h" | 50 #include "grit/browser_resources.h" |
50 #include "net/base/escape.h" | 51 #include "net/base/escape.h" |
51 #include "net/base/load_flags.h" | 52 #include "net/base/load_flags.h" |
52 #include "net/url_request/url_fetcher.h" | 53 #include "net/url_request/url_fetcher.h" |
53 #include "net/url_request/url_request_status.h" | 54 #include "net/url_request/url_request_status.h" |
54 #include "ui/base/layout.h" | 55 #include "ui/base/layout.h" |
55 #include "ui/base/resource/resource_bundle.h" | 56 #include "ui/base/resource/resource_bundle.h" |
56 | 57 |
57 #ifdef FILE_MANAGER_EXTENSION | 58 #ifdef FILE_MANAGER_EXTENSION |
58 #include "chrome/browser/chromeos/extensions/file_manager_util.h" | 59 #include "chrome/browser/chromeos/extensions/file_manager_util.h" |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
162 "cb=cr.googleTranslate.onTranslateElementLoad&hl=%s"; | 163 "cb=cr.googleTranslate.onTranslateElementLoad&hl=%s"; |
163 const char* const kTranslateScriptHeader = | 164 const char* const kTranslateScriptHeader = |
164 "Google-Translate-Element-Mode: library"; | 165 "Google-Translate-Element-Mode: library"; |
165 const char* const kReportLanguageDetectionErrorURL = | 166 const char* const kReportLanguageDetectionErrorURL = |
166 "https://translate.google.com/translate_error"; | 167 "https://translate.google.com/translate_error"; |
167 const char* const kLanguageListFetchURL = | 168 const char* const kLanguageListFetchURL = |
168 "https://translate.googleapis.com/translate_a/l?client=chrome&cb=sl&hl=%s"; | 169 "https://translate.googleapis.com/translate_a/l?client=chrome&cb=sl&hl=%s"; |
169 const int kMaxRetryLanguageListFetch = 5; | 170 const int kMaxRetryLanguageListFetch = 5; |
170 const int kTranslateScriptExpirationDelayDays = 1; | 171 const int kTranslateScriptExpirationDelayDays = 1; |
171 | 172 |
| 173 void AddApiKeyToUrl(GURL* url) { |
| 174 std::string api_key = google_apis::GetAPIKey(); |
| 175 std::string query(url->query()); |
| 176 if (!query.empty()) |
| 177 query += "&"; |
| 178 query += "key=" + net::EscapeQueryParamValue(api_key, true); |
| 179 GURL::Replacements replacements; |
| 180 replacements.SetQueryStr(query); |
| 181 *url = url->ReplaceComponents(replacements); |
| 182 } |
| 183 |
172 } // namespace | 184 } // namespace |
173 | 185 |
174 // This must be kept in sync with the &cb= value in the kLanguageListFetchURL. | 186 // This must be kept in sync with the &cb= value in the kLanguageListFetchURL. |
175 const char* const TranslateManager::kLanguageListCallbackName = "sl("; | 187 const char* const TranslateManager::kLanguageListCallbackName = "sl("; |
176 const char* const TranslateManager::kTargetLanguagesKey = "tl"; | 188 const char* const TranslateManager::kTargetLanguagesKey = "tl"; |
177 | 189 |
178 // static | 190 // static |
179 base::LazyInstance<std::set<std::string> > | 191 base::LazyInstance<std::set<std::string> > |
180 TranslateManager::supported_languages_ = LAZY_INSTANCE_INITIALIZER; | 192 TranslateManager::supported_languages_ = LAZY_INSTANCE_INITIALIZER; |
181 | 193 |
(...skipping 474 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
656 web_contents->GetRenderViewHost()->GetRoutingID(), entry->GetPageID())); | 668 web_contents->GetRenderViewHost()->GetRoutingID(), entry->GetPageID())); |
657 | 669 |
658 TranslateTabHelper* helper = | 670 TranslateTabHelper* helper = |
659 TabContents::FromWebContents(web_contents)->translate_tab_helper(); | 671 TabContents::FromWebContents(web_contents)->translate_tab_helper(); |
660 helper->language_state().set_current_language( | 672 helper->language_state().set_current_language( |
661 helper->language_state().original_language()); | 673 helper->language_state().original_language()); |
662 } | 674 } |
663 | 675 |
664 void TranslateManager::ReportLanguageDetectionError(WebContents* web_contents) { | 676 void TranslateManager::ReportLanguageDetectionError(WebContents* web_contents) { |
665 UMA_HISTOGRAM_COUNTS("Translate.ReportLanguageDetectionError", 1); | 677 UMA_HISTOGRAM_COUNTS("Translate.ReportLanguageDetectionError", 1); |
666 GURL page_url = web_contents->GetController().GetActiveEntry()->GetURL(); | 678 // We'll open the URL in a new tab so that the user can tell us more. |
667 // Report option should be disabled for secure URLs. | |
668 DCHECK(!page_url.SchemeIsSecure()); | |
669 std::string report_error_url(kReportLanguageDetectionErrorURL); | |
670 report_error_url += "?client=cr&action=langidc&u="; | |
671 report_error_url += net::EscapeUrlEncodedData(page_url.spec(), true); | |
672 report_error_url += "&sl="; | |
673 | |
674 TranslateTabHelper* helper = | |
675 TabContents::FromWebContents(web_contents)->translate_tab_helper(); | |
676 report_error_url += helper->language_state().original_language(); | |
677 report_error_url += "&hl="; | |
678 report_error_url += | |
679 GetLanguageCode(g_browser_process->GetApplicationLocale()); | |
680 // Open that URL in a new tab so that the user can tell us more. | |
681 Browser* browser = browser::FindBrowserWithWebContents(web_contents); | 679 Browser* browser = browser::FindBrowserWithWebContents(web_contents); |
682 if (!browser) { | 680 if (!browser) { |
683 NOTREACHED(); | 681 NOTREACHED(); |
684 return; | 682 return; |
685 } | 683 } |
686 chrome::AddSelectedTabWithURL(browser, GURL(report_error_url), | 684 |
| 685 GURL page_url = web_contents->GetController().GetActiveEntry()->GetURL(); |
| 686 // Report option should be disabled for secure URLs. |
| 687 DCHECK(!page_url.SchemeIsSecure()); |
| 688 std::string report_error_url_str(kReportLanguageDetectionErrorURL); |
| 689 report_error_url_str += "?client=cr&action=langidc&u="; |
| 690 report_error_url_str += net::EscapeUrlEncodedData(page_url.spec(), true); |
| 691 report_error_url_str += "&sl="; |
| 692 |
| 693 TranslateTabHelper* helper = |
| 694 TabContents::FromWebContents(web_contents)->translate_tab_helper(); |
| 695 report_error_url_str += helper->language_state().original_language(); |
| 696 report_error_url_str += "&hl="; |
| 697 report_error_url_str += |
| 698 GetLanguageCode(g_browser_process->GetApplicationLocale()); |
| 699 |
| 700 GURL report_error_url(report_error_url_str); |
| 701 AddApiKeyToUrl(&report_error_url); |
| 702 chrome::AddSelectedTabWithURL(browser, report_error_url, |
687 content::PAGE_TRANSITION_AUTO_BOOKMARK); | 703 content::PAGE_TRANSITION_AUTO_BOOKMARK); |
688 } | 704 } |
689 | 705 |
690 void TranslateManager::DoTranslatePage(WebContents* web_contents, | 706 void TranslateManager::DoTranslatePage(WebContents* web_contents, |
691 const std::string& translate_script, | 707 const std::string& translate_script, |
692 const std::string& source_lang, | 708 const std::string& source_lang, |
693 const std::string& target_lang) { | 709 const std::string& target_lang) { |
694 NavigationEntry* entry = web_contents->GetController().GetActiveEntry(); | 710 NavigationEntry* entry = web_contents->GetController().GetActiveEntry(); |
695 if (!entry) { | 711 if (!entry) { |
696 NOTREACHED(); | 712 NOTREACHED(); |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
804 return; | 820 return; |
805 | 821 |
806 // We don't want to do this when translate is disabled. | 822 // We don't want to do this when translate is disabled. |
807 DCHECK(prefs != NULL); | 823 DCHECK(prefs != NULL); |
808 if (CommandLine::ForCurrentProcess()->HasSwitch( | 824 if (CommandLine::ForCurrentProcess()->HasSwitch( |
809 switches::kDisableTranslate) || | 825 switches::kDisableTranslate) || |
810 (prefs != NULL && !prefs->GetBoolean(prefs::kEnableTranslate))) { | 826 (prefs != NULL && !prefs->GetBoolean(prefs::kEnableTranslate))) { |
811 return; | 827 return; |
812 } | 828 } |
813 | 829 |
814 std::string language_list_fetch_url = base::StringPrintf( | 830 GURL language_list_fetch_url = GURL( |
815 kLanguageListFetchURL, | 831 base::StringPrintf( |
816 GetLanguageCode(g_browser_process->GetApplicationLocale()).c_str()); | 832 kLanguageListFetchURL, |
| 833 GetLanguageCode(g_browser_process->GetApplicationLocale()).c_str())); |
| 834 AddApiKeyToUrl(&language_list_fetch_url); |
817 language_list_request_pending_.reset(net::URLFetcher::Create( | 835 language_list_request_pending_.reset(net::URLFetcher::Create( |
818 1, GURL(language_list_fetch_url), net::URLFetcher::GET, this)); | 836 1, language_list_fetch_url, net::URLFetcher::GET, this)); |
819 language_list_request_pending_->SetLoadFlags(net::LOAD_DO_NOT_SEND_COOKIES | | 837 language_list_request_pending_->SetLoadFlags(net::LOAD_DO_NOT_SEND_COOKIES | |
820 net::LOAD_DO_NOT_SAVE_COOKIES); | 838 net::LOAD_DO_NOT_SAVE_COOKIES); |
821 language_list_request_pending_->SetRequestContext( | 839 language_list_request_pending_->SetRequestContext( |
822 g_browser_process->system_request_context()); | 840 g_browser_process->system_request_context()); |
823 language_list_request_pending_->SetMaxRetries(kMaxRetryLanguageListFetch); | 841 language_list_request_pending_->SetMaxRetries(kMaxRetryLanguageListFetch); |
824 language_list_request_pending_->Start(); | 842 language_list_request_pending_->Start(); |
825 } | 843 } |
826 | 844 |
827 void TranslateManager::CleanupPendingUlrFetcher() { | 845 void TranslateManager::CleanupPendingUlrFetcher() { |
828 language_list_request_pending_.reset(); | 846 language_list_request_pending_.reset(); |
829 translate_script_request_pending_.reset(); | 847 translate_script_request_pending_.reset(); |
830 } | 848 } |
831 | 849 |
832 void TranslateManager::RequestTranslateScript() { | 850 void TranslateManager::RequestTranslateScript() { |
833 if (translate_script_request_pending_.get() != NULL) | 851 if (translate_script_request_pending_.get() != NULL) |
834 return; | 852 return; |
835 | 853 |
836 std::string translate_script_url = base::StringPrintf( | 854 GURL translate_script_url = GURL(base::StringPrintf( |
837 kTranslateScriptURL, | 855 kTranslateScriptURL, |
838 GetLanguageCode(g_browser_process->GetApplicationLocale()).c_str()); | 856 GetLanguageCode(g_browser_process->GetApplicationLocale()).c_str())); |
| 857 AddApiKeyToUrl(&translate_script_url); |
839 translate_script_request_pending_.reset(net::URLFetcher::Create( | 858 translate_script_request_pending_.reset(net::URLFetcher::Create( |
840 0, GURL(translate_script_url), net::URLFetcher::GET, this)); | 859 0, translate_script_url, net::URLFetcher::GET, this)); |
841 translate_script_request_pending_->SetLoadFlags( | 860 translate_script_request_pending_->SetLoadFlags( |
842 net::LOAD_DO_NOT_SEND_COOKIES | net::LOAD_DO_NOT_SAVE_COOKIES); | 861 net::LOAD_DO_NOT_SEND_COOKIES | net::LOAD_DO_NOT_SAVE_COOKIES); |
843 translate_script_request_pending_->SetRequestContext( | 862 translate_script_request_pending_->SetRequestContext( |
844 g_browser_process->system_request_context()); | 863 g_browser_process->system_request_context()); |
845 translate_script_request_pending_->SetExtraRequestHeaders( | 864 translate_script_request_pending_->SetExtraRequestHeaders( |
846 kTranslateScriptHeader); | 865 kTranslateScriptHeader); |
847 translate_script_request_pending_->Start(); | 866 translate_script_request_pending_->Start(); |
848 } | 867 } |
849 | 868 |
850 void TranslateManager::ShowInfoBar(content::WebContents* web_contents, | 869 void TranslateManager::ShowInfoBar(content::WebContents* web_contents, |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
899 InfoBarTabHelper* infobar_helper = tab_contents->infobar_tab_helper(); | 918 InfoBarTabHelper* infobar_helper = tab_contents->infobar_tab_helper(); |
900 | 919 |
901 for (size_t i = 0; i < infobar_helper->GetInfoBarCount(); ++i) { | 920 for (size_t i = 0; i < infobar_helper->GetInfoBarCount(); ++i) { |
902 TranslateInfoBarDelegate* delegate = | 921 TranslateInfoBarDelegate* delegate = |
903 infobar_helper->GetInfoBarDelegateAt(i)->AsTranslateInfoBarDelegate(); | 922 infobar_helper->GetInfoBarDelegateAt(i)->AsTranslateInfoBarDelegate(); |
904 if (delegate) | 923 if (delegate) |
905 return delegate; | 924 return delegate; |
906 } | 925 } |
907 return NULL; | 926 return NULL; |
908 } | 927 } |
OLD | NEW |