| Index: chrome/browser/translate/translate_infobar_delegate.cc
 | 
| diff --git a/chrome/browser/translate/translate_infobar_delegate.cc b/chrome/browser/translate/translate_infobar_delegate.cc
 | 
| index 9cabbaa637fe8771b12e76e185e546d1f4d2cb27..b4a93e344adc0eafbf28a8fd18572065f54bfa5e 100644
 | 
| --- a/chrome/browser/translate/translate_infobar_delegate.cc
 | 
| +++ b/chrome/browser/translate/translate_infobar_delegate.cc
 | 
| @@ -27,19 +27,12 @@ using content::NavigationEntry;
 | 
|  
 | 
|  namespace {
 | 
|  
 | 
| -const char kDeclineTranslate[] = "Translate.DeclineTranslate";
 | 
|  const char kCloseInfobar[] = "Translate.DeclineTranslateCloseInfobar";
 | 
| -const char kRevertTranslation[] = "Translate.RevertTranslation";
 | 
|  const char kShowErrorInfobar[] = "Translate.ShowErrorInfobar";
 | 
| -const char kPerformTranslate[] = "Translate.Translate";
 | 
| -const char kNeverTranslateLang[] = "Translate.NeverTranslateLang";
 | 
| -const char kNeverTranslateSite[] = "Translate.NeverTranslateSite";
 | 
| -const char kAlwaysTranslateLang[] = "Translate.AlwaysTranslateLang";
 | 
|  
 | 
|  }  // namespace
 | 
|  
 | 
| -// static
 | 
| -const size_t TranslateInfoBarDelegate::kNoIndex = static_cast<size_t>(-1);
 | 
| +const size_t TranslateInfoBarDelegate::kNoIndex = TranslateUIDelegate::kNoIndex;
 | 
|  
 | 
|  TranslateInfoBarDelegate::~TranslateInfoBarDelegate() {
 | 
|  }
 | 
| @@ -104,23 +97,12 @@ void TranslateInfoBarDelegate::Create(
 | 
|  }
 | 
|  
 | 
|  void TranslateInfoBarDelegate::Translate() {
 | 
| -  if (!web_contents()->GetBrowserContext()->IsOffTheRecord()) {
 | 
| -    prefs_.ResetTranslationDeniedCount(original_language_code());
 | 
| -    prefs_.IncrementTranslationAcceptedCount(original_language_code());
 | 
| -  }
 | 
| -
 | 
| -  TranslateManager::GetInstance()->TranslatePage(web_contents(),
 | 
| -                                                 original_language_code(),
 | 
| -                                                 target_language_code());
 | 
| -
 | 
| -  UMA_HISTOGRAM_BOOLEAN(kPerformTranslate, true);
 | 
| +  ui_delegate_.Translate();
 | 
|  }
 | 
|  
 | 
|  void TranslateInfoBarDelegate::RevertTranslation() {
 | 
| -  TranslateManager::GetInstance()->RevertTranslation(web_contents());
 | 
| +  ui_delegate_.RevertTranslation();
 | 
|    RemoveSelf();
 | 
| -
 | 
| -  UMA_HISTOGRAM_BOOLEAN(kRevertTranslation, true);
 | 
|  }
 | 
|  
 | 
