| OLD | NEW | 
|    1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |    1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 
|    2 // Use of this source code is governed by a BSD-style license that can be |    2 // Use of this source code is governed by a BSD-style license that can be | 
|    3 // found in the LICENSE file. |    3 // found in the LICENSE file. | 
|    4  |    4  | 
|    5 #include "chrome/browser/translate/translate_infobar_delegate.h" |    5 #include "chrome/browser/translate/translate_infobar_delegate.h" | 
|    6  |    6  | 
|    7 #include <algorithm> |    7 #include <algorithm> | 
|    8  |    8  | 
|    9 #include "base/i18n/string_compare.h" |    9 #include "base/i18n/string_compare.h" | 
|   10 #include "base/metrics/histogram.h" |   10 #include "base/metrics/histogram.h" | 
|   11 #include "base/prefs/pref_service.h" |   11 #include "base/prefs/pref_service.h" | 
|   12 #include "chrome/browser/browser_process.h" |   12 #include "chrome/browser/browser_process.h" | 
|   13 #include "chrome/browser/infobars/infobar_service.h" |   13 #include "chrome/browser/infobars/infobar_service.h" | 
|   14 #include "chrome/browser/profiles/profile.h" |   14 #include "chrome/browser/profiles/profile.h" | 
|   15 #include "chrome/browser/translate/translate_accept_languages.h" |   15 #include "chrome/browser/translate/translate_accept_languages.h" | 
|   16 #include "chrome/browser/translate/translate_manager.h" |   16 #include "chrome/browser/translate/translate_manager.h" | 
|   17 #include "chrome/browser/translate/translate_tab_helper.h" |   17 #include "chrome/browser/translate/translate_tab_helper.h" | 
 |   18 #include "components/translate/common/translate_constants.h" | 
