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" |
11 #include "base/memory/singleton.h" | 11 #include "base/memory/singleton.h" |
12 #include "base/message_loop.h" | 12 #include "base/message_loop.h" |
13 #include "base/metrics/histogram.h" | 13 #include "base/metrics/histogram.h" |
14 #include "base/prefs/pref_service.h" | 14 #include "base/prefs/pref_service.h" |
15 #include "base/string_util.h" | 15 #include "base/string_util.h" |
16 #include "base/stringprintf.h" | 16 #include "base/stringprintf.h" |
17 #include "base/strings/string_split.h" | 17 #include "base/strings/string_split.h" |
18 #include "base/time.h" | 18 #include "base/time.h" |
19 #include "base/values.h" | 19 #include "base/values.h" |
20 #include "chrome/browser/browser_process.h" | 20 #include "chrome/browser/browser_process.h" |
21 #include "chrome/browser/infobars/infobar_service.h" | 21 #include "chrome/browser/infobars/infobar_service.h" |
22 #include "chrome/browser/profiles/profile.h" | 22 #include "chrome/browser/profiles/profile.h" |
23 #include "chrome/browser/tab_contents/language_state.h" | 23 #include "chrome/browser/tab_contents/language_state.h" |
24 #include "chrome/browser/tab_contents/tab_util.h" | 24 #include "chrome/browser/tab_contents/tab_util.h" |
25 #include "chrome/browser/translate/page_translated_details.h" | 25 #include "chrome/browser/translate/page_translated_details.h" |
| 26 #include "chrome/browser/translate/translate_error_details.h" |
26 #include "chrome/browser/translate/translate_infobar_delegate.h" | 27 #include "chrome/browser/translate/translate_infobar_delegate.h" |
27 #include "chrome/browser/translate/translate_manager_metrics.h" | 28 #include "chrome/browser/translate/translate_manager_metrics.h" |
28 #include "chrome/browser/translate/translate_prefs.h" | 29 #include "chrome/browser/translate/translate_prefs.h" |
29 #include "chrome/browser/translate/translate_tab_helper.h" | 30 #include "chrome/browser/translate/translate_tab_helper.h" |
30 #include "chrome/browser/ui/browser.h" | 31 #include "chrome/browser/ui/browser.h" |
31 #include "chrome/browser/ui/browser_finder.h" | 32 #include "chrome/browser/ui/browser_finder.h" |
32 #include "chrome/browser/ui/browser_tabstrip.h" | 33 #include "chrome/browser/ui/browser_tabstrip.h" |
33 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 34 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
34 #include "chrome/common/chrome_constants.h" | 35 #include "chrome/common/chrome_constants.h" |
35 #include "chrome/common/chrome_notification_types.h" | 36 #include "chrome/common/chrome_notification_types.h" |
(...skipping 452 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
488 Profile::FromBrowserContext(web_contents->GetBrowserContext()); | 489 Profile::FromBrowserContext(web_contents->GetBrowserContext()); |
489 TranslateInfoBarDelegate::Create( | 490 TranslateInfoBarDelegate::Create( |
490 InfoBarService::FromWebContents(web_contents), | 491 InfoBarService::FromWebContents(web_contents), |
491 true, | 492 true, |
492 TranslateInfoBarDelegate::TRANSLATION_ERROR, | 493 TranslateInfoBarDelegate::TRANSLATION_ERROR, |
493 TranslateErrors::NETWORK, | 494 TranslateErrors::NETWORK, |
494 profile->GetPrefs(), | 495 profile->GetPrefs(), |
495 ShortcutConfig(), | 496 ShortcutConfig(), |
496 request.source_lang, | 497 request.source_lang, |
497 request.target_lang); | 498 request.target_lang); |
| 499 |
| 500 TranslateErrorDetails error_details; |
| 501 error_details.time = base::Time::Now(); |
| 502 error_details.url = entry->GetURL(); |
| 503 error_details.error = TranslateErrors::NETWORK; |
| 504 NotifyTranslateError(error_details); |
498 } else { | 505 } else { |
499 // Translate the page. | 506 // Translate the page. |
500 DoTranslatePage(web_contents, translate_script_, | 507 DoTranslatePage(web_contents, translate_script_, |
501 request.source_lang, request.target_lang); | 508 request.source_lang, request.target_lang); |
502 } | 509 } |
503 } | 510 } |
504 pending_requests_.clear(); | 511 pending_requests_.clear(); |
505 } else { // if (translate_script_request_pending_.get() == source) | 512 } else { // if (translate_script_request_pending_.get() == source) |
506 scoped_ptr<const net::URLFetcher> delete_ptr( | 513 scoped_ptr<const net::URLFetcher> delete_ptr( |
507 language_list_request_pending_.release()); | 514 language_list_request_pending_.release()); |
(...skipping 13 matching lines...) Expand all Loading... |
521 | 528 |
522 void TranslateManager::RemoveObserver(Observer* obs) { | 529 void TranslateManager::RemoveObserver(Observer* obs) { |
523 observer_list_.RemoveObserver(obs); | 530 observer_list_.RemoveObserver(obs); |
524 } | 531 } |
525 | 532 |
526 void TranslateManager::NotifyLanguageDetection( | 533 void TranslateManager::NotifyLanguageDetection( |
527 const LanguageDetectionDetails& details) { | 534 const LanguageDetectionDetails& details) { |
528 FOR_EACH_OBSERVER(Observer, observer_list_, OnLanguageDetection(details)); | 535 FOR_EACH_OBSERVER(Observer, observer_list_, OnLanguageDetection(details)); |
529 } | 536 } |
530 | 537 |
| 538 void TranslateManager::NotifyTranslateError( |
| 539 const TranslateErrorDetails& details) { |
| 540 FOR_EACH_OBSERVER(Observer, observer_list_, OnTranslateError(details)); |
| 541 } |
531 | 542 |
532 TranslateManager::TranslateManager() | 543 TranslateManager::TranslateManager() |
533 : weak_method_factory_(this), | 544 : weak_method_factory_(this), |
534 translate_script_expiration_delay_(base::TimeDelta::FromDays( | 545 translate_script_expiration_delay_(base::TimeDelta::FromDays( |
535 kTranslateScriptExpirationDelayDays)), | 546 kTranslateScriptExpirationDelayDays)), |
536 max_reload_check_attempts_(kMaxTranslateLoadCheckAttempts) { | 547 max_reload_check_attempts_(kMaxTranslateLoadCheckAttempts) { |
537 notification_registrar_.Add(this, content::NOTIFICATION_NAV_ENTRY_COMMITTED, | 548 notification_registrar_.Add(this, content::NOTIFICATION_NAV_ENTRY_COMMITTED, |
538 content::NotificationService::AllSources()); | 549 content::NotificationService::AllSources()); |
539 notification_registrar_.Add(this, | 550 notification_registrar_.Add(this, |
540 chrome::NOTIFICATION_TAB_LANGUAGE_DETERMINED, | 551 chrome::NOTIFICATION_TAB_LANGUAGE_DETERMINED, |
(...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
800 TranslateManagerMetrics::ReportUnsupportedLanguage(); | 811 TranslateManagerMetrics::ReportUnsupportedLanguage(); |
801 details->error_type = TranslateErrors::UNSUPPORTED_LANGUAGE; | 812 details->error_type = TranslateErrors::UNSUPPORTED_LANGUAGE; |
802 } | 813 } |
803 | 814 |
804 Profile* profile = | 815 Profile* profile = |
805 Profile::FromBrowserContext(web_contents->GetBrowserContext()); | 816 Profile::FromBrowserContext(web_contents->GetBrowserContext()); |
806 PrefService* prefs = profile->GetPrefs(); | 817 PrefService* prefs = profile->GetPrefs(); |
807 TranslateInfoBarDelegate::Create( | 818 TranslateInfoBarDelegate::Create( |
808 InfoBarService::FromWebContents(web_contents), true, | 819 InfoBarService::FromWebContents(web_contents), true, |
809 (details->error_type == TranslateErrors::NONE) ? | 820 (details->error_type == TranslateErrors::NONE) ? |
810 TranslateInfoBarDelegate::AFTER_TRANSLATE : | 821 TranslateInfoBarDelegate::AFTER_TRANSLATE : |
811 TranslateInfoBarDelegate::TRANSLATION_ERROR, | 822 TranslateInfoBarDelegate::TRANSLATION_ERROR, |
812 details->error_type, prefs, ShortcutConfig(), details->source_language, | 823 details->error_type, prefs, ShortcutConfig(), details->source_language, |
813 details->target_language); | 824 details->target_language); |
| 825 |
| 826 if (details->error_type != TranslateErrors::NONE) { |
| 827 TranslateErrorDetails error_details; |
| 828 error_details.time = base::Time::Now(); |
| 829 error_details.url = web_contents->GetActiveURL(); |
| 830 error_details.error = details->error_type; |
| 831 NotifyTranslateError(error_details); |
| 832 } |
814 } | 833 } |
815 | 834 |
816 bool TranslateManager::IsAcceptLanguage(WebContents* web_contents, | 835 bool TranslateManager::IsAcceptLanguage(WebContents* web_contents, |
817 const std::string& language) { | 836 const std::string& language) { |
818 Profile* profile = | 837 Profile* profile = |
819 Profile::FromBrowserContext(web_contents->GetBrowserContext()); | 838 Profile::FromBrowserContext(web_contents->GetBrowserContext()); |
820 profile = profile->GetOriginalProfile(); | 839 profile = profile->GetOriginalProfile(); |
821 PrefService* pref_service = profile->GetPrefs(); | 840 PrefService* pref_service = profile->GetPrefs(); |
822 PrefServiceLanguagesMap::const_iterator iter = | 841 PrefServiceLanguagesMap::const_iterator iter = |
823 accept_languages_.find(pref_service); | 842 accept_languages_.find(pref_service); |
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
995 // reason so we are more aggressive showing the shortcuts for never translate. | 1014 // reason so we are more aggressive showing the shortcuts for never translate. |
996 #if defined(OS_ANDROID) | 1015 #if defined(OS_ANDROID) |
997 config.never_translate_min_count = 1; | 1016 config.never_translate_min_count = 1; |
998 #else | 1017 #else |
999 config.never_translate_min_count = 3; | 1018 config.never_translate_min_count = 3; |
1000 #endif // defined(OS_ANDROID) | 1019 #endif // defined(OS_ANDROID) |
1001 | 1020 |
1002 config.always_translate_min_count = 3; | 1021 config.always_translate_min_count = 3; |
1003 return config; | 1022 return config; |
1004 } | 1023 } |
OLD | NEW |