| Index: chrome/browser/translate/translate_infobar_delegate.cc
|
| ===================================================================
|
| --- chrome/browser/translate/translate_infobar_delegate.cc (revision 71863)
|
| +++ chrome/browser/translate/translate_infobar_delegate.cc (working copy)
|
| @@ -1,4 +1,4 @@
|
| -// Copyright (c) 2010 The Chromium Authors. All rights reserved.
|
| +// Copyright (c) 2011 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.
|
|
|
| @@ -24,7 +24,7 @@
|
| TabContents* tab_contents,
|
| const std::string& original_language,
|
| const std::string& target_language) {
|
| - DCHECK(type != TRANSLATION_ERROR);
|
| + DCHECK_NE(TRANSLATION_ERROR, type);
|
| // 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.
|
| @@ -32,14 +32,12 @@
|
| original_language != chrome::kUnknownLanguageCode);
|
| if ((original_language != chrome::kUnknownLanguageCode &&
|
| !TranslateManager::IsSupportedLanguage(original_language)) ||
|
| - !TranslateManager::IsSupportedLanguage(target_language)) {
|
| + !TranslateManager::IsSupportedLanguage(target_language))
|
| return NULL;
|
| - }
|
| TranslateInfoBarDelegate* delegate =
|
| - new TranslateInfoBarDelegate(type, TranslateErrors::NONE,
|
| - tab_contents,
|
| + new TranslateInfoBarDelegate(type, TranslateErrors::NONE, tab_contents,
|
| original_language, target_language);
|
| - DCHECK(delegate->target_language_index() != -1);
|
| + DCHECK_NE(-1, delegate->target_language_index());
|
| return delegate;
|
| }
|
|
|
| @@ -52,76 +50,24 @@
|
| original_language, target_language);
|
| }
|
|
|
| -TranslateInfoBarDelegate::TranslateInfoBarDelegate(
|
| - Type type,
|
| - TranslateErrors::Type error,
|
| - TabContents* tab_contents,
|
| - const std::string& original_language,
|
| - const std::string& target_language)
|
| - : InfoBarDelegate(tab_contents),
|
| - type_(type),
|
| - background_animation_(NONE),
|
| - tab_contents_(tab_contents),
|
| - original_language_index_(-1),
|
| - initial_original_language_index_(-1),
|
| - target_language_index_(-1),
|
| - error_(error),
|
| - infobar_view_(NULL),
|
| - prefs_(tab_contents_->profile()->GetPrefs()) {
|
| - DCHECK((type_ != TRANSLATION_ERROR && error == TranslateErrors::NONE) ||
|
| - (type_ == TRANSLATION_ERROR && error != TranslateErrors::NONE));
|
| -
|
| - std::vector<std::string> language_codes;
|
| - TranslateManager::GetSupportedLanguages(&language_codes);
|
| -
|
| - 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 (language_name.compare(iter2->second) < 0)
|
| - 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();
|
| - }
|
| +TranslateInfoBarDelegate::~TranslateInfoBarDelegate() {
|
| }
|
|
|
| -TranslateInfoBarDelegate::~TranslateInfoBarDelegate() {}
|
| -
|
| -int TranslateInfoBarDelegate::GetLanguageCount() const {
|
| - return static_cast<int>(languages_.size());
|
| -}
|
| -
|
| -std::string TranslateInfoBarDelegate::GetLanguageCodeAt(
|
| - int index) const {
|
| - DCHECK(index >=0 && index < GetLanguageCount());
|
| +std::string TranslateInfoBarDelegate::GetLanguageCodeAt(int index) const {
|
| + DCHECK(index >= 0 && index < GetLanguageCount());
|
| return languages_[index].first;
|
| }
|
|
|
| string16 TranslateInfoBarDelegate::GetLanguageDisplayableNameAt(
|
| int index) const {
|
| - DCHECK(index >=0 && index < GetLanguageCount());
|
| + DCHECK(index >= 0 && index < GetLanguageCount());
|
| return languages_[index].second;
|
| }
|
|
|
| std::string TranslateInfoBarDelegate::GetOriginalLanguageCode() const {
|
| - if (original_language_index() == -1)
|
| - return chrome::kUnknownLanguageCode;
|
| - return GetLanguageCodeAt(original_language_index());
|
| + return (original_language_index() == -1) ?
|
| + chrome::kUnknownLanguageCode :
|
| + GetLanguageCodeAt(original_language_index());
|
| }
|
|
|
| std::string TranslateInfoBarDelegate::GetTargetLanguageCode() const {
|
| @@ -129,7 +75,7 @@
|
| }
|
|
|
| void TranslateInfoBarDelegate::SetOriginalLanguage(int language_index) {
|
| - DCHECK(language_index < static_cast<int>(languages_.size()));
|
| + DCHECK_LT(language_index, GetLanguageCount());
|
| original_language_index_ = language_index;
|
| if (infobar_view_)
|
| infobar_view_->OriginalLanguageChanged();
|
| @@ -138,7 +84,7 @@
|
| }
|
|
|
| void TranslateInfoBarDelegate::SetTargetLanguage(int language_index) {
|
| - DCHECK(language_index < static_cast<int>(languages_.size()));
|
| + DCHECK_LT(language_index, GetLanguageCount());
|
| target_language_index_ = language_index;
|
| if (infobar_view_)
|
| infobar_view_->TargetLanguageChanged();
|
| @@ -146,10 +92,6 @@
|
| Translate();
|
| }
|
|
|
| -bool TranslateInfoBarDelegate::IsError() {
|
| - return type_ == TRANSLATION_ERROR;
|
| -}
|
| -
|
| void TranslateInfoBarDelegate::Translate() {
|
| const std::string& original_language_code = GetOriginalLanguageCode();
|
| if (!tab_contents()->profile()->IsOffTheRecord()) {
|
| @@ -157,8 +99,7 @@
|
| prefs_.IncrementTranslationAcceptedCount(original_language_code);
|
| }
|
|
|
| - TranslateManager::GetInstance()->TranslatePage(
|
| - tab_contents_,
|
| + TranslateManager::GetInstance()->TranslatePage(tab_contents_,
|
| GetLanguageCodeAt(original_language_index()),
|
| GetLanguageCodeAt(target_language_index()));
|
| }
|
| @@ -169,8 +110,7 @@
|
| }
|
|
|
| void TranslateInfoBarDelegate::ReportLanguageDetectionError() {
|
| - TranslateManager::GetInstance()->
|
| - ReportLanguageDetectionError(tab_contents_);
|
| + TranslateManager::GetInstance()->ReportLanguageDetectionError(tab_contents_);
|
| }
|
|
|
| void TranslateInfoBarDelegate::TranslationDeclined() {
|
| @@ -188,34 +128,6 @@
|
| tab_contents_->language_state().set_translation_declined(true);
|
| }
|
|
|
| -void TranslateInfoBarDelegate::InfoBarDismissed() {
|
| - if (type_ != BEFORE_TRANSLATE)
|
| - return;
|
| -
|
| - // The user closed the infobar without clicking the translate button.
|
| - TranslationDeclined();
|
| - UMA_HISTOGRAM_COUNTS("Translate.DeclineTranslateCloseInfobar", 1);
|
| -}
|
| -
|
| -void TranslateInfoBarDelegate::InfoBarClosed() {
|
| - delete this;
|
| -}
|
| -
|
| -SkBitmap* TranslateInfoBarDelegate::GetIcon() const {
|
| - return ResourceBundle::GetSharedInstance().GetBitmapNamed(
|
| - IDR_INFOBAR_TRANSLATE);
|
| -}
|
| -
|
| -InfoBarDelegate::Type TranslateInfoBarDelegate::GetInfoBarType() {
|
| - return InfoBarDelegate::PAGE_ACTION_TYPE;
|
| -}
|
| -
|
| -TranslateInfoBarDelegate*
|
| -TranslateInfoBarDelegate::AsTranslateInfoBarDelegate() {
|
| - return this;
|
| -}
|
| -
|
| -
|
| bool TranslateInfoBarDelegate::IsLanguageBlacklisted() {
|
| return prefs_.IsLanguageBlacklisted(GetOriginalLanguageCode());
|
| }
|
| @@ -278,35 +190,31 @@
|
| }
|
|
|
| string16 TranslateInfoBarDelegate::GetMessageInfoBarText() {
|
| - switch (type_) {
|
| - case TRANSLATING:
|
| + if (type_ == TRANSLATING) {
|
| + return l10n_util::GetStringFUTF16(IDS_TRANSLATE_INFOBAR_TRANSLATING_TO,
|
| + GetLanguageDisplayableNameAt(target_language_index_));
|
| + }
|
| +
|
| + DCHECK_EQ(TRANSLATION_ERROR, type_);
|
| + switch (error_) {
|
| + 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_TRANSLATING_TO,
|
| + IDS_TRANSLATE_INFOBAR_UNSUPPORTED_PAGE_LANGUAGE,
|
| GetLanguageDisplayableNameAt(target_language_index_));
|
| - case TRANSLATION_ERROR:
|
| - switch (error_) {
|
| - 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,
|
| - GetLanguageDisplayableNameAt(target_language_index_));
|
| - case TranslateErrors::IDENTICAL_LANGUAGES:
|
| - return l10n_util::GetStringFUTF16(
|
| - IDS_TRANSLATE_INFOBAR_ERROR_SAME_LANGUAGE,
|
| - GetLanguageDisplayableNameAt(target_language_index_));
|
| - default:
|
| - NOTREACHED();
|
| - return string16();
|
| - }
|
| + case TranslateErrors::IDENTICAL_LANGUAGES:
|
| + return l10n_util::GetStringFUTF16(
|
| + IDS_TRANSLATE_INFOBAR_ERROR_SAME_LANGUAGE,
|
| + GetLanguageDisplayableNameAt(target_language_index_));
|
| default:
|
| NOTREACHED();
|
| return string16();
|
| @@ -314,33 +222,26 @@
|
| }
|
|
|
| string16 TranslateInfoBarDelegate::GetMessageInfoBarButtonText() {
|
| - switch (type_) {
|
| - case TRANSLATING:
|
| - return string16();
|
| - case TRANSLATION_ERROR:
|
| - if (error_ == TranslateErrors::IDENTICAL_LANGUAGES ||
|
| - error_ == TranslateErrors::UNKNOWN_LANGUAGE) {
|
| - // No retry button, we would fail again with the same error.
|
| - return string16();
|
| - }
|
| - if (error_ == TranslateErrors::UNSUPPORTED_LANGUAGE)
|
| - return l10n_util::GetStringUTF16(IDS_TRANSLATE_INFOBAR_REVERT);
|
| - return l10n_util::GetStringUTF16(IDS_TRANSLATE_INFOBAR_RETRY);
|
| - default:
|
| - NOTREACHED();
|
| - return string16();
|
| + if (type_ != TRANSLATION_ERROR) {
|
| + DCHECK_EQ(TRANSLATING, type_);
|
| + } else if ((error_ != TranslateErrors::IDENTICAL_LANGUAGES) &&
|
| + (error_ != TranslateErrors::UNKNOWN_LANGUAGE)) {
|
| + return l10n_util::GetStringUTF16(
|
| + (error_ == TranslateErrors::UNSUPPORTED_LANGUAGE) ?
|
| + IDS_TRANSLATE_INFOBAR_REVERT : IDS_TRANSLATE_INFOBAR_RETRY);
|
| }
|
| + return string16();
|
| }
|
|
|
| void TranslateInfoBarDelegate::MessageInfoBarButtonPressed() {
|
| - DCHECK(type_ == TRANSLATION_ERROR);
|
| + DCHECK_EQ(TRANSLATION_ERROR, type_);
|
| if (error_ == TranslateErrors::UNSUPPORTED_LANGUAGE) {
|
| RevertTranslation();
|
| return;
|
| }
|
| // This is the "Try again..." case.
|
| - TranslateManager::GetInstance()->TranslatePage(
|
| - tab_contents_, GetOriginalLanguageCode(), GetTargetLanguageCode());
|
| + TranslateManager::GetInstance()->TranslatePage(tab_contents_,
|
| + GetOriginalLanguageCode(), GetTargetLanguageCode());
|
| }
|
|
|
| bool TranslateInfoBarDelegate::ShouldShowMessageInfoBarButton() {
|
| @@ -348,33 +249,25 @@
|
| }
|
|
|
| bool TranslateInfoBarDelegate::ShouldShowNeverTranslateButton() {
|
| - DCHECK(type_ == BEFORE_TRANSLATE);
|
| - if (tab_contents()->profile()->IsOffTheRecord())
|
| - return false;
|
| - return prefs_.GetTranslationDeniedCount(GetOriginalLanguageCode()) >= 3;
|
| + DCHECK_EQ(BEFORE_TRANSLATE, type_);
|
| + return !tab_contents()->profile()->IsOffTheRecord() &&
|
| + (prefs_.GetTranslationDeniedCount(GetOriginalLanguageCode()) >= 3);
|
| }
|
|
|
| bool TranslateInfoBarDelegate::ShouldShowAlwaysTranslateButton() {
|
| - DCHECK(type_ == BEFORE_TRANSLATE);
|
| - if (tab_contents()->profile()->IsOffTheRecord())
|
| - return false;
|
| - return prefs_.GetTranslationAcceptedCount(GetOriginalLanguageCode()) >= 3;
|
| + DCHECK_EQ(BEFORE_TRANSLATE, type_);
|
| + return !tab_contents()->profile()->IsOffTheRecord() &&
|
| + (prefs_.GetTranslationAcceptedCount(GetOriginalLanguageCode()) >= 3);
|
| }
|
|
|
| void TranslateInfoBarDelegate::UpdateBackgroundAnimation(
|
| TranslateInfoBarDelegate* previous_infobar) {
|
| - if (!previous_infobar || previous_infobar->IsError() == IsError()) {
|
| + if (!previous_infobar || previous_infobar->IsError() == IsError())
|
| background_animation_ = NONE;
|
| - return;
|
| - }
|
| - background_animation_ = IsError() ? NORMAL_TO_ERROR: ERROR_TO_NORMAL;
|
| + else
|
| + background_animation_ = IsError() ? NORMAL_TO_ERROR : ERROR_TO_NORMAL;
|
| }
|
|
|
| -std::string TranslateInfoBarDelegate::GetPageHost() {
|
| - NavigationEntry* entry = tab_contents_->controller().GetActiveEntry();
|
| - return entry ? entry->url().HostNoBrackets() : std::string();
|
| -}
|
| -
|
| // static
|
| string16 TranslateInfoBarDelegate::GetLanguageDisplayableName(
|
| const std::string& language_code) {
|
| @@ -392,17 +285,92 @@
|
| string16 text =
|
| l10n_util::GetStringFUTF16(IDS_TRANSLATE_INFOBAR_AFTER_MESSAGE,
|
| string16(), string16(), &offsets);
|
| - DCHECK(offsets.size() == 2U);
|
| + DCHECK_EQ(2U, offsets.size());
|
|
|
| - if (offsets[0] > offsets[1]) {
|
| - // Target language comes before source.
|
| + *swap_languages = (offsets[0] > offsets[1]);
|
| + if (*swap_languages)
|
| std::swap(offsets[0], offsets[1]);
|
| - *swap_languages = true;
|
| - } else {
|
| - *swap_languages = false;
|
| - }
|
|
|
| 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]));
|
| }
|
| +
|
| +TranslateInfoBarDelegate::TranslateInfoBarDelegate(
|
| + Type type,
|
| + TranslateErrors::Type error,
|
| + TabContents* tab_contents,
|
| + const std::string& original_language,
|
| + const std::string& target_language)
|
| + : InfoBarDelegate(tab_contents),
|
| + type_(type),
|
| + background_animation_(NONE),
|
| + tab_contents_(tab_contents),
|
| + original_language_index_(-1),
|
| + initial_original_language_index_(-1),
|
| + target_language_index_(-1),
|
| + error_(error),
|
| + infobar_view_(NULL),
|
| + prefs_(tab_contents_->profile()->GetPrefs()) {
|
| + DCHECK_NE((type_ == TRANSLATION_ERROR), (error == TranslateErrors::NONE));
|
| +
|
| + std::vector<std::string> language_codes;
|
| + TranslateManager::GetSupportedLanguages(&language_codes);
|
| +
|
| + 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 (language_name.compare(iter2->second) < 0)
|
| + 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();
|
| + }
|
| +}
|
| +
|
| +void TranslateInfoBarDelegate::InfoBarDismissed() {
|
| + if (type_ != BEFORE_TRANSLATE)
|
| + return;
|
| +
|
| + // The user closed the infobar without clicking the translate button.
|
| + TranslationDeclined();
|
| + UMA_HISTOGRAM_COUNTS("Translate.DeclineTranslateCloseInfobar", 1);
|
| +}
|
| +
|
| +void TranslateInfoBarDelegate::InfoBarClosed() {
|
| + delete this;
|
| +}
|
| +
|
| +SkBitmap* TranslateInfoBarDelegate::GetIcon() const {
|
| + return ResourceBundle::GetSharedInstance().GetBitmapNamed(
|
| + IDR_INFOBAR_TRANSLATE);
|
| +}
|
| +
|
| +InfoBarDelegate::Type TranslateInfoBarDelegate::GetInfoBarType() const {
|
| + return InfoBarDelegate::PAGE_ACTION_TYPE;
|
| +}
|
| +
|
| +TranslateInfoBarDelegate*
|
| + TranslateInfoBarDelegate::AsTranslateInfoBarDelegate() {
|
| + return this;
|
| +}
|
| +
|
| +std::string TranslateInfoBarDelegate::GetPageHost() {
|
| + NavigationEntry* entry = tab_contents_->controller().GetActiveEntry();
|
| + return entry ? entry->url().HostNoBrackets() : std::string();
|
| +}
|
|
|