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 if (!api_key.empty()) { | |
Jói
2012/09/13 16:25:02
There is no need for this check. If the key isn't
MAD
2012/09/13 17:23:21
OK... Note that I copied the behavior from here:
h
| |
176 std::string query(url->query()); | |
177 if (!query.empty()) | |
178 query += "&"; | |
179 query += "key=" + net::EscapeQueryParamValue(api_key, true); | |
180 GURL::Replacements replacements; | |
181 replacements.SetQueryStr(query); | |
182 *url = url->ReplaceComponents(replacements); | |
183 } | |
184 } | |
185 | |
172 } // namespace | 186 } // namespace |
173 | 187 |
174 // This must be kept in sync with the &cb= value in the kLanguageListFetchURL. | 188 // This must be kept in sync with the &cb= value in the kLanguageListFetchURL. |
175 const char* const TranslateManager::kLanguageListCallbackName = "sl("; | 189 const char* const TranslateManager::kLanguageListCallbackName = "sl("; |
176 const char* const TranslateManager::kTargetLanguagesKey = "tl"; | 190 const char* const TranslateManager::kTargetLanguagesKey = "tl"; |
177 | 191 |
178 // static | 192 // static |
179 base::LazyInstance<std::set<std::string> > | 193 base::LazyInstance<std::set<std::string> > |
180 TranslateManager::supported_languages_ = LAZY_INSTANCE_INITIALIZER; | 194 TranslateManager::supported_languages_ = LAZY_INSTANCE_INITIALIZER; |
181 | 195 |
(...skipping 474 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
656 web_contents->GetRenderViewHost()->GetRoutingID(), entry->GetPageID())); | 670 web_contents->GetRenderViewHost()->GetRoutingID(), entry->GetPageID())); |
657 | 671 |
658 TranslateTabHelper* helper = | 672 TranslateTabHelper* helper = |
659 TabContents::FromWebContents(web_contents)->translate_tab_helper(); | 673 TabContents::FromWebContents(web_contents)->translate_tab_helper(); |
660 helper->language_state().set_current_language( | 674 helper->language_state().set_current_language( |
661 helper->language_state().original_language()); | 675 helper->language_state().original_language()); |
662 } | 676 } |
663 | 677 |
664 void TranslateManager::ReportLanguageDetectionError(WebContents* web_contents) { | 678 void TranslateManager::ReportLanguageDetectionError(WebContents* web_contents) { |
665 UMA_HISTOGRAM_COUNTS("Translate.ReportLanguageDetectionError", 1); | 679 UMA_HISTOGRAM_COUNTS("Translate.ReportLanguageDetectionError", 1); |
666 GURL page_url = web_contents->GetController().GetActiveEntry()->GetURL(); | 680 // 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); | 681 Browser* browser = browser::FindBrowserWithWebContents(web_contents); |
682 if (!browser) { | 682 if (!browser) { |
683 NOTREACHED(); | 683 NOTREACHED(); |
684 return; | 684 return; |
685 } | 685 } |
686 chrome::AddSelectedTabWithURL(browser, GURL(report_error_url), | 686 |
687 GURL page_url = web_contents->GetController().GetActiveEntry()->GetURL(); | |
688 // Report option should be disabled for secure URLs. | |
689 DCHECK(!page_url.SchemeIsSecure()); | |
690 std::string report_error_url_str(kReportLanguageDetectionErrorURL); | |
691 report_error_url_str += "?client=cr&action=langidc&u="; | |
692 report_error_url_str += net::EscapeUrlEncodedData(page_url.spec(), true); | |
693 report_error_url_str += "&sl="; | |
694 | |
695 TranslateTabHelper* helper = | |
696 TabContents::FromWebContents(web_contents)->translate_tab_helper(); | |
697 report_error_url_str += helper->language_state().original_language(); | |
698 report_error_url_str += "&hl="; | |
699 report_error_url_str += | |
700 GetLanguageCode(g_browser_process->GetApplicationLocale()); | |
701 | |
702 GURL report_error_url(report_error_url_str); | |
703 AddApiKeyToUrl(&report_error_url); | |
704 chrome::AddSelectedTabWithURL(browser, report_error_url, | |
687 content::PAGE_TRANSITION_AUTO_BOOKMARK); | 705 content::PAGE_TRANSITION_AUTO_BOOKMARK); |
688 } | 706 } |
689 | 707 |
690 void TranslateManager::DoTranslatePage(WebContents* web_contents, | 708 void TranslateManager::DoTranslatePage(WebContents* web_contents, |
691 const std::string& translate_script, | 709 const std::string& translate_script, |
692 const std::string& source_lang, | 710 const std::string& source_lang, |
693 const std::string& target_lang) { | 711 const std::string& target_lang) { |
694 NavigationEntry* entry = web_contents->GetController().GetActiveEntry(); | 712 NavigationEntry* entry = web_contents->GetController().GetActiveEntry(); |
695 if (!entry) { | 713 if (!entry) { |
696 NOTREACHED(); | 714 NOTREACHED(); |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
804 return; | 822 return; |
805 | 823 |
806 // We don't want to do this when translate is disabled. | 824 // We don't want to do this when translate is disabled. |
807 DCHECK(prefs != NULL); | 825 DCHECK(prefs != NULL); |
808 if (CommandLine::ForCurrentProcess()->HasSwitch( | 826 if (CommandLine::ForCurrentProcess()->HasSwitch( |
809 switches::kDisableTranslate) || | 827 switches::kDisableTranslate) || |
810 (prefs != NULL && !prefs->GetBoolean(prefs::kEnableTranslate))) { | 828 (prefs != NULL && !prefs->GetBoolean(prefs::kEnableTranslate))) { |
811 return; | 829 return; |
812 } | 830 } |
813 | 831 |
814 std::string language_list_fetch_url = base::StringPrintf( | 832 GURL language_list_fetch_url = GURL( |
815 kLanguageListFetchURL, | 833 base::StringPrintf( |
816 GetLanguageCode(g_browser_process->GetApplicationLocale()).c_str()); | 834 kLanguageListFetchURL, |
835 GetLanguageCode(g_browser_process->GetApplicationLocale()).c_str())); | |
836 AddApiKeyToUrl(&language_list_fetch_url); | |
817 language_list_request_pending_.reset(net::URLFetcher::Create( | 837 language_list_request_pending_.reset(net::URLFetcher::Create( |
818 1, GURL(language_list_fetch_url), net::URLFetcher::GET, this)); | 838 1, language_list_fetch_url, net::URLFetcher::GET, this)); |
819 language_list_request_pending_->SetLoadFlags(net::LOAD_DO_NOT_SEND_COOKIES | | 839 language_list_request_pending_->SetLoadFlags(net::LOAD_DO_NOT_SEND_COOKIES | |
820 net::LOAD_DO_NOT_SAVE_COOKIES); | 840 net::LOAD_DO_NOT_SAVE_COOKIES); |
821 language_list_request_pending_->SetRequestContext( | 841 language_list_request_pending_->SetRequestContext( |
822 g_browser_process->system_request_context()); | 842 g_browser_process->system_request_context()); |
823 language_list_request_pending_->SetMaxRetries(kMaxRetryLanguageListFetch); | 843 language_list_request_pending_->SetMaxRetries(kMaxRetryLanguageListFetch); |
824 language_list_request_pending_->Start(); | 844 language_list_request_pending_->Start(); |
825 } | 845 } |
826 | 846 |
827 void TranslateManager::CleanupPendingUlrFetcher() { | 847 void TranslateManager::CleanupPendingUlrFetcher() { |
828 language_list_request_pending_.reset(); | 848 language_list_request_pending_.reset(); |
829 translate_script_request_pending_.reset(); | 849 translate_script_request_pending_.reset(); |
830 } | 850 } |
831 | 851 |
832 void TranslateManager::RequestTranslateScript() { | 852 void TranslateManager::RequestTranslateScript() { |
833 if (translate_script_request_pending_.get() != NULL) | 853 if (translate_script_request_pending_.get() != NULL) |
834 return; | 854 return; |
835 | 855 |
836 std::string translate_script_url = base::StringPrintf( | 856 GURL translate_script_url = GURL(base::StringPrintf( |
837 kTranslateScriptURL, | 857 kTranslateScriptURL, |
838 GetLanguageCode(g_browser_process->GetApplicationLocale()).c_str()); | 858 GetLanguageCode(g_browser_process->GetApplicationLocale()).c_str())); |
859 AddApiKeyToUrl(&translate_script_url); | |
839 translate_script_request_pending_.reset(net::URLFetcher::Create( | 860 translate_script_request_pending_.reset(net::URLFetcher::Create( |
840 0, GURL(translate_script_url), net::URLFetcher::GET, this)); | 861 0, translate_script_url, net::URLFetcher::GET, this)); |
841 translate_script_request_pending_->SetLoadFlags( | 862 translate_script_request_pending_->SetLoadFlags( |
842 net::LOAD_DO_NOT_SEND_COOKIES | net::LOAD_DO_NOT_SAVE_COOKIES); | 863 net::LOAD_DO_NOT_SEND_COOKIES | net::LOAD_DO_NOT_SAVE_COOKIES); |
843 translate_script_request_pending_->SetRequestContext( | 864 translate_script_request_pending_->SetRequestContext( |
844 g_browser_process->system_request_context()); | 865 g_browser_process->system_request_context()); |
845 translate_script_request_pending_->SetExtraRequestHeaders( | 866 translate_script_request_pending_->SetExtraRequestHeaders( |
846 kTranslateScriptHeader); | 867 kTranslateScriptHeader); |
847 translate_script_request_pending_->Start(); | 868 translate_script_request_pending_->Start(); |
848 } | 869 } |
849 | 870 |
850 void TranslateManager::ShowInfoBar(content::WebContents* web_contents, | 871 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(); | 920 InfoBarTabHelper* infobar_helper = tab_contents->infobar_tab_helper(); |
900 | 921 |
901 for (size_t i = 0; i < infobar_helper->GetInfoBarCount(); ++i) { | 922 for (size_t i = 0; i < infobar_helper->GetInfoBarCount(); ++i) { |
902 TranslateInfoBarDelegate* delegate = | 923 TranslateInfoBarDelegate* delegate = |
903 infobar_helper->GetInfoBarDelegateAt(i)->AsTranslateInfoBarDelegate(); | 924 infobar_helper->GetInfoBarDelegateAt(i)->AsTranslateInfoBarDelegate(); |
904 if (delegate) | 925 if (delegate) |
905 return delegate; | 926 return delegate; |
906 } | 927 } |
907 return NULL; | 928 return NULL; |
908 } | 929 } |
OLD | NEW |