Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(73)

Side by Side Diff: chrome/browser/translate/translate_infobar_delegate.h

Issue 284313008: Move TranslateInfoBarDelegate and OptionsMenuModel to the Translate component. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase + review comments Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright 2011 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 #ifndef CHROME_BROWSER_TRANSLATE_TRANSLATE_INFOBAR_DELEGATE_H_
6 #define CHROME_BROWSER_TRANSLATE_TRANSLATE_INFOBAR_DELEGATE_H_
7
8 #include <string>
9 #include <utility>
10 #include <vector>
11
12 #include "base/logging.h"
13 #include "base/memory/scoped_ptr.h"
14 #include "base/memory/weak_ptr.h"
15 #include "components/infobars/core/infobar_delegate.h"
16 #include "components/translate/core/browser/translate_prefs.h"
17 #include "components/translate/core/browser/translate_step.h"
18 #include "components/translate/core/browser/translate_ui_delegate.h"
19 #include "components/translate/core/common/translate_constants.h"
20 #include "components/translate/core/common/translate_errors.h"
21
22 class TranslateClient;
23 class TranslateDriver;
24 class TranslateManager;
25
26 namespace infobars {
27 class InfoBarManager;
28 }
29
30 class TranslateInfoBarDelegate : public infobars::InfoBarDelegate {
31 public:
32 // The types of background color animations.
33 enum BackgroundAnimationType {
34 NONE,
35 NORMAL_TO_ERROR,
36 ERROR_TO_NORMAL
37 };
38
39 static const size_t kNoIndex;
40
41 virtual ~TranslateInfoBarDelegate();
42
43 // Factory method to create a translate infobar. |error_type| must be
44 // specified iff |step| == TRANSLATION_ERROR. For other translate steps,
45 // |original_language| and |target_language| must be ASCII language codes
46 // (e.g. "en", "fr", etc.) for languages the TranslateManager supports
47 // translating. The lone exception is when the user initiates translation
48 // from the context menu, in which case it's legal to call this with
49 // |step| == TRANSLATING and |original_language| == kUnknownLanguageCode.
50 //
51 // If |replace_existing_infobar| is true, the infobar is created and added to
52 // the infobar manager, replacing any other translate infobar already present
53 // there. Otherwise, the infobar will only be added if there is no other
54 // translate infobar already present.
55 static void Create(bool replace_existing_infobar,
56 const base::WeakPtr<TranslateManager>& translate_manager,
57 infobars::InfoBarManager* infobar_manager,
58 bool is_off_the_record,
59 translate::TranslateStep step,
60 const std::string& original_language,
61 const std::string& target_language,
62 TranslateErrors::Type error_type,
63 bool triggered_from_menu);
64
65 // Returns the number of languages supported.
66 size_t num_languages() const { return ui_delegate_.GetNumberOfLanguages(); }
67
68 // Returns the ISO code for the language at |index|.
69 std::string language_code_at(size_t index) const {
70 return ui_delegate_.GetLanguageCodeAt(index);
71 }
72
73 // Returns the displayable name for the language at |index|.
74 base::string16 language_name_at(size_t index) const {
75 return ui_delegate_.GetLanguageNameAt(index);
76 }
77
78 translate::TranslateStep translate_step() const { return step_; }
79
80 bool is_off_the_record() { return is_off_the_record_; }
81
82 TranslateErrors::Type error_type() const { return error_type_; }
83
84 size_t original_language_index() const {
85 return ui_delegate_.GetOriginalLanguageIndex();
86 }
87 void UpdateOriginalLanguageIndex(size_t language_index);
88
89 size_t target_language_index() const {
90 return ui_delegate_.GetTargetLanguageIndex();
91 }
92 void UpdateTargetLanguageIndex(size_t language_index);
93
94 // Convenience methods.
95 std::string original_language_code() const {
96 return ui_delegate_.GetOriginalLanguageCode();
97 }
98 std::string target_language_code() const {
99 return ui_delegate_.GetTargetLanguageCode();
100 }
101
102 // Returns true if the current infobar indicates an error (in which case it
103 // should get a yellow background instead of a blue one).
104 bool is_error() const {
105 return step_ == translate::TRANSLATE_STEP_TRANSLATE_ERROR;
106 }
107
108 // Return true if the translation was triggered by a menu entry instead of
109 // via an infobar/bubble or preference.
110 bool triggered_from_menu() const {
111 return triggered_from_menu_;
112 }
113
114 // Returns what kind of background fading effect the infobar should use when
115 // its is shown.
116 BackgroundAnimationType background_animation_type() const {
117 return background_animation_;
118 }
119
120 virtual void Translate();
121 virtual void RevertTranslation();
122 void ReportLanguageDetectionError();
123
124 // Called when the user declines to translate a page, by either closing the
125 // infobar or pressing the "Don't translate" button.
126 virtual void TranslationDeclined();
127
128 // Methods called by the Options menu delegate.
129 virtual bool IsTranslatableLanguageByPrefs();
130 virtual void ToggleTranslatableLanguageByPrefs();
131 virtual bool IsSiteBlacklisted();
132 virtual void ToggleSiteBlacklist();
133 virtual bool ShouldAlwaysTranslate();
134 virtual void ToggleAlwaysTranslate();
135
136 // Methods called by the extra-buttons that can appear on the "before
137 // translate" infobar (when the user has accepted/declined the translation
138 // several times).
139 void AlwaysTranslatePageLanguage();
140 void NeverTranslatePageLanguage();
141
142 // The following methods are called by the infobar that displays the status
143 // while translating and also the one displaying the error message.
144 base::string16 GetMessageInfoBarText();
145 base::string16 GetMessageInfoBarButtonText();
146 void MessageInfoBarButtonPressed();
147 bool ShouldShowMessageInfoBarButton();
148
149 // Called by the before translate infobar to figure-out if it should show
150 // an extra shortcut to let the user black-list/white-list that language
151 // (based on how many times the user accepted/declined translation).
152 // The shortcut itself is platform specific, it can be a button or a new bar
153 // for example.
154 bool ShouldShowNeverTranslateShortcut();
155 bool ShouldShowAlwaysTranslateShortcut();
156
157 // Adds the strings that should be displayed in the after translate infobar to
158 // |strings|. If |autodetermined_source_language| is false, the text in that
159 // infobar is:
160 // "The page has been translated from <lang1> to <lang2>."
161 // Otherwise:
162 // "The page has been translated to <lang1>."
163 // Because <lang1>, or <lang1> and <lang2> are displayed in menu buttons, the
164 // text is split in 2 or 3 chunks. |swap_languages| is set to true if
165 // |autodetermined_source_language| is false, and <lang1> and <lang2>
166 // should be inverted (some languages express the sentense as "The page has
167 // been translate to <lang2> from <lang1>."). It is ignored if
168 // |autodetermined_source_language| is true.
169 static void GetAfterTranslateStrings(std::vector<base::string16>* strings,
170 bool* swap_languages,
171 bool autodetermined_source_language);
172
173 // Gets the TranslateDriver associated with this object.
174 // May return NULL if the driver has been destroyed.
175 TranslateDriver* GetTranslateDriver();
176
177 protected:
178 TranslateInfoBarDelegate(
179 const base::WeakPtr<TranslateManager>& translate_manager,
180 bool is_off_the_record,
181 translate::TranslateStep step,
182 TranslateInfoBarDelegate* old_delegate,
183 const std::string& original_language,
184 const std::string& target_language,
185 TranslateErrors::Type error_type,
186 bool triggered_from_menu);
187
188 private:
189 friend class TranslationInfoBarTest;
190 typedef std::pair<std::string, base::string16> LanguageNamePair;
191
192 // Returns a translate infobar that owns |delegate|.
193 static scoped_ptr<infobars::InfoBar> CreateInfoBar(
194 scoped_ptr<TranslateInfoBarDelegate> delegate);
195
196 // Gets the TranslateClient associated with this object.
197 // May return NULL if the client has been destroyed.
198 TranslateClient* GetTranslateClient();
199
200 // InfoBarDelegate:
201 virtual void InfoBarDismissed() OVERRIDE;
202 virtual int GetIconID() const OVERRIDE;
203 virtual infobars::InfoBarDelegate::Type GetInfoBarType() const OVERRIDE;
204 virtual bool ShouldExpire(const NavigationDetails& details) const OVERRIDE;
205 virtual TranslateInfoBarDelegate* AsTranslateInfoBarDelegate() OVERRIDE;
206
207 bool is_off_the_record_;
208 translate::TranslateStep step_;
209
210 // The type of fading animation if any that should be used when showing this
211 // infobar.
212 BackgroundAnimationType background_animation_;
213
214 TranslateUIDelegate ui_delegate_;
215 base::WeakPtr<TranslateManager> translate_manager_;
216
217 // The error that occurred when trying to translate (NONE if no error).
218 TranslateErrors::Type error_type_;
219
220 // The translation related preferences.
221 scoped_ptr<TranslatePrefs> prefs_;
222
223 // Whether the translation was triggered via a menu click vs automatically
224 // (due to language detection, preferences...)
225 bool triggered_from_menu_;
226 DISALLOW_COPY_AND_ASSIGN(TranslateInfoBarDelegate);
227 };
228
229 #endif // CHROME_BROWSER_TRANSLATE_TRANSLATE_INFOBAR_DELEGATE_H_
OLDNEW
« no previous file with comments | « chrome/browser/translate/translate_browsertest.cc ('k') | chrome/browser/translate/translate_infobar_delegate.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698