summaryrefslogtreecommitdiffstats
path: root/chrome/browser/automation/automation_provider_observers.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/automation/automation_provider_observers.cc')
-rw-r--r--chrome/browser/automation/automation_provider_observers.cc78
1 files changed, 78 insertions, 0 deletions
diff --git a/chrome/browser/automation/automation_provider_observers.cc b/chrome/browser/automation/automation_provider_observers.cc
index a9414be..a6a6b2a 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,