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)13 TranslateBubbleModelImpl::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()24 TranslateBubbleModelImpl::~TranslateBubbleModelImpl() {}
25 
26 // static
27 TranslateBubbleModel::ViewState
TranslateStepToViewState(translate::TranslateStep step)28 TranslateBubbleModelImpl::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() const45 TranslateBubbleModel::ViewState TranslateBubbleModelImpl::GetViewState() const {
46   return view_state_transition_.view_state();
47 }
48 
ShouldAlwaysTranslateBeCheckedByDefault() const49 bool TranslateBubbleModelImpl::ShouldAlwaysTranslateBeCheckedByDefault() const {
50   return ui_delegate_->ShouldAlwaysTranslateBeCheckedByDefault();
51 }
52 
ShouldShowAlwaysTranslateShortcut() const53 bool TranslateBubbleModelImpl::ShouldShowAlwaysTranslateShortcut() const {
54   return ui_delegate_->ShouldShowAlwaysTranslateShortcut();
55 }
56 
SetViewState(TranslateBubbleModel::ViewState view_state)57 void TranslateBubbleModelImpl::SetViewState(
58     TranslateBubbleModel::ViewState view_state) {
59   view_state_transition_.SetViewState(view_state);
60 }
61 
ShowError(translate::TranslateErrors::Type error_type)62 void TranslateBubbleModelImpl::ShowError(
63     translate::TranslateErrors::Type error_type) {
64   ui_delegate_->OnErrorShown(error_type);
65 }
66 
GoBackFromAdvanced()67 void TranslateBubbleModelImpl::GoBackFromAdvanced() {
68   view_state_transition_.GoBackFromAdvanced();
69 }
70 
GetNumberOfLanguages() const71 int TranslateBubbleModelImpl::GetNumberOfLanguages() const {
72   return ui_delegate_->GetNumberOfLanguages();
73 }
74 
GetLanguageNameAt(int index) const75 base::string16 TranslateBubbleModelImpl::GetLanguageNameAt(int index) const {
76   return ui_delegate_->GetLanguageNameAt(index);
77 }
78 
GetOriginalLanguageIndex() const79 int TranslateBubbleModelImpl::GetOriginalLanguageIndex() const {
80   return ui_delegate_->GetOriginalLanguageIndex();
81 }
82 
UpdateOriginalLanguageIndex(int index)83 void TranslateBubbleModelImpl::UpdateOriginalLanguageIndex(int index) {
84   ui_delegate_->UpdateOriginalLanguageIndex(index);
85 }
86 
GetTargetLanguageIndex() const87 int TranslateBubbleModelImpl::GetTargetLanguageIndex() const {
88   return ui_delegate_->GetTargetLanguageIndex();
89 }
90 
UpdateTargetLanguageIndex(int index)91 void TranslateBubbleModelImpl::UpdateTargetLanguageIndex(int index) {
92   ui_delegate_->UpdateTargetLanguageIndex(index);
93 }
94 
DeclineTranslation()95 void TranslateBubbleModelImpl::DeclineTranslation() {
96   translation_declined_ = true;
97 }
98 
ShouldNeverTranslateLanguage()99 bool TranslateBubbleModelImpl::ShouldNeverTranslateLanguage() {
100   return ui_delegate_->IsLanguageBlocked();
101 }
102 
SetNeverTranslateLanguage(bool value)103 void TranslateBubbleModelImpl::SetNeverTranslateLanguage(bool value) {
104   ui_delegate_->SetLanguageBlocked(value);
105 }
106 
ShouldNeverTranslateSite()107 bool TranslateBubbleModelImpl::ShouldNeverTranslateSite() {
108   return ui_delegate_->IsSiteBlacklisted();
109 }
110 
SetNeverTranslateSite(bool value)111 void TranslateBubbleModelImpl::SetNeverTranslateSite(bool value) {
112   ui_delegate_->SetSiteBlacklist(value);
113 }
114 
CanBlocklistSite()115 bool TranslateBubbleModelImpl::CanBlocklistSite() {
116   return ui_delegate_->CanBlacklistSite();
117 }
118 
ShouldAlwaysTranslate() const119 bool TranslateBubbleModelImpl::ShouldAlwaysTranslate() const {
120   return ui_delegate_->ShouldAlwaysTranslate();
121 }
122 
SetAlwaysTranslate(bool value)123 void TranslateBubbleModelImpl::SetAlwaysTranslate(bool value) {
124   ui_delegate_->SetAlwaysTranslate(value);
125 }
126 
Translate()127 void TranslateBubbleModelImpl::Translate() {
128   translate_executed_ = true;
129   ui_delegate_->Translate();
130 }
131 
RevertTranslation()132 void TranslateBubbleModelImpl::RevertTranslation() {
133   ui_delegate_->RevertTranslation();
134 }
135 
OnBubbleClosing()136 void 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() const146 bool 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