Index: chrome/browser/automation/automation_provider_observers.cc |
diff --git a/chrome/browser/automation/automation_provider_observers.cc b/chrome/browser/automation/automation_provider_observers.cc |
index 6725ae1bb715d3938456cf2bedcd8a13be9c846f..ad368c0f50d1f58f1cb6afa8b4b7f23caf29484e 100644 |
--- a/chrome/browser/automation/automation_provider_observers.cc |
+++ b/chrome/browser/automation/automation_provider_observers.cc |
@@ -23,6 +23,8 @@ |
#include "chrome/browser/profile.h" |
#include "chrome/browser/tab_contents/navigation_controller.h" |
#include "chrome/browser/tab_contents/tab_contents.h" |
+#include "chrome/browser/translate/page_translated_details.h" |
+#include "chrome/browser/translate/translate_infobar_delegate.h" |
#include "chrome/common/extensions/extension.h" |
#include "chrome/common/notification_service.h" |
#include "chrome/test/automation/automation_constants.h" |
@@ -929,6 +931,82 @@ void MetricEventDurationObserver::Observe(NotificationType type, |
metric_event_duration->duration_ms; |
} |
+PageTranslatedObserver::PageTranslatedObserver(AutomationProvider* automation, |
+ IPC::Message* reply_message, |
+ TabContents* tab_contents) |
+ : automation_(automation), |
+ reply_message_(reply_message) { |
+ registrar_.Add(this, NotificationType::PAGE_TRANSLATED, |
+ Source<TabContents>(tab_contents)); |
+} |
+ |
+void PageTranslatedObserver::Observe(NotificationType type, |
+ const NotificationSource& source, |
+ const NotificationDetails& details) { |
+ DCHECK(type == NotificationType::PAGE_TRANSLATED); |
+ AutomationJSONReply reply(automation_, reply_message_); |
+ |
+ PageTranslatedDetails* translated_details = |
+ Details<PageTranslatedDetails>(details).ptr(); |
+ scoped_ptr<DictionaryValue> return_value(new DictionaryValue); |
+ return_value->SetBoolean( |
+ L"translation_success", |
+ translated_details->error_type == TranslateErrors::NONE); |
+ reply.SendSuccess(return_value.get()); |
+ delete this; |
+} |
+ |
+TabLanguageDeterminedObserver::TabLanguageDeterminedObserver( |
+ AutomationProvider* automation, IPC::Message* reply_message, |
+ TabContents* tab_contents, TranslateInfoBarDelegate* translate_bar) |
+ : automation_(automation), |
+ reply_message_(reply_message), |
+ tab_contents_(tab_contents), |
+ translate_bar_(translate_bar) { |
+ registrar_.Add(this, NotificationType::TAB_LANGUAGE_DETERMINED, |
+ Source<TabContents>(tab_contents)); |
+} |
+ |
+void TabLanguageDeterminedObserver::Observe( |
+ NotificationType type, const NotificationSource& source, |
+ const NotificationDetails& details) { |
+ DCHECK(type == NotificationType::TAB_LANGUAGE_DETERMINED); |
+ |
+ scoped_ptr<DictionaryValue> return_value(new DictionaryValue); |
+ return_value->SetBoolean(L"page_translated", |
+ tab_contents_->language_state().IsPageTranslated()); |
+ return_value->SetBoolean( |
+ L"can_translate_page", TranslatePrefs::CanTranslate( |
+ automation_->profile()->GetPrefs(), |
+ tab_contents_->language_state().original_language(), |
+ tab_contents_->GetURL())); |
+ return_value->SetString( |
+ L"original_language", |
+ tab_contents_->language_state().original_language()); |
+ if (translate_bar_) { |
+ DictionaryValue* bar_info = new DictionaryValue; |
+ std::map<TranslateInfoBarDelegate::Type, std::string> type_to_string; |
+ type_to_string[TranslateInfoBarDelegate::BEFORE_TRANSLATE] = |
+ "BEFORE_TRANSLATE"; |
+ type_to_string[TranslateInfoBarDelegate::TRANSLATING] = |
+ "TRANSLATING"; |
+ type_to_string[TranslateInfoBarDelegate::AFTER_TRANSLATE] = |
+ "AFTER_TRANSLATE"; |
+ type_to_string[TranslateInfoBarDelegate::TRANSLATION_ERROR] = |
+ "TRANSLATION_ERROR"; |
+ |
+ bar_info->SetString(L"bar_state", type_to_string[translate_bar_->type()]); |
+ bar_info->SetString(L"target_lang_code", |
+ translate_bar_->GetTargetLanguageCode()); |
+ bar_info->SetString(L"original_lang_code", |
+ translate_bar_->GetOriginalLanguageCode()); |
+ return_value->Set(L"translate_bar", bar_info); |
+ } |
+ AutomationJSONReply(automation_, reply_message_) |
+ .SendSuccess(return_value.get()); |
+ delete this; |
+} |
+ |
#if defined(OS_CHROMEOS) |
LoginManagerObserver::LoginManagerObserver( |
AutomationProvider* automation, |