|  void TranslateInfoBarDelegate::ReportLanguageDetectionError() {
 | 
| @@ -129,20 +111,7 @@ void TranslateInfoBarDelegate::ReportLanguageDetectionError() {
 | 
|  }
 | 
|  
 | 
|  void TranslateInfoBarDelegate::TranslationDeclined() {
 | 
| -  if (!web_contents()->GetBrowserContext()->IsOffTheRecord()) {
 | 
| -    prefs_.ResetTranslationAcceptedCount(original_language_code());
 | 
| -    prefs_.IncrementTranslationDeniedCount(original_language_code());
 | 
| -  }
 | 
| -
 | 
| -  // Remember that the user declined the translation so as to prevent showing a
 | 
| -  // translate infobar for that page again.  (TranslateManager initiates
 | 
| -  // translations when getting a LANGUAGE_DETERMINED from the page, which
 | 
| -  // happens when a load stops. That could happen multiple times, including
 | 
| -  // after the user already declined the translation.)
 | 
| -  TranslateTabHelper::FromWebContents(web_contents())->
 | 
| -      language_state().set_translation_declined(true);
 | 
| -
 | 
| -  UMA_HISTOGRAM_BOOLEAN(kDeclineTranslate, true);
 | 
| +  ui_delegate_.TranslationDeclined();
 | 
|  }
 | 
|  
 | 
|  bool TranslateInfoBarDelegate::IsTranslatableLanguageByPrefs() {
 | 
| @@ -154,72 +123,52 @@ bool TranslateInfoBarDelegate::IsTranslatableLanguageByPrefs() {
 | 
|  }
 | 
|  
 | 
|  void TranslateInfoBarDelegate::ToggleTranslatableLanguageByPrefs() {
 | 
| -  const std::string& original_lang = original_language_code();
 | 
| -  if (prefs_.IsBlockedLanguage(original_lang)) {
 | 
| -    prefs_.UnblockLanguage(original_lang);
 | 
| +  if (ui_delegate_.IsLanguageBlocked()) {
 | 
| +    ui_delegate_.SetLanguageBlocked(false);
 | 
|    } else {
 | 
| -    prefs_.BlockLanguage(original_lang);
 | 
| +    ui_delegate_.SetLanguageBlocked(true);
 | 
|      RemoveSelf();
 | 
|    }
 | 
| -
 | 
| -  UMA_HISTOGRAM_BOOLEAN(kNeverTranslateLang, true);
 | 
|  }
 | 
|  
 | 
|  bool TranslateInfoBarDelegate::IsSiteBlacklisted() {
 | 
| -  std::string host = GetPageHost();
 | 
| -  return !host.empty() && prefs_.IsSiteBlacklisted(host);
 | 
| +  return ui_delegate_.IsSiteBlacklisted();
 | 
|  }
 | 
|  
 | 
|  void TranslateInfoBarDelegate::ToggleSiteBlacklist() {
 | 
| -  std::string host = GetPageHost();
 | 
| -  if (host.empty())
 | 
| -    return;
 | 
| -
 | 
| -  if (prefs_.IsSiteBlacklisted(host)) {
 | 
| -    prefs_.RemoveSiteFromBlacklist(host);
 | 
| +  if (ui_delegate_.IsSiteBlacklisted()) {
 | 
| +    ui_delegate_.SetSiteBlacklist(false);
 | 
|    } else {
 | 
| -    prefs_.BlacklistSite(host);
 | 
| +    ui_delegate_.SetSiteBlacklist(true);
 | 
|      RemoveSelf();
 | 
|    }
 | 
| -
 | 
| -  UMA_HISTOGRAM_BOOLEAN(kNeverTranslateSite, true);
 | 
|  }
 | 
|  
 | 
|  bool TranslateInfoBarDelegate::ShouldAlwaysTranslate() {
 | 
| -  return prefs_.IsLanguagePairWhitelisted(original_language_code(),
 | 
| -                                          target_language_code());
 | 
| +  return ui_delegate_.ShouldAlwaysTranslate();
 | 
|  }
 | 
|  
 | 
|  void TranslateInfoBarDelegate::ToggleAlwaysTranslate() {
 | 
| -  const std::string& original_lang = original_language_code();
 | 
| -  const std::string& target_lang = target_language_code();
 | 
| -  if (prefs_.IsLanguagePairWhitelisted(original_lang, target_lang))
 | 
| -    prefs_.RemoveLanguagePairFromWhitelist(original_lang, target_lang);
 | 
| -  else
 | 
| -    prefs_.WhitelistLanguagePair(original_lang, target_lang);
 | 
| -
 | 
| -  UMA_HISTOGRAM_BOOLEAN(kAlwaysTranslateLang, true);
 | 
| +  ui_delegate_.SetAlwaysTranslate(!ui_delegate_.ShouldAlwaysTranslate());
 | 
|  }
 | 
|  
 | 
|  void TranslateInfoBarDelegate::AlwaysTranslatePageLanguage() {
 | 
| -  const std::string& original_lang = original_language_code();
 | 
| -  const std::string& target_lang = target_language_code();
 | 
| -  DCHECK(!prefs_.IsLanguagePairWhitelisted(original_lang, target_lang));
 | 
| -  prefs_.WhitelistLanguagePair(original_lang, target_lang);
 | 
| +  DCHECK(!ui_delegate_.ShouldAlwaysTranslate());
 | 
| +  ui_delegate_.SetAlwaysTranslate(true);
 | 
|    Translate();
 | 
|  }
 | 
|  
 | 
|  void TranslateInfoBarDelegate::NeverTranslatePageLanguage() {
 | 
| -  std::string original_lang = original_language_code();
 | 
| -  DCHECK(!prefs_.IsBlockedLanguage(original_lang));
 | 
| -  prefs_.BlockLanguage(original_lang);
 | 
| +  DCHECK(!ui_delegate_.IsLanguageBlocked());
 | 
| +  ui_delegate_.SetLanguageBlocked(true);
 | 
|    RemoveSelf();
 | 
|  }
 | 
|  
 | 
|  string16 TranslateInfoBarDelegate::GetMessageInfoBarText() {
 | 
|    if (infobar_type_ == TRANSLATING) {
 | 
| +    string16 target_language_name = language_name_at(target_language_index());
 | 
|      return l10n_util::GetStringFUTF16(IDS_TRANSLATE_INFOBAR_TRANSLATING_TO,
 | 
| -                                      language_name_at(target_language_index_));
 | 
| +                                      target_language_name);
 | 
|    }
 | 
|  
 | 
|    DCHECK_EQ(TRANSLATION_ERROR, infobar_type_);
 | 
| @@ -240,11 +189,11 @@ string16 TranslateInfoBarDelegate::GetMessageInfoBarText() {
 | 
|      case TranslateErrors::UNSUPPORTED_LANGUAGE:
 | 
|        return l10n_util::GetStringFUTF16(
 | 
|            IDS_TRANSLATE_INFOBAR_UNSUPPORTED_PAGE_LANGUAGE,
 | 
| -          language_name_at(target_language_index_));
 | 
| +          language_name_at(target_language_index()));
 | 
|      case TranslateErrors::IDENTICAL_LANGUAGES:
 | 
|        return l10n_util::GetStringFUTF16(
 | 
|            IDS_TRANSLATE_INFOBAR_ERROR_SAME_LANGUAGE,
 | 
| -          language_name_at(target_language_index_));
 | 
| +          language_name_at(target_language_index()));
 | 
|      default:
 | 
|        NOTREACHED();
 | 
|        return string16();
 | 
| @@ -345,9 +294,7 @@ TranslateInfoBarDelegate::TranslateInfoBarDelegate(
 | 
|      : InfoBarDelegate(infobar_service),
 | 
|        infobar_type_(infobar_type),
 | 
|        background_animation_(NONE),
 | 
| -      original_language_index_(kNoIndex),
 | 
| -      initial_original_language_index_(kNoIndex),
 | 
| -      target_language_index_(kNoIndex),
 | 
| +      ui_delegate_(web_contents(), original_language, target_language),
 | 
|        error_type_(error_type),
 | 
|        prefs_(prefs),
 | 
|        shortcut_config_(shortcut_config) {
 | 
| @@ -356,44 +303,6 @@ TranslateInfoBarDelegate::TranslateInfoBarDelegate(
 | 
|  
 | 
|    if (old_delegate && (old_delegate->is_error() != is_error()))
 | 
|      background_animation_ = is_error() ? NORMAL_TO_ERROR : ERROR_TO_NORMAL;
 | 
| -
 | 
| -  std::vector<std::string> language_codes;
 | 
| -  TranslateManager::GetSupportedLanguages(&language_codes);
 | 
| -
 | 
| -  // Preparing for the alphabetical order in the locale.
 | 
| -  UErrorCode error = U_ZERO_ERROR;
 | 
| -  std::string locale = g_browser_process->GetApplicationLocale();
 | 
| -  icu::Locale loc(locale.c_str());
 | 
| -  scoped_ptr<icu::Collator> collator(icu::Collator::createInstance(loc, error));
 | 
| -  collator->setStrength(icu::Collator::PRIMARY);
 | 
| -
 | 
| -  languages_.reserve(language_codes.size());
 | 
| -  for (std::vector<std::string>::const_iterator iter = language_codes.begin();
 | 
| -       iter != language_codes.end(); ++iter) {
 | 
| -    std::string language_code = *iter;
 | 
| -
 | 
| -    string16 language_name = GetLanguageDisplayableName(language_code);
 | 
| -    // Insert the language in languages_ in alphabetical order.
 | 
| -    std::vector<LanguageNamePair>::iterator iter2;
 | 
| -    for (iter2 = languages_.begin(); iter2 != languages_.end(); ++iter2) {
 | 
| -      if (base::i18n::CompareString16WithCollator(collator.get(),
 | 
| -          language_name, iter2->second) == UCOL_LESS) {
 | 
| -        break;
 | 
| -      }
 | 
| -    }
 | 
| -    languages_.insert(iter2, LanguageNamePair(language_code, language_name));
 | 
| -  }
 | 
| -  for (std::vector<LanguageNamePair>::const_iterator iter = languages_.begin();
 | 
| -       iter != languages_.end(); ++iter) {
 | 
| -    std::string language_code = iter->first;
 | 
| -    if (language_code == original_language) {
 | 
| -      original_language_index_ = iter - languages_.begin();
 | 
| -      initial_original_language_index_ = original_language_index_;
 | 
| -    }
 | 
| -    if (language_code == target_language)
 | 
| -      target_language_index_ = iter - languages_.begin();
 | 
| -  }
 | 
| -  DCHECK_NE(kNoIndex, target_language_index_);
 | 
|  }
 | 
|  
 | 
|  void TranslateInfoBarDelegate::InfoBarDismissed() {
 | 
| @@ -427,8 +336,3 @@ TranslateInfoBarDelegate*
 | 
|      TranslateInfoBarDelegate::AsTranslateInfoBarDelegate() {
 | 
|    return this;
 | 
|  }
 | 
| -
 | 
| -std::string TranslateInfoBarDelegate::GetPageHost() {
 | 
| -  NavigationEntry* entry = web_contents()->GetController().GetActiveEntry();
 | 
| -  return entry ? entry->GetURL().HostNoBrackets() : std::string();
 | 
| -}
 | 
| 
 |