Index: chrome/browser/translate/translate_manager.cc |
diff --git a/chrome/browser/translate/translate_manager.cc b/chrome/browser/translate/translate_manager.cc |
index f9e3e72bd31768944df1a9eb9e882d91799c8459..9c27198427da451985dbdc2fbcbcc1a8ec455413 100644 |
--- a/chrome/browser/translate/translate_manager.cc |
+++ b/chrome/browser/translate/translate_manager.cc |
@@ -15,6 +15,7 @@ |
#include "base/string_util.h" |
#include "base/stringprintf.h" |
#include "base/strings/string_split.h" |
+#include "base/time.h" |
#include "base/values.h" |
#include "chrome/browser/browser_process.h" |
#include "chrome/browser/infobars/infobar_service.h" |
@@ -31,6 +32,7 @@ |
#include "chrome/browser/ui/tabs/tab_strip_model.h" |
#include "chrome/common/chrome_notification_types.h" |
#include "chrome/common/chrome_switches.h" |
+#include "chrome/common/language_detection_details.h" |
#include "chrome/common/pref_names.h" |
#include "chrome/common/render_messages.h" |
#include "chrome/common/translate_errors.h" |
@@ -362,6 +364,10 @@ void TranslateManager::Observe(int type, |
break; |
} |
case chrome::NOTIFICATION_TAB_LANGUAGE_DETERMINED: { |
+ const LanguageDetectionDetails* lang_det_details = |
+ content::Details<const LanguageDetectionDetails>(details).ptr(); |
+ NotifyLanguageDetection(*lang_det_details); |
+ |
WebContents* tab = content::Source<WebContents>(source).ptr(); |
// We may get this notifications multiple times. Make sure to translate |
// only once. |
@@ -375,7 +381,7 @@ void TranslateManager::Observe(int type, |
!language_state.translation_pending() && |
!language_state.translation_declined() && |
!language_state.IsPageTranslated()) { |
- std::string language = *(content::Details<std::string>(details).ptr()); |
+ std::string language = lang_det_details->adopted_language; |
InitiateTranslation(tab, language); |
} |
break; |
@@ -497,6 +503,20 @@ void TranslateManager::OnURLFetchComplete(const net::URLFetcher* source) { |
} |
} |
+void TranslateManager::AddObserver(Observer* obs) { |
+ observer_list_.AddObserver(obs); |
+} |
+ |
+void TranslateManager::RemoveObserver(Observer* obs) { |
+ observer_list_.RemoveObserver(obs); |
+} |
+ |
+void TranslateManager::NotifyLanguageDetection( |
+ const LanguageDetectionDetails& details) { |
+ FOR_EACH_OBSERVER(Observer, observer_list_, OnLanguageDetection(details)); |
+} |
+ |
+ |
TranslateManager::TranslateManager() |
: weak_method_factory_(this), |
translate_script_expiration_delay_( |
@@ -710,6 +730,7 @@ void TranslateManager::PageTranslated(WebContents* web_contents, |
UMA_HISTOGRAM_COUNTS("Translate.ServerReportedUnsupportedLanguage", 1); |
details->error_type = TranslateErrors::UNSUPPORTED_LANGUAGE; |
} |
+ |
Profile* profile = |
Profile::FromBrowserContext(web_contents->GetBrowserContext()); |
PrefService* prefs = profile->GetPrefs(); |