1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "chrome/browser/ui/translate/translate_bubble_model_impl.h" 6 7 #include <utility> 8 9 #include "chrome/browser/translate/chrome_translate_client.h" 10 #include "components/translate/core/browser/language_state.h" 11 #include "components/translate/core/browser/translate_ui_delegate.h" 12 TranslateBubbleModelImpl(translate::TranslateStep step,std::unique_ptr<translate::TranslateUIDelegate> ui_delegate)13TranslateBubbleModelImpl::TranslateBubbleModelImpl( 14 translate::TranslateStep step, 15 std::unique_ptr<translate::TranslateUIDelegate> ui_delegate) 16 : ui_delegate_(std::move(ui_delegate)), 17 view_state_transition_(TranslateStepToViewState(step)), 18 translation_declined_(false), 19 translate_executed_(false) { 20 if (GetViewState() != TranslateBubbleModel::VIEW_STATE_BEFORE_TRANSLATE) 21 translate_executed_ = true; 22 } 23 ~TranslateBubbleModelImpl()24TranslateBubbleModelImpl::~TranslateBubbleModelImpl() {} 25 26 // static 27 TranslateBubbleModel::ViewState TranslateStepToViewState(translate::TranslateStep step)28TranslateBubbleModelImpl::TranslateStepToViewState( 29 translate::TranslateStep step) { 30 switch (step) { 31 case translate::TRANSLATE_STEP_BEFORE_TRANSLATE: 32 return TranslateBubbleModel::VIEW_STATE_BEFORE_TRANSLATE; 33 case translate::TRANSLATE_STEP_TRANSLATING: 34 return TranslateBubbleModel::VIEW_STATE_TRANSLATING; 35 case translate::TRANSLATE_STEP_AFTER_TRANSLATE: 36 return TranslateBubbleModel::VIEW_STATE_AFTER_TRANSLATE; 37 case translate::TRANSLATE_STEP_TRANSLATE_ERROR: 38 return TranslateBubbleModel::VIEW_STATE_ERROR; 39 } 40 41 NOTREACHED(); 42 return TranslateBubbleModel::VIEW_STATE_ERROR; 43 } 44 GetViewState() const45TranslateBubbleModel::ViewState TranslateBubbleModelImpl::GetViewState() const { 46 return view_state_transition_.view_state(); 47 } 48 ShouldAlwaysTranslateBeCheckedByDefault() const49bool TranslateBubbleModelImpl::ShouldAlwaysTranslateBeCheckedByDefault() const { 50 return ui_delegate_->ShouldAlwaysTranslateBeCheckedByDefault(); 51 } 52 ShouldShowAlwaysTranslateShortcut() const53bool TranslateBubbleModelImpl::ShouldShowAlwaysTranslateShortcut() const { 54 return ui_delegate_->ShouldShowAlwaysTranslateShortcut(); 55 } 56 SetViewState(TranslateBubbleModel::ViewState view_state)57void TranslateBubbleModelImpl::SetViewState( 58 TranslateBubbleModel::ViewState view_state) { 59 view_state_transition_.SetViewState(view_state); 60 } 61 ShowError(translate::TranslateErrors::Type error_type)62void TranslateBubbleModelImpl::ShowError( 63 translate::TranslateErrors::Type error_type) { 64 ui_delegate_->OnErrorShown(error_type); 65 } 66 GoBackFromAdvanced()67void TranslateBubbleModelImpl::GoBackFromAdvanced() { 68 view_state_transition_.GoBackFromAdvanced(); 69 } 70 GetNumberOfLanguages() const71int TranslateBubbleModelImpl::GetNumberOfLanguages() const { 72 return ui_delegate_->GetNumberOfLanguages(); 73 } 74 GetLanguageNameAt(int index) const75base::string16 TranslateBubbleModelImpl::GetLanguageNameAt(int index) const { 76 return ui_delegate_->GetLanguageNameAt(index); 77 } 78 GetOriginalLanguageIndex() const79int TranslateBubbleModelImpl::GetOriginalLanguageIndex() const { 80 return ui_delegate_->GetOriginalLanguageIndex(); 81 } 82 UpdateOriginalLanguageIndex(int index)83void TranslateBubbleModelImpl::UpdateOriginalLanguageIndex(int index) { 84 ui_delegate_->UpdateOriginalLanguageIndex(index); 85 } 86 GetTargetLanguageIndex() const87int TranslateBubbleModelImpl::GetTargetLanguageIndex() const { 88 return ui_delegate_->GetTargetLanguageIndex(); 89 } 90 UpdateTargetLanguageIndex(int index)91void TranslateBubbleModelImpl::UpdateTargetLanguageIndex(int index) { 92 ui_delegate_->UpdateTargetLanguageIndex(index); 93 } 94 DeclineTranslation()95void TranslateBubbleModelImpl::DeclineTranslation() { 96 translation_declined_ = true; 97 } 98 ShouldNeverTranslateLanguage()99bool TranslateBubbleModelImpl::ShouldNeverTranslateLanguage() { 100 return ui_delegate_->IsLanguageBlocked(); 101 } 102 SetNeverTranslateLanguage(bool value)103void TranslateBubbleModelImpl::SetNeverTranslateLanguage(bool value) { 104 ui_delegate_->SetLanguageBlocked(value); 105 } 106 ShouldNeverTranslateSite()107bool TranslateBubbleModelImpl::ShouldNeverTranslateSite() { 108 return ui_delegate_->IsSiteBlacklisted(); 109 } 110 SetNeverTranslateSite(bool value)111void TranslateBubbleModelImpl::SetNeverTranslateSite(bool value) { 112 ui_delegate_->SetSiteBlacklist(value); 113 } 114 CanBlocklistSite()115bool TranslateBubbleModelImpl::CanBlocklistSite() { 116 return ui_delegate_->CanBlacklistSite(); 117 } 118 ShouldAlwaysTranslate() const119bool TranslateBubbleModelImpl::ShouldAlwaysTranslate() const { 120 return ui_delegate_->ShouldAlwaysTranslate(); 121 } 122 SetAlwaysTranslate(bool value)123void TranslateBubbleModelImpl::SetAlwaysTranslate(bool value) { 124 ui_delegate_->SetAlwaysTranslate(value); 125 } 126 Translate()127void TranslateBubbleModelImpl::Translate() { 128 translate_executed_ = true; 129 ui_delegate_->Translate(); 130 } 131 RevertTranslation()132void TranslateBubbleModelImpl::RevertTranslation() { 133 ui_delegate_->RevertTranslation(); 134 } 135 OnBubbleClosing()136void TranslateBubbleModelImpl::OnBubbleClosing() { 137 // TODO(curranmax): This will mark the UI as closed when the widget has lost 138 // focus. This means it is basically impossible for the final state to have 139 // the UI shown. https://crbug.com/1114868. 140 ui_delegate_->OnUIClosedByUser(); 141 142 if (!translate_executed_) 143 ui_delegate_->TranslationDeclined(translation_declined_); 144 } 145 IsPageTranslatedInCurrentLanguages() const146bool TranslateBubbleModelImpl::IsPageTranslatedInCurrentLanguages() const { 147 const translate::LanguageState& language_state = 148 ui_delegate_->GetLanguageState(); 149 return ui_delegate_->GetOriginalLanguageCode() == 150 language_state.original_language() && 151 ui_delegate_->GetTargetLanguageCode() == 152 language_state.current_language(); 153 } 154