| 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
|
| deleted file mode 100644
|
| index ccb064187259e12ba808146eb9db9bdcb8ee181e..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/translate/translate_infobar_delegate.cc
|
| +++ /dev/null
|
| @@ -1,384 +0,0 @@
|
| -// Copyright 2012 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "chrome/browser/translate/translate_infobar_delegate.h"
|
| -
|
| -#include <algorithm>
|
| -
|
| -#include "base/i18n/string_compare.h"
|
| -#include "base/metrics/histogram.h"
|
| -#include "components/infobars/core/infobar.h"
|
| -#include "components/infobars/core/infobar_manager.h"
|
| -#include "components/translate/core/browser/language_state.h"
|
| -#include "components/translate/core/browser/translate_accept_languages.h"
|
| -#include "components/translate/core/browser/translate_client.h"
|
| -#include "components/translate/core/browser/translate_download_manager.h"
|
| -#include "components/translate/core/browser/translate_driver.h"
|
| -#include "components/translate/core/browser/translate_manager.h"
|
| -#include "components/translate/core/common/translate_constants.h"
|
| -#include "grit/component_strings.h"
|
| -#include "grit/theme_resources.h"
|
| -#include "third_party/icu/source/i18n/unicode/coll.h"
|
| -#include "ui/base/l10n/l10n_util.h"
|
| -
|
| -namespace {
|
| -
|
| -// Counts used to decide whether infobars should be shown.
|
| -// Android and iOS implementations do not offer a drop down (for space reasons),
|
| -// so we are more aggressive about showing the shortcut to never translate.
|
| -// The "Always Translate" option is always shown on iOS and Android.
|
| -#if defined(OS_ANDROID)
|
| - const int kAlwaysTranslateMinCount = 1;
|
| - const int kNeverTranslateMinCount = 1;
|
| -#elif defined(OS_IOS)
|
| - // The iOS implementation, like the Android implementation, shows the "Never
|
| - // translate" infobar after two denials. There is an offset of one because on
|
| - // Android the last event is not counted.
|
| - const int kAlwaysTranslateMinCount = 1;
|
| - const int kNeverTranslateMinCount = 2;
|
| -#else
|
| - const int kAlwaysTranslateMinCount = 3;
|
| - const int kNeverTranslateMinCount = 3;
|
| -#endif
|
| -
|
| -} // namespace
|
| -
|
| -const size_t TranslateInfoBarDelegate::kNoIndex = TranslateUIDelegate::NO_INDEX;
|
| -
|
| -TranslateInfoBarDelegate::~TranslateInfoBarDelegate() {
|
| -}
|
| -
|
| -// static
|
| -void TranslateInfoBarDelegate::Create(
|
| - bool replace_existing_infobar,
|
| - const base::WeakPtr<TranslateManager>& translate_manager,
|
| - infobars::InfoBarManager* infobar_manager,
|
| - bool is_off_the_record,
|
| - translate::TranslateStep step,
|
| - const std::string& original_language,
|
| - const std::string& target_language,
|
| - TranslateErrors::Type error_type,
|
| - bool triggered_from_menu) {
|
| - DCHECK(translate_manager);
|
| - DCHECK(infobar_manager);
|
| -
|
| - // Check preconditions.
|
| - if (step != translate::TRANSLATE_STEP_TRANSLATE_ERROR) {
|
| - DCHECK(TranslateDownloadManager::IsSupportedLanguage(target_language));
|
| - if (!TranslateDownloadManager::IsSupportedLanguage(original_language)) {
|
| - // The original language can only be "unknown" for the "translating"
|
| - // infobar, which is the case when the user started a translation from the
|
| - // context menu.
|
| - DCHECK(step == translate::TRANSLATE_STEP_TRANSLATING ||
|
| - step == translate::TRANSLATE_STEP_AFTER_TRANSLATE);
|
| - DCHECK_EQ(translate::kUnknownLanguageCode, original_language);
|
| - }
|
| - }
|
| -
|
| - // Do not create the after translate infobar if we are auto translating.
|
| - if (((step == translate::TRANSLATE_STEP_AFTER_TRANSLATE) ||
|
| - (step == translate::TRANSLATE_STEP_TRANSLATING)) &&
|
| - translate_manager->translate_client()->GetTranslateDriver()
|
| - ->GetLanguageState().InTranslateNavigation()) {
|
| - return;
|
| - }
|
| -
|
| - // Find any existing translate infobar delegate.
|
| - infobars::InfoBar* old_infobar = NULL;
|
| - TranslateInfoBarDelegate* old_delegate = NULL;
|
| - for (size_t i = 0; i < infobar_manager->infobar_count(); ++i) {
|
| - old_infobar = infobar_manager->infobar_at(i);
|
| - old_delegate = old_infobar->delegate()->AsTranslateInfoBarDelegate();
|
| - if (old_delegate) {
|
| - if (!replace_existing_infobar)
|
| - return;
|
| - break;
|
| - }
|
| - }
|
| -
|
| - // Add the new delegate.
|
| - scoped_ptr<infobars::InfoBar> infobar(CreateInfoBar(
|
| - scoped_ptr<TranslateInfoBarDelegate>(new TranslateInfoBarDelegate(
|
| - translate_manager, is_off_the_record, step, old_delegate,
|
| - original_language, target_language, error_type,
|
| - triggered_from_menu))));
|
| - if (old_delegate)
|
| - infobar_manager->ReplaceInfoBar(old_infobar, infobar.Pass());
|
| - else
|
| - infobar_manager->AddInfoBar(infobar.Pass());
|
| -}
|
| -
|
| -
|
| -void TranslateInfoBarDelegate::UpdateOriginalLanguageIndex(
|
| - size_t language_index) {
|
| - ui_delegate_.UpdateOriginalLanguageIndex(language_index);
|
| -}
|
| -
|
| -void TranslateInfoBarDelegate::UpdateTargetLanguageIndex(
|
| - size_t language_index) {
|
| - ui_delegate_.UpdateTargetLanguageIndex(language_index);
|
| -}
|
| -
|
| -void TranslateInfoBarDelegate::Translate() {
|
| - ui_delegate_.Translate();
|
| -}
|
| -
|
| -void TranslateInfoBarDelegate::RevertTranslation() {
|
| - ui_delegate_.RevertTranslation();
|
| - infobar()->RemoveSelf();
|
| -}
|
| -
|
| -void TranslateInfoBarDelegate::ReportLanguageDetectionError() {
|
| - if (translate_manager_)
|
| - translate_manager_->ReportLanguageDetectionError();
|
| -}
|
| -
|
| -void TranslateInfoBarDelegate::TranslationDeclined() {
|
| - ui_delegate_.TranslationDeclined(false);
|
| -}
|
| -
|
| -bool TranslateInfoBarDelegate::IsTranslatableLanguageByPrefs() {
|
| - TranslateClient* client = GetTranslateClient();
|
| - scoped_ptr<TranslatePrefs> translate_prefs(client->GetTranslatePrefs());
|
| - TranslateAcceptLanguages* accept_languages =
|
| - client->GetTranslateAcceptLanguages();
|
| - return translate_prefs->CanTranslateLanguage(accept_languages,
|
| - original_language_code());
|
| -}
|
| -
|
| -void TranslateInfoBarDelegate::ToggleTranslatableLanguageByPrefs() {
|
| - if (ui_delegate_.IsLanguageBlocked()) {
|
| - ui_delegate_.SetLanguageBlocked(false);
|
| - } else {
|
| - ui_delegate_.SetLanguageBlocked(true);
|
| - infobar()->RemoveSelf();
|
| - }
|
| -}
|
| -
|
| -bool TranslateInfoBarDelegate::IsSiteBlacklisted() {
|
| - return ui_delegate_.IsSiteBlacklisted();
|
| -}
|
| -
|
| -void TranslateInfoBarDelegate::ToggleSiteBlacklist() {
|
| - if (ui_delegate_.IsSiteBlacklisted()) {
|
| - ui_delegate_.SetSiteBlacklist(false);
|
| - } else {
|
| - ui_delegate_.SetSiteBlacklist(true);
|
| - infobar()->RemoveSelf();
|
| - }
|
| -}
|
| -
|
| -bool TranslateInfoBarDelegate::ShouldAlwaysTranslate() {
|
| - return ui_delegate_.ShouldAlwaysTranslate();
|
| -}
|
| -
|
| -void TranslateInfoBarDelegate::ToggleAlwaysTranslate() {
|
| - ui_delegate_.SetAlwaysTranslate(!ui_delegate_.ShouldAlwaysTranslate());
|
| -}
|
| -
|
| -void TranslateInfoBarDelegate::AlwaysTranslatePageLanguage() {
|
| - DCHECK(!ui_delegate_.ShouldAlwaysTranslate());
|
| - ui_delegate_.SetAlwaysTranslate(true);
|
| - Translate();
|
| -}
|
| -
|
| -void TranslateInfoBarDelegate::NeverTranslatePageLanguage() {
|
| - DCHECK(!ui_delegate_.IsLanguageBlocked());
|
| - ui_delegate_.SetLanguageBlocked(true);
|
| - infobar()->RemoveSelf();
|
| -}
|
| -
|
| -base::string16 TranslateInfoBarDelegate::GetMessageInfoBarText() {
|
| - if (step_ == translate::TRANSLATE_STEP_TRANSLATING) {
|
| - base::string16 target_language_name =
|
| - language_name_at(target_language_index());
|
| - return l10n_util::GetStringFUTF16(IDS_TRANSLATE_INFOBAR_TRANSLATING_TO,
|
| - target_language_name);
|
| - }
|
| -
|
| - DCHECK_EQ(translate::TRANSLATE_STEP_TRANSLATE_ERROR, step_);
|
| - UMA_HISTOGRAM_ENUMERATION("Translate.ShowErrorInfobar",
|
| - error_type_,
|
| - TranslateErrors::TRANSLATE_ERROR_MAX);
|
| - ui_delegate_.OnErrorShown(error_type_);
|
| - switch (error_type_) {
|
| - case TranslateErrors::NETWORK:
|
| - return l10n_util::GetStringUTF16(
|
| - IDS_TRANSLATE_INFOBAR_ERROR_CANT_CONNECT);
|
| - case TranslateErrors::INITIALIZATION_ERROR:
|
| - case TranslateErrors::TRANSLATION_ERROR:
|
| - return l10n_util::GetStringUTF16(
|
| - IDS_TRANSLATE_INFOBAR_ERROR_CANT_TRANSLATE);
|
| - case TranslateErrors::UNKNOWN_LANGUAGE:
|
| - return l10n_util::GetStringUTF16(
|
| - IDS_TRANSLATE_INFOBAR_UNKNOWN_PAGE_LANGUAGE);
|
| - case TranslateErrors::UNSUPPORTED_LANGUAGE:
|
| - return l10n_util::GetStringFUTF16(
|
| - IDS_TRANSLATE_INFOBAR_UNSUPPORTED_PAGE_LANGUAGE,
|
| - 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()));
|
| - default:
|
| - NOTREACHED();
|
| - return base::string16();
|
| - }
|
| -}
|
| -
|
| -base::string16 TranslateInfoBarDelegate::GetMessageInfoBarButtonText() {
|
| - if (step_ != translate::TRANSLATE_STEP_TRANSLATE_ERROR) {
|
| - DCHECK_EQ(translate::TRANSLATE_STEP_TRANSLATING, step_);
|
| - } else if ((error_type_ != TranslateErrors::IDENTICAL_LANGUAGES) &&
|
| - (error_type_ != TranslateErrors::UNKNOWN_LANGUAGE)) {
|
| - return l10n_util::GetStringUTF16(
|
| - (error_type_ == TranslateErrors::UNSUPPORTED_LANGUAGE) ?
|
| - IDS_TRANSLATE_INFOBAR_REVERT : IDS_TRANSLATE_INFOBAR_RETRY);
|
| - }
|
| - return base::string16();
|
| -}
|
| -
|
| -void TranslateInfoBarDelegate::MessageInfoBarButtonPressed() {
|
| - DCHECK_EQ(translate::TRANSLATE_STEP_TRANSLATE_ERROR, step_);
|
| - if (error_type_ == TranslateErrors::UNSUPPORTED_LANGUAGE) {
|
| - RevertTranslation();
|
| - return;
|
| - }
|
| - // This is the "Try again..." case.
|
| - DCHECK(translate_manager_);
|
| - translate_manager_->TranslatePage(
|
| - original_language_code(), target_language_code(), false);
|
| -}
|
| -
|
| -bool TranslateInfoBarDelegate::ShouldShowMessageInfoBarButton() {
|
| - return !GetMessageInfoBarButtonText().empty();
|
| -}
|
| -
|
| -bool TranslateInfoBarDelegate::ShouldShowNeverTranslateShortcut() {
|
| - DCHECK_EQ(translate::TRANSLATE_STEP_BEFORE_TRANSLATE, step_);
|
| - return !is_off_the_record_ &&
|
| - (prefs_->GetTranslationDeniedCount(original_language_code()) >=
|
| - kNeverTranslateMinCount);
|
| -}
|
| -
|
| -bool TranslateInfoBarDelegate::ShouldShowAlwaysTranslateShortcut() {
|
| - DCHECK_EQ(translate::TRANSLATE_STEP_BEFORE_TRANSLATE, step_);
|
| - return !is_off_the_record_ &&
|
| - (prefs_->GetTranslationAcceptedCount(original_language_code()) >=
|
| - kAlwaysTranslateMinCount);
|
| -}
|
| -
|
| -// static
|
| -void TranslateInfoBarDelegate::GetAfterTranslateStrings(
|
| - std::vector<base::string16>* strings,
|
| - bool* swap_languages,
|
| - bool autodetermined_source_language) {
|
| - DCHECK(strings);
|
| -
|
| - if (autodetermined_source_language) {
|
| - size_t offset;
|
| - base::string16 text = l10n_util::GetStringFUTF16(
|
| - IDS_TRANSLATE_INFOBAR_AFTER_MESSAGE_AUTODETERMINED_SOURCE_LANGUAGE,
|
| - base::string16(),
|
| - &offset);
|
| -
|
| - strings->push_back(text.substr(0, offset));
|
| - strings->push_back(text.substr(offset));
|
| - return;
|
| - }
|
| - DCHECK(swap_languages);
|
| -
|
| - std::vector<size_t> offsets;
|
| - base::string16 text = l10n_util::GetStringFUTF16(
|
| - IDS_TRANSLATE_INFOBAR_AFTER_MESSAGE, base::string16(), base::string16(),
|
| - &offsets);
|
| - DCHECK_EQ(2U, offsets.size());
|
| -
|
| - *swap_languages = (offsets[0] > offsets[1]);
|
| - if (*swap_languages)
|
| - std::swap(offsets[0], offsets[1]);
|
| -
|
| - strings->push_back(text.substr(0, offsets[0]));
|
| - strings->push_back(text.substr(offsets[0], offsets[1] - offsets[0]));
|
| - strings->push_back(text.substr(offsets[1]));
|
| -}
|
| -
|
| -TranslateDriver* TranslateInfoBarDelegate::GetTranslateDriver() {
|
| - if (!translate_manager_)
|
| - return NULL;
|
| -
|
| - return translate_manager_->translate_client()->GetTranslateDriver();
|
| -}
|
| -
|
| -TranslateInfoBarDelegate::TranslateInfoBarDelegate(
|
| - const base::WeakPtr<TranslateManager>& translate_manager,
|
| - bool is_off_the_record,
|
| - translate::TranslateStep step,
|
| - TranslateInfoBarDelegate* old_delegate,
|
| - const std::string& original_language,
|
| - const std::string& target_language,
|
| - TranslateErrors::Type error_type,
|
| - bool triggered_from_menu)
|
| - : infobars::InfoBarDelegate(),
|
| - is_off_the_record_(is_off_the_record),
|
| - step_(step),
|
| - background_animation_(NONE),
|
| - ui_delegate_(translate_manager->translate_client(),
|
| - translate_manager.get(),
|
| - original_language,
|
| - target_language),
|
| - translate_manager_(translate_manager),
|
| - error_type_(error_type),
|
| - prefs_(translate_manager->translate_client()->GetTranslatePrefs()),
|
| - triggered_from_menu_(triggered_from_menu) {
|
| - DCHECK_NE((step_ == translate::TRANSLATE_STEP_TRANSLATE_ERROR),
|
| - (error_type_ == TranslateErrors::NONE));
|
| - DCHECK(translate_manager_);
|
| -
|
| - if (old_delegate && (old_delegate->is_error() != is_error()))
|
| - background_animation_ = is_error() ? NORMAL_TO_ERROR : ERROR_TO_NORMAL;
|
| -}
|
| -
|
| -TranslateClient* TranslateInfoBarDelegate::GetTranslateClient() {
|
| - if (!translate_manager_)
|
| - return NULL;
|
| -
|
| - return translate_manager_->translate_client();
|
| -}
|
| -
|
| -// TranslateInfoBarDelegate::CreateInfoBar() is implemented in platform-specific
|
| -// files.
|
| -
|
| -void TranslateInfoBarDelegate::InfoBarDismissed() {
|
| - if (step_ != translate::TRANSLATE_STEP_BEFORE_TRANSLATE)
|
| - return;
|
| -
|
| - // The user closed the infobar without clicking the translate button.
|
| - TranslationDeclined();
|
| - UMA_HISTOGRAM_BOOLEAN("Translate.DeclineTranslateCloseInfobar", true);
|
| -}
|
| -
|
| -int TranslateInfoBarDelegate::GetIconID() const {
|
| - return IDR_INFOBAR_TRANSLATE;
|
| -}
|
| -
|
| -infobars::InfoBarDelegate::Type TranslateInfoBarDelegate::GetInfoBarType()
|
| - const {
|
| - return PAGE_ACTION_TYPE;
|
| -}
|
| -
|
| -bool TranslateInfoBarDelegate::ShouldExpire(
|
| - const NavigationDetails& details) const {
|
| - // Note: we allow closing this infobar even if the main frame navigation
|
| - // was programmatic and not initiated by the user - crbug.com/70261 .
|
| - if (!details.is_navigation_to_different_page && !details.is_main_frame)
|
| - return false;
|
| -
|
| - return infobars::InfoBarDelegate::ShouldExpireInternal(details);
|
| -}
|
| -
|
| -TranslateInfoBarDelegate*
|
| - TranslateInfoBarDelegate::AsTranslateInfoBarDelegate() {
|
| - return this;
|
| -}
|
|
|