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

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

Issue 107303002: Make the TranslateInfoBarDelegate once again use the TranslateUIDelegate. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 7 years 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
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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_infobar_delegate.h" 5 #include "chrome/browser/translate/translate_infobar_delegate.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/i18n/string_compare.h" 9 #include "base/i18n/string_compare.h"
10 #include "base/metrics/histogram.h" 10 #include "base/metrics/histogram.h"
11 #include "base/prefs/pref_service.h" 11 #include "base/prefs/pref_service.h"
12 #include "chrome/browser/browser_process.h" 12 #include "chrome/browser/browser_process.h"
13 #include "chrome/browser/infobars/infobar.h" 13 #include "chrome/browser/infobars/infobar.h"
14 #include "chrome/browser/infobars/infobar_service.h" 14 #include "chrome/browser/infobars/infobar_service.h"
15 #include "chrome/browser/profiles/profile.h" 15 #include "chrome/browser/profiles/profile.h"
16 #include "chrome/browser/translate/translate_accept_languages.h" 16 #include "chrome/browser/translate/translate_accept_languages.h"
17 #include "chrome/browser/translate/translate_browser_metrics.h"
18 #include "chrome/browser/translate/translate_manager.h" 17 #include "chrome/browser/translate/translate_manager.h"
19 #include "chrome/browser/translate/translate_tab_helper.h" 18 #include "chrome/browser/translate/translate_tab_helper.h"
20 #include "chrome/browser/translate/translate_ui_delegate.h"
21 #include "components/translate/common/translate_constants.h" 19 #include "components/translate/common/translate_constants.h"
22 #include "content/public/browser/navigation_details.h" 20 #include "content/public/browser/navigation_details.h"
23 #include "content/public/browser/navigation_entry.h" 21 #include "content/public/browser/navigation_entry.h"
24 #include "content/public/browser/web_contents.h" 22 #include "content/public/browser/web_contents.h"
25 #include "grit/generated_resources.h" 23 #include "grit/generated_resources.h"
26 #include "grit/theme_resources.h" 24 #include "grit/theme_resources.h"
27 #include "third_party/icu/source/i18n/unicode/coll.h" 25 #include "third_party/icu/source/i18n/unicode/coll.h"
28 #include "ui/base/l10n/l10n_util.h" 26 #include "ui/base/l10n/l10n_util.h"
29 27
30 28
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
76 if (old_delegate) { 74 if (old_delegate) {
77 if (!replace_existing_infobar) 75 if (!replace_existing_infobar)
78 return; 76 return;
79 break; 77 break;
80 } 78 }
81 } 79 }
82 80
83 // Add the new delegate. 81 // Add the new delegate.
84 scoped_ptr<InfoBar> infobar(CreateInfoBar( 82 scoped_ptr<InfoBar> infobar(CreateInfoBar(
85 scoped_ptr<TranslateInfoBarDelegate>(new TranslateInfoBarDelegate( 83 scoped_ptr<TranslateInfoBarDelegate>(new TranslateInfoBarDelegate(
86 infobar_type, old_delegate, original_language, target_language, 84 web_contents, infobar_type, old_delegate, original_language,
87 error_type, prefs, shortcut_config)))); 85 target_language, error_type, prefs, shortcut_config))));
88 if (old_delegate) 86 if (old_delegate)
89 infobar_service->ReplaceInfoBar(old_infobar, infobar.Pass()); 87 infobar_service->ReplaceInfoBar(old_infobar, infobar.Pass());
90 else 88 else
91 infobar_service->AddInfoBar(infobar.Pass()); 89 infobar_service->AddInfoBar(infobar.Pass());
92 } 90 }
93 91
94 92
95 void TranslateInfoBarDelegate::UpdateOriginalLanguageIndex( 93 void TranslateInfoBarDelegate::UpdateOriginalLanguageIndex(
96 size_t language_index) { 94 size_t language_index) {
97 if (original_language_index_ == language_index) 95 ui_delegate_.UpdateOriginalLanguageIndex(language_index);
98 return;
99
100 UMA_HISTOGRAM_BOOLEAN(TranslateBrowserMetrics::GetMetricsName(
101 TranslateBrowserMetrics::UMA_MODIFY_ORIGINAL_LANG), true);
102 original_language_index_ = language_index;
103 } 96 }
104 97
105 void TranslateInfoBarDelegate::UpdateTargetLanguageIndex( 98 void TranslateInfoBarDelegate::UpdateTargetLanguageIndex(
106 size_t language_index) { 99 size_t language_index) {
107 if (target_language_index_ == language_index) 100 ui_delegate_.UpdateTargetLanguageIndex(language_index);
108 return;
109
110 DCHECK_LT(language_index, num_languages());
111 UMA_HISTOGRAM_BOOLEAN(TranslateBrowserMetrics::GetMetricsName(
112 TranslateBrowserMetrics::UMA_MODIFY_TARGET_LANG), true);
113 target_language_index_ = language_index;
114 } 101 }
115 102
116 void TranslateInfoBarDelegate::Translate() { 103 void TranslateInfoBarDelegate::Translate() {
117 if (!web_contents()->GetBrowserContext()->IsOffTheRecord()) { 104 ui_delegate_.Translate();
118 prefs_.ResetTranslationDeniedCount(original_language_code());
119 prefs_.IncrementTranslationAcceptedCount(original_language_code());
120 }
121 TranslateManager::GetInstance()->TranslatePage(web_contents(),
122 original_language_code(),
123 target_language_code());
124
125 UMA_HISTOGRAM_BOOLEAN(TranslateBrowserMetrics::GetMetricsName(
126 TranslateBrowserMetrics::UMA_PERFORM_TRANSLATE), true);
127 } 105 }
128 106
129 void TranslateInfoBarDelegate::RevertTranslation() { 107 void TranslateInfoBarDelegate::RevertTranslation() {
130 TranslateManager::GetInstance()->RevertTranslation(web_contents()); 108 ui_delegate_.RevertTranslation();
131 UMA_HISTOGRAM_BOOLEAN(TranslateBrowserMetrics::GetMetricsName(
132 TranslateBrowserMetrics::UMA_REVERT_TRANSLATION), true);
133 infobar()->RemoveSelf(); 109 infobar()->RemoveSelf();
134 } 110 }
135 111
136 void TranslateInfoBarDelegate::ReportLanguageDetectionError() { 112 void TranslateInfoBarDelegate::ReportLanguageDetectionError() {
137 TranslateManager::GetInstance()->ReportLanguageDetectionError( 113 TranslateManager::GetInstance()->ReportLanguageDetectionError(
138 web_contents()); 114 web_contents());
139 } 115 }
140 116
141 void TranslateInfoBarDelegate::TranslationDeclined() { 117 void TranslateInfoBarDelegate::TranslationDeclined() {
142 if (!web_contents()->GetBrowserContext()->IsOffTheRecord()) { 118 ui_delegate_.TranslationDeclined();
143 prefs_.ResetTranslationAcceptedCount(original_language_code());
144 prefs_.IncrementTranslationDeniedCount(original_language_code());
145 }
146
147 // Remember that the user declined the translation so as to prevent showing a
148 // translate infobar for that page again. (TranslateManager initiates
149 // translations when getting a LANGUAGE_DETERMINED from the page, which
150 // happens when a load stops. That could happen multiple times, including
151 // after the user already declined the translation.)
152 TranslateTabHelper::FromWebContents(web_contents())->
153 language_state().set_translation_declined(true);
154
155 UMA_HISTOGRAM_BOOLEAN(TranslateBrowserMetrics::GetMetricsName(
156 TranslateBrowserMetrics::UMA_DECLINE_TRANSLATE), true);
157 } 119 }
158 120
159 bool TranslateInfoBarDelegate::IsTranslatableLanguageByPrefs() { 121 bool TranslateInfoBarDelegate::IsTranslatableLanguageByPrefs() {
160 Profile* profile = 122 Profile* profile =
161 Profile::FromBrowserContext(web_contents()->GetBrowserContext()); 123 Profile::FromBrowserContext(web_contents()->GetBrowserContext());
162 Profile* original_profile = profile->GetOriginalProfile(); 124 Profile* original_profile = profile->GetOriginalProfile();
163 return TranslatePrefs::CanTranslateLanguage(original_profile, 125 return TranslatePrefs::CanTranslateLanguage(original_profile,
164 original_language_code()); 126 original_language_code());
165 } 127 }
166 128
167 void TranslateInfoBarDelegate::ToggleTranslatableLanguageByPrefs() { 129 void TranslateInfoBarDelegate::ToggleTranslatableLanguageByPrefs() {
168 if (prefs_.IsBlockedLanguage(original_language_code())) { 130 if (ui_delegate_.IsLanguageBlocked()) {
169 prefs_.UnblockLanguage(original_language_code()); 131 ui_delegate_.SetLanguageBlocked(false);
170 } else { 132 } else {
171 prefs_.BlockLanguage(original_language_code()); 133 ui_delegate_.SetLanguageBlocked(true);
172 TranslateTabHelper* translate_tab_helper =
173 TranslateTabHelper::FromWebContents(web_contents());
174 DCHECK(translate_tab_helper);
175 translate_tab_helper->language_state().SetTranslateEnabled(false);
176 infobar()->RemoveSelf(); 134 infobar()->RemoveSelf();
177 } 135 }
178
179 UMA_HISTOGRAM_BOOLEAN(TranslateBrowserMetrics::GetMetricsName(
180 TranslateBrowserMetrics::UMA_NEVER_TRANSLATE_LANG), true);
181 } 136 }
182 137
183 bool TranslateInfoBarDelegate::IsSiteBlacklisted() { 138 bool TranslateInfoBarDelegate::IsSiteBlacklisted() {
184 std::string host = TranslateUIDelegate::GetPageHost(web_contents()); 139 return ui_delegate_.IsSiteBlacklisted();
185 return !host.empty() && prefs_.IsSiteBlacklisted(host);
186 } 140 }
187 141
188 void TranslateInfoBarDelegate::ToggleSiteBlacklist() { 142 void TranslateInfoBarDelegate::ToggleSiteBlacklist() {
189 std::string host = TranslateUIDelegate::GetPageHost(web_contents()); 143 if (ui_delegate_.IsSiteBlacklisted()) {
190 if (host.empty()) 144 ui_delegate_.SetSiteBlacklist(false);
191 return;
192
193 if (prefs_.IsSiteBlacklisted(host)) {
194 prefs_.RemoveSiteFromBlacklist(host);
195 } else { 145 } else {
196 prefs_.BlacklistSite(host); 146 ui_delegate_.SetSiteBlacklist(true);
197 TranslateTabHelper* translate_tab_helper =
198 TranslateTabHelper::FromWebContents(web_contents());
199 DCHECK(translate_tab_helper);
200 translate_tab_helper->language_state().SetTranslateEnabled(false);
201 infobar()->RemoveSelf(); 147 infobar()->RemoveSelf();
202 } 148 }
203
204 UMA_HISTOGRAM_BOOLEAN(TranslateBrowserMetrics::GetMetricsName(
205 TranslateBrowserMetrics::UMA_NEVER_TRANSLATE_SITE), true);
206 } 149 }
207 150
208 bool TranslateInfoBarDelegate::ShouldAlwaysTranslate() { 151 bool TranslateInfoBarDelegate::ShouldAlwaysTranslate() {
209 return prefs_.IsLanguagePairWhitelisted(original_language_code(), 152 return ui_delegate_.ShouldAlwaysTranslate();
210 target_language_code());
211 } 153 }
212 154
213 void TranslateInfoBarDelegate::ToggleAlwaysTranslate() { 155 void TranslateInfoBarDelegate::ToggleAlwaysTranslate() {
214 const std::string& original_lang = original_language_code(); 156 ui_delegate_.SetAlwaysTranslate(!ui_delegate_.ShouldAlwaysTranslate());
215 const std::string& target_lang = target_language_code();
216 if (prefs_.IsLanguagePairWhitelisted(original_lang, target_lang))
217 prefs_.RemoveLanguagePairFromWhitelist(original_lang, target_lang);
218 else
219 prefs_.WhitelistLanguagePair(original_lang, target_lang);
220
221 UMA_HISTOGRAM_BOOLEAN(TranslateBrowserMetrics::GetMetricsName(
222 TranslateBrowserMetrics::UMA_ALWAYS_TRANSLATE_LANG), true);
223 } 157 }
224 158
225 void TranslateInfoBarDelegate::AlwaysTranslatePageLanguage() { 159 void TranslateInfoBarDelegate::AlwaysTranslatePageLanguage() {
226 const std::string& original_lang = original_language_code(); 160 DCHECK(!ui_delegate_.ShouldAlwaysTranslate());
227 const std::string& target_lang = target_language_code(); 161 ui_delegate_.SetAlwaysTranslate(true);
228 DCHECK(!prefs_.IsLanguagePairWhitelisted(original_lang, target_lang));
229 prefs_.WhitelistLanguagePair(original_lang, target_lang);
230 UMA_HISTOGRAM_BOOLEAN(TranslateBrowserMetrics::GetMetricsName(
231 TranslateBrowserMetrics::UMA_ALWAYS_TRANSLATE_LANG), true);
232
233 Translate(); 162 Translate();
234 } 163 }
235 164
236 void TranslateInfoBarDelegate::NeverTranslatePageLanguage() { 165 void TranslateInfoBarDelegate::NeverTranslatePageLanguage() {
237 prefs_.BlockLanguage(original_language_code()); 166 DCHECK(!ui_delegate_.IsLanguageBlocked());
238 TranslateTabHelper* translate_tab_helper = 167 ui_delegate_.SetLanguageBlocked(true);
239 TranslateTabHelper::FromWebContents(web_contents());
240 DCHECK(translate_tab_helper);
241 translate_tab_helper->language_state().SetTranslateEnabled(false);
242 UMA_HISTOGRAM_BOOLEAN(TranslateBrowserMetrics::GetMetricsName(
243 TranslateBrowserMetrics::UMA_NEVER_TRANSLATE_LANG), true);
244
245 infobar()->RemoveSelf(); 168 infobar()->RemoveSelf();
246 } 169 }
247 170
248 string16 TranslateInfoBarDelegate::GetMessageInfoBarText() { 171 string16 TranslateInfoBarDelegate::GetMessageInfoBarText() {
249 if (infobar_type_ == TRANSLATING) { 172 if (infobar_type_ == TRANSLATING) {
250 string16 target_language_name = language_name_at(target_language_index()); 173 string16 target_language_name = language_name_at(target_language_index());
251 return l10n_util::GetStringFUTF16(IDS_TRANSLATE_INFOBAR_TRANSLATING_TO, 174 return l10n_util::GetStringFUTF16(IDS_TRANSLATE_INFOBAR_TRANSLATING_TO,
252 target_language_name); 175 target_language_name);
253 } 176 }
254 177
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
357 *swap_languages = (offsets[0] > offsets[1]); 280 *swap_languages = (offsets[0] > offsets[1]);
358 if (*swap_languages) 281 if (*swap_languages)
359 std::swap(offsets[0], offsets[1]); 282 std::swap(offsets[0], offsets[1]);
360 283
361 strings->push_back(text.substr(0, offsets[0])); 284 strings->push_back(text.substr(0, offsets[0]));
362 strings->push_back(text.substr(offsets[0], offsets[1] - offsets[0])); 285 strings->push_back(text.substr(offsets[0], offsets[1] - offsets[0]));
363 strings->push_back(text.substr(offsets[1])); 286 strings->push_back(text.substr(offsets[1]));
364 } 287 }
365 288
366 TranslateInfoBarDelegate::TranslateInfoBarDelegate( 289 TranslateInfoBarDelegate::TranslateInfoBarDelegate(
290 content::WebContents* web_contents,
367 Type infobar_type, 291 Type infobar_type,
368 TranslateInfoBarDelegate* old_delegate, 292 TranslateInfoBarDelegate* old_delegate,
369 const std::string& original_language, 293 const std::string& original_language,
370 const std::string& target_language, 294 const std::string& target_language,
371 TranslateErrors::Type error_type, 295 TranslateErrors::Type error_type,
372 PrefService* prefs, 296 PrefService* prefs,
373 ShortcutConfiguration shortcut_config) 297 ShortcutConfiguration shortcut_config)
374 : InfoBarDelegate(), 298 : InfoBarDelegate(),
375 infobar_type_(infobar_type), 299 infobar_type_(infobar_type),
376 background_animation_(NONE), 300 background_animation_(NONE),
377 original_language_index_(kNoIndex), 301 ui_delegate_(web_contents, original_language, target_language,
378 target_language_index_(kNoIndex), 302 error_type),
379 error_type_(error_type), 303 error_type_(error_type),
380 prefs_(prefs), 304 prefs_(prefs),
381 shortcut_config_(shortcut_config) { 305 shortcut_config_(shortcut_config) {
382 DCHECK_NE((infobar_type_ == TRANSLATION_ERROR), 306 DCHECK_NE((infobar_type_ == TRANSLATION_ERROR),
383 (error_type_ == TranslateErrors::NONE)); 307 (error_type_ == TranslateErrors::NONE));
384 308
385 if (old_delegate && (old_delegate->is_error() != is_error())) 309 if (old_delegate && (old_delegate->is_error() != is_error()))
386 background_animation_ = is_error() ? NORMAL_TO_ERROR : ERROR_TO_NORMAL; 310 background_animation_ = is_error() ? NORMAL_TO_ERROR : ERROR_TO_NORMAL;
387
388 languages_ = TranslateUIDelegate::GetSortedLanguageNames(
389 g_browser_process->GetApplicationLocale());
390
391 for (std::vector<LanguageNamePair>::const_iterator iter = languages_.begin();
392 iter != languages_.end(); ++iter) {
393 std::string language_code = iter->first;
394 if (language_code == original_language)
395 original_language_index_ = iter - languages_.begin();
396 if (language_code == target_language)
397 target_language_index_ = iter - languages_.begin();
398 }
399 } 311 }
400 312
401 // TranslateInfoBarDelegate::CreateInfoBar() is implemented in platform-specific 313 // TranslateInfoBarDelegate::CreateInfoBar() is implemented in platform-specific
402 // files. 314 // files.
403 315
404 void TranslateInfoBarDelegate::InfoBarDismissed() { 316 void TranslateInfoBarDelegate::InfoBarDismissed() {
405 if (infobar_type_ != BEFORE_TRANSLATE) 317 if (infobar_type_ != BEFORE_TRANSLATE)
406 return; 318 return;
407 319
408 // The user closed the infobar without clicking the translate button. 320 // The user closed the infobar without clicking the translate button.
(...skipping 16 matching lines...) Expand all
425 if (!details.is_navigation_to_different_page() && !details.is_main_frame) 337 if (!details.is_navigation_to_different_page() && !details.is_main_frame)
426 return false; 338 return false;
427 339
428 return InfoBarDelegate::ShouldExpireInternal(details); 340 return InfoBarDelegate::ShouldExpireInternal(details);
429 } 341 }
430 342
431 TranslateInfoBarDelegate* 343 TranslateInfoBarDelegate*
432 TranslateInfoBarDelegate::AsTranslateInfoBarDelegate() { 344 TranslateInfoBarDelegate::AsTranslateInfoBarDelegate() {
433 return this; 345 return this;
434 } 346 }
OLDNEW
« no previous file with comments | « chrome/browser/translate/translate_infobar_delegate.h ('k') | chrome/browser/translate/translate_manager_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698