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

Side by Side Diff: components/translate/core/browser/translate_ui_delegate.cc

Issue 229363002: Componentize TranslateUIDelegate (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix mac Created 6 years, 8 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
« no previous file with comments | « components/translate/core/browser/translate_ui_delegate.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/translate/translate_ui_delegate.h" 5 #include "components/translate/core/browser/translate_ui_delegate.h"
6 6
7 #include "base/i18n/string_compare.h" 7 #include "base/i18n/string_compare.h"
8 #include "base/metrics/histogram.h" 8 #include "base/metrics/histogram.h"
9 #include "chrome/browser/browser_process.h" 9 #include "components/translate/core/browser/language_state.h"
10 #include "chrome/browser/profiles/profile.h" 10 #include "components/translate/core/browser/translate_client.h"
11 #include "chrome/browser/translate/translate_tab_helper.h"
12 #include "components/translate/core/browser/translate_download_manager.h" 11 #include "components/translate/core/browser/translate_download_manager.h"
12 #include "components/translate/core/browser/translate_driver.h"
13 #include "components/translate/core/browser/translate_manager.h" 13 #include "components/translate/core/browser/translate_manager.h"
14 #include "components/translate/core/browser/translate_prefs.h" 14 #include "components/translate/core/browser/translate_prefs.h"
15 #include "components/translate/core/common/translate_constants.h" 15 #include "components/translate/core/common/translate_constants.h"
16 #include "content/public/browser/browser_context.h"
17 #include "content/public/browser/navigation_entry.h"
18 #include "content/public/browser/web_contents.h"
19 #include "third_party/icu/source/i18n/unicode/coll.h" 16 #include "third_party/icu/source/i18n/unicode/coll.h"
20 #include "ui/base/l10n/l10n_util.h" 17 #include "ui/base/l10n/l10n_util.h"
21 18
22 namespace { 19 namespace {
23 20
24 const char kDeclineTranslate[] = "Translate.DeclineTranslate"; 21 const char kDeclineTranslate[] = "Translate.DeclineTranslate";
25 const char kRevertTranslation[] = "Translate.RevertTranslation"; 22 const char kRevertTranslation[] = "Translate.RevertTranslation";
26 const char kPerformTranslate[] = "Translate.Translate"; 23 const char kPerformTranslate[] = "Translate.Translate";
27 const char kNeverTranslateLang[] = "Translate.NeverTranslateLang"; 24 const char kNeverTranslateLang[] = "Translate.NeverTranslateLang";
28 const char kNeverTranslateSite[] = "Translate.NeverTranslateSite"; 25 const char kNeverTranslateSite[] = "Translate.NeverTranslateSite";
29 const char kAlwaysTranslateLang[] = "Translate.AlwaysTranslateLang"; 26 const char kAlwaysTranslateLang[] = "Translate.AlwaysTranslateLang";
30 const char kModifyOriginalLang[] = "Translate.ModifyOriginalLang"; 27 const char kModifyOriginalLang[] = "Translate.ModifyOriginalLang";
31 const char kModifyTargetLang[] = "Translate.ModifyTargetLang"; 28 const char kModifyTargetLang[] = "Translate.ModifyTargetLang";
32 const char kDeclineTranslateDismissUI[] = "Translate.DeclineTranslateDismissUI"; 29 const char kDeclineTranslateDismissUI[] = "Translate.DeclineTranslateDismissUI";
33 const char kShowErrorUI[] = "Translate.ShowErrorUI"; 30 const char kShowErrorUI[] = "Translate.ShowErrorUI";
34 31
35 } // namespace 32 } // namespace
36 33
37 TranslateUIDelegate::TranslateUIDelegate(content::WebContents* web_contents, 34 TranslateUIDelegate::TranslateUIDelegate(TranslateClient* translate_client,
35 TranslateManager* translate_manager,
38 const std::string& original_language, 36 const std::string& original_language,
39 const std::string& target_language) 37 const std::string& target_language)
40 : web_contents_(web_contents), 38 : translate_client_(translate_client),
39 translate_driver_(translate_client->GetTranslateDriver()),
40 translate_manager_(translate_manager),
41 original_language_index_(NO_INDEX), 41 original_language_index_(NO_INDEX),
42 initial_original_language_index_(NO_INDEX), 42 initial_original_language_index_(NO_INDEX),
43 target_language_index_(NO_INDEX) { 43 target_language_index_(NO_INDEX) {
44 DCHECK(web_contents_); 44 DCHECK(translate_client_);
45 DCHECK(translate_driver_);
46 DCHECK(translate_manager_);
45 47
46 std::vector<std::string> language_codes; 48 std::vector<std::string> language_codes;
47 TranslateDownloadManager::GetSupportedLanguages(&language_codes); 49 TranslateDownloadManager::GetSupportedLanguages(&language_codes);
48 50
49 // Preparing for the alphabetical order in the locale. 51 // Preparing for the alphabetical order in the locale.
50 UErrorCode error = U_ZERO_ERROR; 52 UErrorCode error = U_ZERO_ERROR;
51 std::string locale = g_browser_process->GetApplicationLocale(); 53 std::string locale =
54 TranslateDownloadManager::GetInstance()->application_locale();
52 icu::Locale loc(locale.c_str()); 55 icu::Locale loc(locale.c_str());
53 scoped_ptr<icu::Collator> collator(icu::Collator::createInstance(loc, error)); 56 scoped_ptr<icu::Collator> collator(icu::Collator::createInstance(loc, error));
54 collator->setStrength(icu::Collator::PRIMARY); 57 collator->setStrength(icu::Collator::PRIMARY);
55 58
56 languages_.reserve(language_codes.size()); 59 languages_.reserve(language_codes.size());
57 for (std::vector<std::string>::const_iterator iter = language_codes.begin(); 60 for (std::vector<std::string>::const_iterator iter = language_codes.begin();
58 iter != language_codes.end(); ++iter) { 61 iter != language_codes.end();
62 ++iter) {
59 std::string language_code = *iter; 63 std::string language_code = *iter;
60 64
61 base::string16 language_name = l10n_util::GetDisplayNameForLocale( 65 base::string16 language_name =
62 language_code, g_browser_process->GetApplicationLocale(), true); 66 l10n_util::GetDisplayNameForLocale(language_code, locale, true);
63 // Insert the language in languages_ in alphabetical order. 67 // Insert the language in languages_ in alphabetical order.
64 std::vector<LanguageNamePair>::iterator iter2; 68 std::vector<LanguageNamePair>::iterator iter2;
65 for (iter2 = languages_.begin(); iter2 != languages_.end(); ++iter2) { 69 for (iter2 = languages_.begin(); iter2 != languages_.end(); ++iter2) {
66 if (base::i18n::CompareString16WithCollator(collator.get(), 70 if (base::i18n::CompareString16WithCollator(
67 language_name, iter2->second) == UCOL_LESS) { 71 collator.get(), language_name, iter2->second) == UCOL_LESS) {
68 break; 72 break;
69 } 73 }
70 } 74 }
71 languages_.insert(iter2, LanguageNamePair(language_code, language_name)); 75 languages_.insert(iter2, LanguageNamePair(language_code, language_name));
72 } 76 }
73 for (std::vector<LanguageNamePair>::const_iterator iter = languages_.begin(); 77 for (std::vector<LanguageNamePair>::const_iterator iter = languages_.begin();
74 iter != languages_.end(); ++iter) { 78 iter != languages_.end();
79 ++iter) {
75 std::string language_code = iter->first; 80 std::string language_code = iter->first;
76 if (language_code == original_language) { 81 if (language_code == original_language) {
77 original_language_index_ = iter - languages_.begin(); 82 original_language_index_ = iter - languages_.begin();
78 initial_original_language_index_ = original_language_index_; 83 initial_original_language_index_ = original_language_index_;
79 } 84 }
80 if (language_code == target_language) 85 if (language_code == target_language)
81 target_language_index_ = iter - languages_.begin(); 86 target_language_index_ = iter - languages_.begin();
82 } 87 }
83 88
84 Profile* profile = 89 prefs_ = translate_client_->GetTranslatePrefs();
85 Profile::FromBrowserContext(web_contents_->GetBrowserContext());
86 prefs_ = TranslateTabHelper::CreateTranslatePrefs(profile->GetPrefs());
87 } 90 }
88 91
89 TranslateUIDelegate::~TranslateUIDelegate() { 92 TranslateUIDelegate::~TranslateUIDelegate() {}
90 }
91 93
92 void TranslateUIDelegate::OnErrorShown(TranslateErrors::Type error_type) { 94 void TranslateUIDelegate::OnErrorShown(TranslateErrors::Type error_type) {
93 DCHECK_LE(TranslateErrors::NONE, error_type); 95 DCHECK_LE(TranslateErrors::NONE, error_type);
94 DCHECK_LT(error_type, TranslateErrors::TRANSLATE_ERROR_MAX); 96 DCHECK_LT(error_type, TranslateErrors::TRANSLATE_ERROR_MAX);
95 97
96 if (error_type == TranslateErrors::NONE) 98 if (error_type == TranslateErrors::NONE)
97 return; 99 return;
98 100
99 UMA_HISTOGRAM_ENUMERATION(kShowErrorUI, error_type, 101 UMA_HISTOGRAM_ENUMERATION(
100 TranslateErrors::TRANSLATE_ERROR_MAX); 102 kShowErrorUI, error_type, TranslateErrors::TRANSLATE_ERROR_MAX);
103 }
104
105 const LanguageState& TranslateUIDelegate::GetLanguageState() {
106 return translate_driver_->GetLanguageState();
101 } 107 }
102 108
103 size_t TranslateUIDelegate::GetNumberOfLanguages() const { 109 size_t TranslateUIDelegate::GetNumberOfLanguages() const {
104 return languages_.size(); 110 return languages_.size();
105 } 111 }
106 112
107 size_t TranslateUIDelegate::GetOriginalLanguageIndex() const { 113 size_t TranslateUIDelegate::GetOriginalLanguageIndex() const {
108 return original_language_index_; 114 return original_language_index_;
109 } 115 }
110 116
(...skipping 11 matching lines...) Expand all
122 128
123 void TranslateUIDelegate::UpdateTargetLanguageIndex(size_t language_index) { 129 void TranslateUIDelegate::UpdateTargetLanguageIndex(size_t language_index) {
124 if (target_language_index_ == language_index) 130 if (target_language_index_ == language_index)
125 return; 131 return;
126 132
127 DCHECK_LT(language_index, GetNumberOfLanguages()); 133 DCHECK_LT(language_index, GetNumberOfLanguages());
128 UMA_HISTOGRAM_BOOLEAN(kModifyTargetLang, true); 134 UMA_HISTOGRAM_BOOLEAN(kModifyTargetLang, true);
129 target_language_index_ = language_index; 135 target_language_index_ = language_index;
130 } 136 }
131 137
132
133 std::string TranslateUIDelegate::GetLanguageCodeAt(size_t index) const { 138 std::string TranslateUIDelegate::GetLanguageCodeAt(size_t index) const {
134 DCHECK_LT(index, GetNumberOfLanguages()); 139 DCHECK_LT(index, GetNumberOfLanguages());
135 return languages_[index].first; 140 return languages_[index].first;
136 } 141 }
137 142
138 base::string16 TranslateUIDelegate::GetLanguageNameAt(size_t index) const { 143 base::string16 TranslateUIDelegate::GetLanguageNameAt(size_t index) const {
139 if (index == static_cast<size_t>(NO_INDEX)) 144 if (index == static_cast<size_t>(NO_INDEX))
140 return base::string16(); 145 return base::string16();
141 DCHECK_LT(index, GetNumberOfLanguages()); 146 DCHECK_LT(index, GetNumberOfLanguages());
142 return languages_[index].second; 147 return languages_[index].second;
143 } 148 }
144 149
145 std::string TranslateUIDelegate::GetOriginalLanguageCode() const { 150 std::string TranslateUIDelegate::GetOriginalLanguageCode() const {
146 return (GetOriginalLanguageIndex() == static_cast<size_t>(NO_INDEX)) ? 151 return (GetOriginalLanguageIndex() == static_cast<size_t>(NO_INDEX))
147 translate::kUnknownLanguageCode : 152 ? translate::kUnknownLanguageCode
148 GetLanguageCodeAt(GetOriginalLanguageIndex()); 153 : GetLanguageCodeAt(GetOriginalLanguageIndex());
149 } 154 }
150 155
151 std::string TranslateUIDelegate::GetTargetLanguageCode() const { 156 std::string TranslateUIDelegate::GetTargetLanguageCode() const {
152 return GetLanguageCodeAt(GetTargetLanguageIndex()); 157 return GetLanguageCodeAt(GetTargetLanguageIndex());
153 } 158 }
154 159
155 void TranslateUIDelegate::Translate() { 160 void TranslateUIDelegate::Translate() {
156 if (!web_contents()->GetBrowserContext()->IsOffTheRecord()) { 161 if (!translate_driver_->IsOffTheRecord()) {
157 prefs_->ResetTranslationDeniedCount(GetOriginalLanguageCode()); 162 prefs_->ResetTranslationDeniedCount(GetOriginalLanguageCode());
158 prefs_->IncrementTranslationAcceptedCount(GetOriginalLanguageCode()); 163 prefs_->IncrementTranslationAcceptedCount(GetOriginalLanguageCode());
159 } 164 }
160 TranslateManager* manager = 165 translate_manager_->TranslatePage(
161 TranslateTabHelper::GetManagerFromWebContents(web_contents());
162 DCHECK(manager);
163 manager->TranslatePage(
164 GetOriginalLanguageCode(), GetTargetLanguageCode(), false); 166 GetOriginalLanguageCode(), GetTargetLanguageCode(), false);
165 167
166 UMA_HISTOGRAM_BOOLEAN(kPerformTranslate, true); 168 UMA_HISTOGRAM_BOOLEAN(kPerformTranslate, true);
167 } 169 }
168 170
169 void TranslateUIDelegate::RevertTranslation() { 171 void TranslateUIDelegate::RevertTranslation() {
170 TranslateManager* manager = 172 translate_manager_->RevertTranslation();
171 TranslateTabHelper::GetManagerFromWebContents(web_contents());
172 DCHECK(manager);
173 manager->RevertTranslation();
174 173
175 UMA_HISTOGRAM_BOOLEAN(kRevertTranslation, true); 174 UMA_HISTOGRAM_BOOLEAN(kRevertTranslation, true);
176 } 175 }
177 176
178 void TranslateUIDelegate::TranslationDeclined(bool explicitly_closed) { 177 void TranslateUIDelegate::TranslationDeclined(bool explicitly_closed) {
179 if (!web_contents()->GetBrowserContext()->IsOffTheRecord()) { 178 if (!translate_driver_->IsOffTheRecord()) {
180 prefs_->ResetTranslationAcceptedCount(GetOriginalLanguageCode()); 179 prefs_->ResetTranslationAcceptedCount(GetOriginalLanguageCode());
181 prefs_->IncrementTranslationDeniedCount(GetOriginalLanguageCode()); 180 prefs_->IncrementTranslationDeniedCount(GetOriginalLanguageCode());
182 } 181 }
183 182
184 // Remember that the user declined the translation so as to prevent showing a 183 // Remember that the user declined the translation so as to prevent showing a
185 // translate infobar for that page again. (TranslateManager initiates 184 // translate infobar for that page again. (TranslateManager initiates
186 // translations when getting a LANGUAGE_DETERMINED from the page, which 185 // translations when getting a LANGUAGE_DETERMINED from the page, which
187 // happens when a load stops. That could happen multiple times, including 186 // happens when a load stops. That could happen multiple times, including
188 // after the user already declined the translation.) 187 // after the user already declined the translation.)
189 TranslateTabHelper::FromWebContents(web_contents())-> 188 translate_driver_->GetLanguageState().set_translation_declined(true);
190 GetLanguageState().set_translation_declined(true);
191 189
192 UMA_HISTOGRAM_BOOLEAN(kDeclineTranslate, true); 190 UMA_HISTOGRAM_BOOLEAN(kDeclineTranslate, true);
193 191
194 if (!explicitly_closed) 192 if (!explicitly_closed)
195 UMA_HISTOGRAM_BOOLEAN(kDeclineTranslateDismissUI, true); 193 UMA_HISTOGRAM_BOOLEAN(kDeclineTranslateDismissUI, true);
196 } 194 }
197 195
198 bool TranslateUIDelegate::IsLanguageBlocked() { 196 bool TranslateUIDelegate::IsLanguageBlocked() {
199 return prefs_->IsBlockedLanguage(GetOriginalLanguageCode()); 197 return prefs_->IsBlockedLanguage(GetOriginalLanguageCode());
200 } 198 }
201 199
202 void TranslateUIDelegate::SetLanguageBlocked(bool value) { 200 void TranslateUIDelegate::SetLanguageBlocked(bool value) {
203 if (value) { 201 if (value) {
204 prefs_->BlockLanguage(GetOriginalLanguageCode()); 202 prefs_->BlockLanguage(GetOriginalLanguageCode());
205 TranslateTabHelper* translate_tab_helper = 203 translate_driver_->GetLanguageState().SetTranslateEnabled(false);
206 TranslateTabHelper::FromWebContents(web_contents());
207 DCHECK(translate_tab_helper);
208 translate_tab_helper->GetLanguageState().SetTranslateEnabled(false);
209 } else { 204 } else {
210 prefs_->UnblockLanguage(GetOriginalLanguageCode()); 205 prefs_->UnblockLanguage(GetOriginalLanguageCode());
211 } 206 }
212 207
213 UMA_HISTOGRAM_BOOLEAN(kNeverTranslateLang, true); 208 UMA_HISTOGRAM_BOOLEAN(kNeverTranslateLang, true);
214 } 209 }
215 210
216 bool TranslateUIDelegate::IsSiteBlacklisted() { 211 bool TranslateUIDelegate::IsSiteBlacklisted() {
217 std::string host = GetPageHost(); 212 std::string host = GetPageHost();
218 return !host.empty() && prefs_->IsSiteBlacklisted(host); 213 return !host.empty() && prefs_->IsSiteBlacklisted(host);
219 } 214 }
220 215
221 void TranslateUIDelegate::SetSiteBlacklist(bool value) { 216 void TranslateUIDelegate::SetSiteBlacklist(bool value) {
222 std::string host = GetPageHost(); 217 std::string host = GetPageHost();
223 if (host.empty()) 218 if (host.empty())
224 return; 219 return;
225 220
226 if (value) { 221 if (value) {
227 prefs_->BlacklistSite(host); 222 prefs_->BlacklistSite(host);
228 TranslateTabHelper* translate_tab_helper = 223 translate_driver_->GetLanguageState().SetTranslateEnabled(false);
229 TranslateTabHelper::FromWebContents(web_contents());
230 DCHECK(translate_tab_helper);
231 translate_tab_helper->GetLanguageState().SetTranslateEnabled(false);
232 } else { 224 } else {
233 prefs_->RemoveSiteFromBlacklist(host); 225 prefs_->RemoveSiteFromBlacklist(host);
234 } 226 }
235 227
236 UMA_HISTOGRAM_BOOLEAN(kNeverTranslateSite, true); 228 UMA_HISTOGRAM_BOOLEAN(kNeverTranslateSite, true);
237 } 229 }
238 230
239 bool TranslateUIDelegate::ShouldAlwaysTranslate() { 231 bool TranslateUIDelegate::ShouldAlwaysTranslate() {
240 return prefs_->IsLanguagePairWhitelisted(GetOriginalLanguageCode(), 232 return prefs_->IsLanguagePairWhitelisted(GetOriginalLanguageCode(),
241 GetTargetLanguageCode()); 233 GetTargetLanguageCode());
242 } 234 }
243 235
244 void TranslateUIDelegate::SetAlwaysTranslate(bool value) { 236 void TranslateUIDelegate::SetAlwaysTranslate(bool value) {
245 const std::string& original_lang = GetOriginalLanguageCode(); 237 const std::string& original_lang = GetOriginalLanguageCode();
246 const std::string& target_lang = GetTargetLanguageCode(); 238 const std::string& target_lang = GetTargetLanguageCode();
247 if (value) 239 if (value)
248 prefs_->WhitelistLanguagePair(original_lang, target_lang); 240 prefs_->WhitelistLanguagePair(original_lang, target_lang);
249 else 241 else
250 prefs_->RemoveLanguagePairFromWhitelist(original_lang, target_lang); 242 prefs_->RemoveLanguagePairFromWhitelist(original_lang, target_lang);
251 243
252 UMA_HISTOGRAM_BOOLEAN(kAlwaysTranslateLang, true); 244 UMA_HISTOGRAM_BOOLEAN(kAlwaysTranslateLang, true);
253 } 245 }
254 246
255 std::string TranslateUIDelegate::GetPageHost() { 247 std::string TranslateUIDelegate::GetPageHost() {
256 content::NavigationEntry* entry = 248 if (!translate_driver_->HasCurrentPage())
257 web_contents()->GetController().GetActiveEntry(); 249 return std::string();
258 return entry ? entry->GetURL().HostNoBrackets() : std::string(); 250 return translate_driver_->GetActiveURL().HostNoBrackets();
259 } 251 }
OLDNEW
« no previous file with comments | « components/translate/core/browser/translate_ui_delegate.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698