| Index: chrome/browser/automation/automation_provider.cc
|
| diff --git a/chrome/browser/automation/automation_provider.cc b/chrome/browser/automation/automation_provider.cc
|
| index bf526865bb044801ddf000073e4dccd746441b03..f3270d1e72822100ae1a18fe4662baff364d02e9 100644
|
| --- a/chrome/browser/automation/automation_provider.cc
|
| +++ b/chrome/browser/automation/automation_provider.cc
|
| @@ -2660,6 +2660,131 @@ void AutomationProvider::ClearBrowsingData(Browser* browser,
|
| // The observer also deletes itself after sending the reply.
|
| }
|
|
|
| +namespace {
|
| +
|
| + // Get the TabContents from a dictionary of arguments.
|
| + TabContents* GetTabContentsFromDict(const Browser* browser,
|
| + const DictionaryValue* args,
|
| + std::string* error_message) {
|
| + int tab_index;
|
| + if (!args->GetInteger(L"tab_index", &tab_index)) {
|
| + *error_message = "Must include tab_index.";
|
| + return NULL;
|
| + }
|
| +
|
| + TabContents* tab_contents = browser->GetTabContentsAt(tab_index);
|
| + if (!tab_contents) {
|
| + *error_message = StringPrintf("No tab at index %d.", tab_index);
|
| + return NULL;
|
| + }
|
| + return tab_contents;
|
| + }
|
| +
|
| + // Get the TranslateInfoBarDelegate from TabContents.
|
| + TranslateInfoBarDelegate* GetTranslateInfoBarDelegate(
|
| + TabContents* tab_contents) {
|
| + for (int i = 0; i < tab_contents->infobar_delegate_count(); i++) {
|
| + InfoBarDelegate* infobar = tab_contents->GetInfoBarDelegateAt(i);
|
| + if (infobar->AsTranslateInfoBarDelegate())
|
| + return infobar->AsTranslateInfoBarDelegate();
|
| + }
|
| + // No translate infobar.
|
| + return NULL;
|
| + }
|
| +
|
| +} // namespace
|
| +
|
| +// See GetTranslateInfo() in chrome/test/pyautolib/pyauto.py for sample json
|
| +// input and output.
|
| +void AutomationProvider::GetTranslateInfo(Browser* browser,
|
| + DictionaryValue* args,
|
| + IPC::Message* reply_message) {
|
| + std::string error_message;
|
| + TabContents* tab_contents = GetTabContentsFromDict(browser, args,
|
| + &error_message);
|
| + if (!tab_contents) {
|
| + AutomationJSONReply(this, reply_message).SendError(error_message);
|
| + return;
|
| + }
|
| +
|
| + // Get the translate bar if there is one and pass it to the observer.
|
| + // The observer will check for null and populate the information accordingly.
|
| + TranslateInfoBarDelegate* translate_bar =
|
| + GetTranslateInfoBarDelegate(tab_contents);
|
| +
|
| + TabLanguageDeterminedObserver* observer = new TabLanguageDeterminedObserver(
|
| + this, reply_message, tab_contents, translate_bar);
|
| + // If the language for the page hasn't been loaded yet, then just make
|
| + // the observer, otherwise call observe directly.
|
| + std::string language = tab_contents->language_state().original_language();
|
| + if (!language.empty()) {
|
| + observer->Observe(NotificationType::TAB_LANGUAGE_DETERMINED,
|
| + Source<TabContents>(tab_contents),
|
| + Details<std::string>(&language));
|
| + }
|
| +}
|
| +
|
| +// See SelectTranslateOption() in chrome/test/pyautolib/pyauto.py for sample
|
| +// json input.
|
| +// Sample json output: {}
|
| +void AutomationProvider::SelectTranslateOption(Browser* browser,
|
| + DictionaryValue* args,
|
| + IPC::Message* reply_message) {
|
| + std::string option;
|
| + std::string error_message;
|
| + TabContents* tab_contents = GetTabContentsFromDict(browser, args,
|
| + &error_message);
|
| + if (!tab_contents) {
|
| + AutomationJSONReply(this, reply_message).SendError(error_message);
|
| + return;
|
| + }
|
| +
|
| + TranslateInfoBarDelegate* translate_bar =
|
| + GetTranslateInfoBarDelegate(tab_contents);
|
| + if (!translate_bar) {
|
| + AutomationJSONReply(this, reply_message)
|
| + .SendError("There is no translate bar open.");
|
| + return;
|
| + }
|
| +
|
| + if (!args->GetString(L"option", &option)) {
|
| + AutomationJSONReply(this, reply_message).SendError("Must include option");
|
| + return;
|
| + }
|
| +
|
| + if (option == "translate_page") {
|
| + // Make a new notification observer which will send the reply.
|
| + new PageTranslatedObserver(this, reply_message, tab_contents);
|
| + translate_bar->Translate();
|
| + return;
|
| + }
|
| +
|
| + AutomationJSONReply reply(this, reply_message);
|
| + if (option == "never_translate_language") {
|
| + if (translate_bar->IsLanguageBlacklisted()) {
|
| + reply.SendError("The language was already blacklisted.");
|
| + return;
|
| + }
|
| + translate_bar->ToggleLanguageBlacklist();
|
| + reply.SendSuccess(NULL);
|
| + } else if (option == "never_translate_site") {
|
| + if (translate_bar->IsSiteBlacklisted()) {
|
| + reply.SendError("The site was already blacklisted.");
|
| + return;
|
| + }
|
| + translate_bar->ToggleSiteBlacklist();
|
| + reply.SendSuccess(NULL);
|
| + } else if (option == "toggle_always_translate") {
|
| + translate_bar->ToggleAlwaysTranslate();
|
| + reply.SendSuccess(NULL);
|
| + } else if (option == "revert_translation") {
|
| + translate_bar->RevertTranslation();
|
| + reply.SendSuccess(NULL);
|
| + } else {
|
| + reply.SendError("Invalid string found for option.");
|
| + }
|
| +}
|
| +
|
| // Sample json input: { "command": "GetThemeInfo" }
|
| // Refer GetThemeInfo() in chrome/test/pyautolib/pyauto.py for sample output.
|
| void AutomationProvider::GetThemeInfo(Browser* browser,
|
| @@ -3005,6 +3130,10 @@ void AutomationProvider::SendJSONRequest(int handle,
|
| // SetTheme() implemented using InstallExtension().
|
| handler_map["GetThemeInfo"] = &AutomationProvider::GetThemeInfo;
|
|
|
| + handler_map["SelectTranslateOption"] =
|
| + &AutomationProvider::SelectTranslateOption;
|
| + handler_map["GetTranslateInfo"] = &AutomationProvider::GetTranslateInfo;
|
| +
|
| handler_map["GetAutoFillProfile"] = &AutomationProvider::GetAutoFillProfile;
|
| handler_map["FillAutoFillProfile"] = &AutomationProvider::FillAutoFillProfile;
|
|
|
|
|