|   18 #include "content/public/browser/navigation_details.h" |   19 #include "content/public/browser/navigation_details.h" | 
|   19 #include "content/public/browser/navigation_entry.h" |   20 #include "content/public/browser/navigation_entry.h" | 
|   20 #include "content/public/browser/web_contents.h" |   21 #include "content/public/browser/web_contents.h" | 
|   21 #include "grit/generated_resources.h" |   22 #include "grit/generated_resources.h" | 
|   22 #include "grit/theme_resources.h" |   23 #include "grit/theme_resources.h" | 
|   23 #include "third_party/icu/source/i18n/unicode/coll.h" |   24 #include "third_party/icu/source/i18n/unicode/coll.h" | 
|   24 #include "ui/base/l10n/l10n_util.h" |   25 #include "ui/base/l10n/l10n_util.h" | 
|   25  |   26  | 
|   26 using content::NavigationEntry; |   27 using content::NavigationEntry; | 
|   27  |   28  | 
|   28 namespace { |   29 namespace { | 
|   29  |   30  | 
 |   31 // TODO(hajimehoshi): Remove this after crbug/283720 is solved. | 
|   30 const char kDeclineTranslate[] = "Translate.DeclineTranslate"; |   32 const char kDeclineTranslate[] = "Translate.DeclineTranslate"; | 
 |   33  | 
|   31 const char kCloseInfobar[] = "Translate.DeclineTranslateCloseInfobar"; |   34 const char kCloseInfobar[] = "Translate.DeclineTranslateCloseInfobar"; | 
|   32 const char kRevertTranslation[] = "Translate.RevertTranslation"; |  | 
|   33 const char kShowErrorInfobar[] = "Translate.ShowErrorInfobar"; |   35 const char kShowErrorInfobar[] = "Translate.ShowErrorInfobar"; | 
|   34 const char kPerformTranslate[] = "Translate.Translate"; |  | 
|   35 const char kNeverTranslateLang[] = "Translate.NeverTranslateLang"; |  | 
|   36 const char kNeverTranslateSite[] = "Translate.NeverTranslateSite"; |  | 
|   37 const char kAlwaysTranslateLang[] = "Translate.AlwaysTranslateLang"; |  | 
|   38  |   36  | 
|   39 }  // namespace |   37 }  // namespace | 
|   40  |   38  | 
|   41 // static |   39 const size_t TranslateInfoBarDelegate::kNoIndex = TranslateUIDelegate::NO_INDEX; | 
|   42 const size_t TranslateInfoBarDelegate::kNoIndex = static_cast<size_t>(-1); |  | 
|   43  |   40  | 
|   44 TranslateInfoBarDelegate::~TranslateInfoBarDelegate() { |   41 TranslateInfoBarDelegate::~TranslateInfoBarDelegate() { | 
|   45 } |   42 } | 
|   46  |   43  | 
|   47 // static |   44 // static | 
|   48 void TranslateInfoBarDelegate::Create( |   45 void TranslateInfoBarDelegate::Create( | 
|   49     bool replace_existing_infobar, |   46     bool replace_existing_infobar, | 
|   50     InfoBarService* infobar_service, |   47     InfoBarService* infobar_service, | 
|   51     Type infobar_type, |   48     Type infobar_type, | 
|   52     const std::string& original_language, |   49     const std::string& original_language, | 
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   97   if (!old_delegate) { |   94   if (!old_delegate) { | 
|   98     infobar_service->AddInfoBar(infobar.PassAs<InfoBarDelegate>()); |   95     infobar_service->AddInfoBar(infobar.PassAs<InfoBarDelegate>()); | 
|   99   } else { |   96   } else { | 
|  100     DCHECK(replace_existing_infobar); |   97     DCHECK(replace_existing_infobar); | 
|  101     infobar_service->ReplaceInfoBar(old_delegate, |   98     infobar_service->ReplaceInfoBar(old_delegate, | 
|  102                                     infobar.PassAs<InfoBarDelegate>()); |   99                                     infobar.PassAs<InfoBarDelegate>()); | 
|  103   } |  100   } | 
|  104 } |  101 } | 
|  105  |  102  | 
|  106 void TranslateInfoBarDelegate::Translate() { |  103 void TranslateInfoBarDelegate::Translate() { | 
|  107   if (!web_contents()->GetBrowserContext()->IsOffTheRecord()) { |  104   ui_delegate_.Translate(); | 
|  108     prefs_.ResetTranslationDeniedCount(original_language_code()); |  | 
|  109     prefs_.IncrementTranslationAcceptedCount(original_language_code()); |  | 
|  110   } |  | 
|  111  |  | 
|  112   TranslateManager::GetInstance()->TranslatePage(web_contents(), |  | 
|  113                                                  original_language_code(), |  | 
|  114                                                  target_language_code()); |  | 
|  115  |  | 
|  116   UMA_HISTOGRAM_BOOLEAN(kPerformTranslate, true); |  | 
|  117 } |  105 } | 
|  118  |  106  | 
|  119 void TranslateInfoBarDelegate::RevertTranslation() { |  107 void TranslateInfoBarDelegate::RevertTranslation() { | 
|  120   TranslateManager::GetInstance()->RevertTranslation(web_contents()); |  108   ui_delegate_.RevertTranslation(); | 
|  121   RemoveSelf(); |  109   RemoveSelf(); | 
|  122  |  | 
|  123   UMA_HISTOGRAM_BOOLEAN(kRevertTranslation, true); |  | 
|  124 } |  110 } | 
|  125  |  111  | 
|  126 void TranslateInfoBarDelegate::ReportLanguageDetectionError() { |  112 void TranslateInfoBarDelegate::ReportLanguageDetectionError() { | 
|  127   TranslateManager::GetInstance()->ReportLanguageDetectionError( |  113   TranslateManager::GetInstance()->ReportLanguageDetectionError( | 
|  128       web_contents()); |  114       web_contents()); | 
|  129 } |  115 } | 
|  130  |  116  | 
|  131 void TranslateInfoBarDelegate::TranslationDeclined() { |  117 void TranslateInfoBarDelegate::TranslationDeclined() { | 
|  132   // TODO(miguelg) switch this back to just calling web_contents() |  118   // TODO(miguelg) switch this back to just calling web_contents() | 
|  133   // once we've diagnosed crbug/283720 |  119   // once we've diagnosed crbug/283720 | 
 |  120   // TODO(hajimehoshi): Replace this implementstion with calling ui_delegate_. | 
 |  121   // TranslationDeclined() after miguelg's investigating. | 
|  134   content::WebContents* contents = owner()->web_contents(); |  122   content::WebContents* contents = owner()->web_contents(); | 
|  135   content::BrowserContext* context = contents->GetBrowserContext(); |  123   content::BrowserContext* context = contents->GetBrowserContext(); | 
|  136   if (!context->IsOffTheRecord()) { |  124   if (!context->IsOffTheRecord()) { | 
|  137     prefs_.ResetTranslationAcceptedCount(original_language_code()); |  125     prefs_.ResetTranslationAcceptedCount(original_language_code()); | 
|  138     prefs_.IncrementTranslationDeniedCount(original_language_code()); |  126     prefs_.IncrementTranslationDeniedCount(original_language_code()); | 
|  139   } |  127   } | 
|  140  |  128  | 
|  141   // Remember that the user declined the translation so as to prevent showing a |  129   // Remember that the user declined the translation so as to prevent showing a | 
|  142   // translate infobar for that page again.  (TranslateManager initiates |  130   // translate infobar for that page again.  (TranslateManager initiates | 
|  143   // translations when getting a LANGUAGE_DETERMINED from the page, which |  131   // translations when getting a LANGUAGE_DETERMINED from the page, which | 
|  144   // happens when a load stops. That could happen multiple times, including |  132   // happens when a load stops. That could happen multiple times, including | 
|  145   // after the user already declined the translation.) |  133   // after the user already declined the translation.) | 
|  146   TranslateTabHelper::FromWebContents(web_contents())-> |  134   TranslateTabHelper::FromWebContents(web_contents())-> | 
|  147       language_state().set_translation_declined(true); |  135       language_state().set_translation_declined(true); | 
|  148  |  136  | 
|  149   UMA_HISTOGRAM_BOOLEAN(kDeclineTranslate, true); |  137   UMA_HISTOGRAM_BOOLEAN(kDeclineTranslate, true); | 
|  150 } |  138 } | 
|  151  |  139  | 
|  152 bool TranslateInfoBarDelegate::IsTranslatableLanguageByPrefs() { |  140 bool TranslateInfoBarDelegate::IsTranslatableLanguageByPrefs() { | 
|  153   Profile* profile = |  141   Profile* profile = | 
|  154       Profile::FromBrowserContext(web_contents()->GetBrowserContext()); |  142       Profile::FromBrowserContext(web_contents()->GetBrowserContext()); | 
|  155   Profile* original_profile = profile->GetOriginalProfile(); |  143   Profile* original_profile = profile->GetOriginalProfile(); | 
|  156   return TranslatePrefs::CanTranslateLanguage(original_profile, |  144   return TranslatePrefs::CanTranslateLanguage(original_profile, | 
|  157                                               original_language_code()); |  145                                               original_language_code()); | 
|  158 } |  146 } | 
|  159  |  147  | 
|  160 void TranslateInfoBarDelegate::ToggleTranslatableLanguageByPrefs() { |  148 void TranslateInfoBarDelegate::ToggleTranslatableLanguageByPrefs() { | 
|  161   const std::string& original_lang = original_language_code(); |  149   if (ui_delegate_.IsLanguageBlocked()) { | 
|  162   if (prefs_.IsBlockedLanguage(original_lang)) { |  150     ui_delegate_.SetLanguageBlocked(false); | 
|  163     prefs_.UnblockLanguage(original_lang); |  | 
|  164   } else { |  151   } else { | 
|  165     prefs_.BlockLanguage(original_lang); |  152     ui_delegate_.SetLanguageBlocked(true); | 
|  166     RemoveSelf(); |  153     RemoveSelf(); | 
|  167   } |  154   } | 
|  168  |  | 
|  169   UMA_HISTOGRAM_BOOLEAN(kNeverTranslateLang, true); |  | 
|  170 } |  155 } | 
|  171  |  156  | 
|  172 bool TranslateInfoBarDelegate::IsSiteBlacklisted() { |  157 bool TranslateInfoBarDelegate::IsSiteBlacklisted() { | 
|  173   std::string host = GetPageHost(); |  158   return ui_delegate_.IsSiteBlacklisted(); | 
|  174   return !host.empty() && prefs_.IsSiteBlacklisted(host); |  | 
|  175 } |  159 } | 
|  176  |  160  | 
|  177 void TranslateInfoBarDelegate::ToggleSiteBlacklist() { |  161 void TranslateInfoBarDelegate::ToggleSiteBlacklist() { | 
|  178   std::string host = GetPageHost(); |  162   if (ui_delegate_.IsSiteBlacklisted()) { | 
|  179   if (host.empty()) |  163     ui_delegate_.SetSiteBlacklist(false); | 
|  180     return; |  | 
|  181  |  | 
|  182   if (prefs_.IsSiteBlacklisted(host)) { |  | 
|  183     prefs_.RemoveSiteFromBlacklist(host); |  | 
|  184   } else { |  164   } else { | 
|  185     prefs_.BlacklistSite(host); |  165     ui_delegate_.SetSiteBlacklist(true); | 
|  186     RemoveSelf(); |  166     RemoveSelf(); | 
|  187   } |  167   } | 
|  188  |  | 
|  189   UMA_HISTOGRAM_BOOLEAN(kNeverTranslateSite, true); |  | 
|  190 } |  168 } | 
|  191  |  169  | 
|  192 bool TranslateInfoBarDelegate::ShouldAlwaysTranslate() { |  170 bool TranslateInfoBarDelegate::ShouldAlwaysTranslate() { | 
|  193   return prefs_.IsLanguagePairWhitelisted(original_language_code(), |  171   return ui_delegate_.ShouldAlwaysTranslate(); | 
|  194                                           target_language_code()); |  | 
|  195 } |  172 } | 
|  196  |  173  | 
|  197 void TranslateInfoBarDelegate::ToggleAlwaysTranslate() { |  174 void TranslateInfoBarDelegate::ToggleAlwaysTranslate() { | 
|  198   const std::string& original_lang = original_language_code(); |  175   ui_delegate_.SetAlwaysTranslate(!ui_delegate_.ShouldAlwaysTranslate()); | 
|  199   const std::string& target_lang = target_language_code(); |  | 
|  200   if (prefs_.IsLanguagePairWhitelisted(original_lang, target_lang)) |  | 
|  201     prefs_.RemoveLanguagePairFromWhitelist(original_lang, target_lang); |  | 
|  202   else |  | 
|  203     prefs_.WhitelistLanguagePair(original_lang, target_lang); |  | 
|  204  |  | 
|  205   UMA_HISTOGRAM_BOOLEAN(kAlwaysTranslateLang, true); |  | 
|  206 } |  176 } | 
|  207  |  177  | 
|  208 void TranslateInfoBarDelegate::AlwaysTranslatePageLanguage() { |  178 void TranslateInfoBarDelegate::AlwaysTranslatePageLanguage() { | 
|  209   const std::string& original_lang = original_language_code(); |  179   DCHECK(!ui_delegate_.ShouldAlwaysTranslate()); | 
|  210   const std::string& target_lang = target_language_code(); |  180   ui_delegate_.SetAlwaysTranslate(true); | 
|  211   DCHECK(!prefs_.IsLanguagePairWhitelisted(original_lang, target_lang)); |  | 
|  212   prefs_.WhitelistLanguagePair(original_lang, target_lang); |  | 
|  213   Translate(); |  181   Translate(); | 
|  214 } |  182 } | 
|  215  |  183  | 
|  216 void TranslateInfoBarDelegate::NeverTranslatePageLanguage() { |  184 void TranslateInfoBarDelegate::NeverTranslatePageLanguage() { | 
|  217   std::string original_lang = original_language_code(); |  185   DCHECK(!ui_delegate_.IsLanguageBlocked()); | 
|  218   prefs_.BlockLanguage(original_lang); |  186   ui_delegate_.SetLanguageBlocked(true); | 
|  219   RemoveSelf(); |  187   RemoveSelf(); | 
|  220 } |  188 } | 
|  221  |  189  | 
|  222 string16 TranslateInfoBarDelegate::GetMessageInfoBarText() { |  190 string16 TranslateInfoBarDelegate::GetMessageInfoBarText() { | 
|  223   if (infobar_type_ == TRANSLATING) { |  191   if (infobar_type_ == TRANSLATING) { | 
 |  192     string16 target_language_name = language_name_at(target_language_index()); | 
|  224     return l10n_util::GetStringFUTF16(IDS_TRANSLATE_INFOBAR_TRANSLATING_TO, |  193     return l10n_util::GetStringFUTF16(IDS_TRANSLATE_INFOBAR_TRANSLATING_TO, | 
|  225                                       language_name_at(target_language_index_)); |  194                                       target_language_name); | 
|  226   } |  195   } | 
|  227  |  196  | 
|  228   DCHECK_EQ(TRANSLATION_ERROR, infobar_type_); |  197   DCHECK_EQ(TRANSLATION_ERROR, infobar_type_); | 
|  229   UMA_HISTOGRAM_ENUMERATION(kShowErrorInfobar, |  198   UMA_HISTOGRAM_ENUMERATION(kShowErrorInfobar, | 
|  230                             error_type_, |  199                             error_type_, | 
|  231                             TranslateErrors::TRANSLATE_ERROR_MAX); |  200                             TranslateErrors::TRANSLATE_ERROR_MAX); | 
|  232   switch (error_type_) { |  201   switch (error_type_) { | 
|  233     case TranslateErrors::NETWORK: |  202     case TranslateErrors::NETWORK: | 
|  234       return l10n_util::GetStringUTF16( |  203       return l10n_util::GetStringUTF16( | 
|  235           IDS_TRANSLATE_INFOBAR_ERROR_CANT_CONNECT); |  204           IDS_TRANSLATE_INFOBAR_ERROR_CANT_CONNECT); | 
|  236     case TranslateErrors::INITIALIZATION_ERROR: |  205     case TranslateErrors::INITIALIZATION_ERROR: | 
|  237     case TranslateErrors::TRANSLATION_ERROR: |  206     case TranslateErrors::TRANSLATION_ERROR: | 
|  238       return l10n_util::GetStringUTF16( |  207       return l10n_util::GetStringUTF16( | 
|  239           IDS_TRANSLATE_INFOBAR_ERROR_CANT_TRANSLATE); |  208           IDS_TRANSLATE_INFOBAR_ERROR_CANT_TRANSLATE); | 
|  240     case TranslateErrors::UNKNOWN_LANGUAGE: |  209     case TranslateErrors::UNKNOWN_LANGUAGE: | 
|  241       return l10n_util::GetStringUTF16( |  210       return l10n_util::GetStringUTF16( | 
|  242           IDS_TRANSLATE_INFOBAR_UNKNOWN_PAGE_LANGUAGE); |  211           IDS_TRANSLATE_INFOBAR_UNKNOWN_PAGE_LANGUAGE); | 
|  243     case TranslateErrors::UNSUPPORTED_LANGUAGE: |  212     case TranslateErrors::UNSUPPORTED_LANGUAGE: | 
|  244       return l10n_util::GetStringFUTF16( |  213       return l10n_util::GetStringFUTF16( | 
|  245           IDS_TRANSLATE_INFOBAR_UNSUPPORTED_PAGE_LANGUAGE, |  214           IDS_TRANSLATE_INFOBAR_UNSUPPORTED_PAGE_LANGUAGE, | 
|  246           language_name_at(target_language_index_)); |  215           language_name_at(target_language_index())); | 
|  247     case TranslateErrors::IDENTICAL_LANGUAGES: |  216     case TranslateErrors::IDENTICAL_LANGUAGES: | 
|  248       return l10n_util::GetStringFUTF16( |  217       return l10n_util::GetStringFUTF16( | 
|  249           IDS_TRANSLATE_INFOBAR_ERROR_SAME_LANGUAGE, |  218           IDS_TRANSLATE_INFOBAR_ERROR_SAME_LANGUAGE, | 
|  250           language_name_at(target_language_index_)); |  219           language_name_at(target_language_index())); | 
|  251     default: |  220     default: | 
|  252       NOTREACHED(); |  221       NOTREACHED(); | 
|  253       return string16(); |  222       return string16(); | 
|  254   } |  223   } | 
|  255 } |  224 } | 
|  256  |  225  | 
|  257 string16 TranslateInfoBarDelegate::GetMessageInfoBarButtonText() { |  226 string16 TranslateInfoBarDelegate::GetMessageInfoBarButtonText() { | 
|  258   if (infobar_type_ != TRANSLATION_ERROR) { |  227   if (infobar_type_ != TRANSLATION_ERROR) { | 
|  259     DCHECK_EQ(TRANSLATING, infobar_type_); |  228     DCHECK_EQ(TRANSLATING, infobar_type_); | 
|  260   } else if ((error_type_ != TranslateErrors::IDENTICAL_LANGUAGES) && |  229   } else if ((error_type_ != TranslateErrors::IDENTICAL_LANGUAGES) && | 
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  341     Type infobar_type, |  310     Type infobar_type, | 
|  342     TranslateInfoBarDelegate* old_delegate, |  311     TranslateInfoBarDelegate* old_delegate, | 
|  343     const std::string& original_language, |  312     const std::string& original_language, | 
|  344     const std::string& target_language, |  313     const std::string& target_language, | 
|  345     TranslateErrors::Type error_type, |  314     TranslateErrors::Type error_type, | 
|  346     PrefService* prefs, |  315     PrefService* prefs, | 
|  347     ShortcutConfiguration shortcut_config) |  316     ShortcutConfiguration shortcut_config) | 
|  348     : InfoBarDelegate(infobar_service), |  317     : InfoBarDelegate(infobar_service), | 
|  349       infobar_type_(infobar_type), |  318       infobar_type_(infobar_type), | 
|  350       background_animation_(NONE), |  319       background_animation_(NONE), | 
|  351       original_language_index_(kNoIndex), |  320       ui_delegate_(web_contents(), original_language, target_language), | 
|  352       initial_original_language_index_(kNoIndex), |  | 
|  353       target_language_index_(kNoIndex), |  | 
|  354       error_type_(error_type), |  321       error_type_(error_type), | 
|  355       prefs_(prefs), |  322       prefs_(prefs), | 
|  356       shortcut_config_(shortcut_config) { |  323       shortcut_config_(shortcut_config) { | 
|  357   DCHECK_NE((infobar_type_ == TRANSLATION_ERROR), |  324   DCHECK_NE((infobar_type_ == TRANSLATION_ERROR), | 
|  358             (error_type_ == TranslateErrors::NONE)); |  325             (error_type_ == TranslateErrors::NONE)); | 
|  359  |  326  | 
|  360   if (old_delegate && (old_delegate->is_error() != is_error())) |  327   if (old_delegate && (old_delegate->is_error() != is_error())) | 
|  361     background_animation_ = is_error() ? NORMAL_TO_ERROR : ERROR_TO_NORMAL; |  328     background_animation_ = is_error() ? NORMAL_TO_ERROR : ERROR_TO_NORMAL; | 
|  362  |  | 
|  363   std::vector<std::string> language_codes; |  | 
|  364   TranslateManager::GetSupportedLanguages(&language_codes); |  | 
|  365  |  | 
|  366   // Preparing for the alphabetical order in the locale. |  | 
|  367   UErrorCode error = U_ZERO_ERROR; |  | 
|  368   std::string locale = g_browser_process->GetApplicationLocale(); |  | 
|  369   icu::Locale loc(locale.c_str()); |  | 
|  370   scoped_ptr<icu::Collator> collator(icu::Collator::createInstance(loc, error)); |  | 
|  371   collator->setStrength(icu::Collator::PRIMARY); |  | 
|  372  |  | 
|  373   languages_.reserve(language_codes.size()); |  | 
|  374   for (std::vector<std::string>::const_iterator iter = language_codes.begin(); |  | 
|  375        iter != language_codes.end(); ++iter) { |  | 
|  376     std::string language_code = *iter; |  | 
|  377  |  | 
|  378     string16 language_name = GetLanguageDisplayableName(language_code); |  | 
|  379     // Insert the language in languages_ in alphabetical order. |  | 
|  380     std::vector<LanguageNamePair>::iterator iter2; |  | 
|  381     for (iter2 = languages_.begin(); iter2 != languages_.end(); ++iter2) { |  | 
|  382       if (base::i18n::CompareString16WithCollator(collator.get(), |  | 
|  383           language_name, iter2->second) == UCOL_LESS) { |  | 
|  384         break; |  | 
|  385       } |  | 
|  386     } |  | 
|  387     languages_.insert(iter2, LanguageNamePair(language_code, language_name)); |  | 
|  388   } |  | 
|  389   for (std::vector<LanguageNamePair>::const_iterator iter = languages_.begin(); |  | 
|  390        iter != languages_.end(); ++iter) { |  | 
|  391     std::string language_code = iter->first; |  | 
|  392     if (language_code == original_language) { |  | 
|  393       original_language_index_ = iter - languages_.begin(); |  | 
|  394       initial_original_language_index_ = original_language_index_; |  | 
|  395     } |  | 
|  396     if (language_code == target_language) |  | 
|  397       target_language_index_ = iter - languages_.begin(); |  | 
|  398   } |  | 
|  399   DCHECK_NE(kNoIndex, target_language_index_); |  | 
|  400 } |  329 } | 
|  401  |  330  | 
|  402 void TranslateInfoBarDelegate::InfoBarDismissed() { |  331 void TranslateInfoBarDelegate::InfoBarDismissed() { | 
|  403   if (infobar_type_ != BEFORE_TRANSLATE) |  332   if (infobar_type_ != BEFORE_TRANSLATE) | 
|  404     return; |  333     return; | 
|  405  |  334  | 
|  406   // The user closed the infobar without clicking the translate button. |  335   // The user closed the infobar without clicking the translate button. | 
|  407   TranslationDeclined(); |  336   TranslationDeclined(); | 
|  408   UMA_HISTOGRAM_BOOLEAN(kCloseInfobar, true); |  337   UMA_HISTOGRAM_BOOLEAN(kCloseInfobar, true); | 
|  409 } |  338 } | 
| (...skipping 13 matching lines...) Expand all  Loading... | 
|  423   if (!details.is_navigation_to_different_page() && !details.is_main_frame) |  352   if (!details.is_navigation_to_different_page() && !details.is_main_frame) | 
|  424     return false; |  353     return false; | 
|  425  |  354  | 
|  426   return InfoBarDelegate::ShouldExpireInternal(details); |  355   return InfoBarDelegate::ShouldExpireInternal(details); | 
|  427 } |  356 } | 
|  428  |  357  | 
|  429 TranslateInfoBarDelegate* |  358 TranslateInfoBarDelegate* | 
|  430     TranslateInfoBarDelegate::AsTranslateInfoBarDelegate() { |  359     TranslateInfoBarDelegate::AsTranslateInfoBarDelegate() { | 
|  431   return this; |  360   return this; | 
|  432 } |  361 } | 
|  433  |  | 
|  434 std::string TranslateInfoBarDelegate::GetPageHost() { |  | 
|  435   NavigationEntry* entry = web_contents()->GetController().GetActiveEntry(); |  | 
|  436   return entry ? entry->GetURL().HostNoBrackets() : std::string(); |  | 
|  437 } |  | 
| OLD | NEW |