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

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

Issue 291503008: Remove most of chrome/ and content/ usage from TranslateInfoBarDelegate (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: review comments Created 6 years, 7 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
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 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/infobars/infobar_service.h" 12 #include "chrome/browser/infobars/infobar_service.h"
13 #include "chrome/browser/translate/translate_tab_helper.h"
14 #include "components/infobars/core/infobar.h" 13 #include "components/infobars/core/infobar.h"
14 #include "components/translate/core/browser/language_state.h"
15 #include "components/translate/core/browser/translate_accept_languages.h" 15 #include "components/translate/core/browser/translate_accept_languages.h"
16 #include "components/translate/core/browser/translate_client.h"
16 #include "components/translate/core/browser/translate_download_manager.h" 17 #include "components/translate/core/browser/translate_download_manager.h"
18 #include "components/translate/core/browser/translate_driver.h"
17 #include "components/translate/core/browser/translate_manager.h" 19 #include "components/translate/core/browser/translate_manager.h"
18 #include "components/translate/core/common/translate_constants.h" 20 #include "components/translate/core/common/translate_constants.h"
19 #include "content/public/browser/browser_context.h"
20 #include "content/public/browser/web_contents.h" 21 #include "content/public/browser/web_contents.h"
21 #include "grit/component_strings.h" 22 #include "grit/component_strings.h"
22 #include "grit/theme_resources.h" 23 #include "grit/theme_resources.h"
23 #include "third_party/icu/source/i18n/unicode/coll.h" 24 #include "third_party/icu/source/i18n/unicode/coll.h"
24 #include "ui/base/l10n/l10n_util.h" 25 #include "ui/base/l10n/l10n_util.h"
25 26
26 namespace { 27 namespace {
27 28
28 // Counts used to decide whether infobars should be shown. 29 // Counts used to decide whether infobars should be shown.
29 // Android and iOS implementations do not offer a drop down (for space reasons), 30 // Android and iOS implementations do not offer a drop down (for space reasons),
(...skipping 14 matching lines...) Expand all
44 #endif 45 #endif
45 46
46 } // namespace 47 } // namespace
47 48
48 const size_t TranslateInfoBarDelegate::kNoIndex = TranslateUIDelegate::NO_INDEX; 49 const size_t TranslateInfoBarDelegate::kNoIndex = TranslateUIDelegate::NO_INDEX;
49 50
50 TranslateInfoBarDelegate::~TranslateInfoBarDelegate() { 51 TranslateInfoBarDelegate::~TranslateInfoBarDelegate() {
51 } 52 }
52 53
53 // static 54 // static
54 void TranslateInfoBarDelegate::Create(bool replace_existing_infobar, 55 void TranslateInfoBarDelegate::Create(
55 content::WebContents* web_contents, 56 bool replace_existing_infobar,
56 translate::TranslateStep step, 57 const base::WeakPtr<TranslateManager>& translate_manager,
57 const std::string& original_language, 58 InfoBarService* infobar_service,
58 const std::string& target_language, 59 bool is_off_the_record,
59 TranslateErrors::Type error_type, 60 translate::TranslateStep step,
60 PrefService* prefs, 61 const std::string& original_language,
61 bool triggered_from_menu) { 62 const std::string& target_language,
63 TranslateErrors::Type error_type,
64 PrefService* prefs,
65 bool triggered_from_menu) {
66 DCHECK(translate_manager);
67 DCHECK(infobar_service);
68
62 // Check preconditions. 69 // Check preconditions.
63 if (step != translate::TRANSLATE_STEP_TRANSLATE_ERROR) { 70 if (step != translate::TRANSLATE_STEP_TRANSLATE_ERROR) {
64 DCHECK(TranslateDownloadManager::IsSupportedLanguage(target_language)); 71 DCHECK(TranslateDownloadManager::IsSupportedLanguage(target_language));
65 if (!TranslateDownloadManager::IsSupportedLanguage(original_language)) { 72 if (!TranslateDownloadManager::IsSupportedLanguage(original_language)) {
66 // The original language can only be "unknown" for the "translating" 73 // The original language can only be "unknown" for the "translating"
67 // infobar, which is the case when the user started a translation from the 74 // infobar, which is the case when the user started a translation from the
68 // context menu. 75 // context menu.
69 DCHECK(step == translate::TRANSLATE_STEP_TRANSLATING || 76 DCHECK(step == translate::TRANSLATE_STEP_TRANSLATING ||
70 step == translate::TRANSLATE_STEP_AFTER_TRANSLATE); 77 step == translate::TRANSLATE_STEP_AFTER_TRANSLATE);
71 DCHECK_EQ(translate::kUnknownLanguageCode, original_language); 78 DCHECK_EQ(translate::kUnknownLanguageCode, original_language);
72 } 79 }
73 } 80 }
74 81
75 // Do not create the after translate infobar if we are auto translating. 82 // Do not create the after translate infobar if we are auto translating.
76 if ((step == translate::TRANSLATE_STEP_AFTER_TRANSLATE) || 83 if (((step == translate::TRANSLATE_STEP_AFTER_TRANSLATE) ||
77 (step == translate::TRANSLATE_STEP_TRANSLATING)) { 84 (step == translate::TRANSLATE_STEP_TRANSLATING)) &&
78 TranslateTabHelper* translate_tab_helper = 85 translate_manager->translate_client()->GetTranslateDriver()
79 TranslateTabHelper::FromWebContents(web_contents); 86 ->GetLanguageState().InTranslateNavigation()) {
80 if (!translate_tab_helper || 87 return;
81 translate_tab_helper->GetLanguageState().InTranslateNavigation())
82 return;
83 } 88 }
84 89
85 // Find any existing translate infobar delegate. 90 // Find any existing translate infobar delegate.
86 infobars::InfoBar* old_infobar = NULL; 91 infobars::InfoBar* old_infobar = NULL;
87 InfoBarService* infobar_service =
88 InfoBarService::FromWebContents(web_contents);
89 TranslateInfoBarDelegate* old_delegate = NULL; 92 TranslateInfoBarDelegate* old_delegate = NULL;
90 for (size_t i = 0; i < infobar_service->infobar_count(); ++i) { 93 for (size_t i = 0; i < infobar_service->infobar_count(); ++i) {
91 old_infobar = infobar_service->infobar_at(i); 94 old_infobar = infobar_service->infobar_at(i);
92 old_delegate = old_infobar->delegate()->AsTranslateInfoBarDelegate(); 95 old_delegate = old_infobar->delegate()->AsTranslateInfoBarDelegate();
93 if (old_delegate) { 96 if (old_delegate) {
94 if (!replace_existing_infobar) 97 if (!replace_existing_infobar)
95 return; 98 return;
96 break; 99 break;
97 } 100 }
98 } 101 }
99 102
100 // Add the new delegate. 103 // Add the new delegate.
101 scoped_ptr<infobars::InfoBar> infobar(CreateInfoBar( 104 scoped_ptr<infobars::InfoBar> infobar(CreateInfoBar(
102 scoped_ptr<TranslateInfoBarDelegate>(new TranslateInfoBarDelegate( 105 scoped_ptr<TranslateInfoBarDelegate>(new TranslateInfoBarDelegate(
103 web_contents, step, old_delegate, original_language, 106 translate_manager, is_off_the_record, step, old_delegate,
104 target_language, error_type, prefs, 107 original_language, target_language, error_type, prefs,
105 triggered_from_menu)))); 108 triggered_from_menu))));
106 if (old_delegate) 109 if (old_delegate)
107 infobar_service->ReplaceInfoBar(old_infobar, infobar.Pass()); 110 infobar_service->ReplaceInfoBar(old_infobar, infobar.Pass());
108 else 111 else
109 infobar_service->AddInfoBar(infobar.Pass()); 112 infobar_service->AddInfoBar(infobar.Pass());
110 } 113 }
111 114
112 115
113 void TranslateInfoBarDelegate::UpdateOriginalLanguageIndex( 116 void TranslateInfoBarDelegate::UpdateOriginalLanguageIndex(
114 size_t language_index) { 117 size_t language_index) {
115 ui_delegate_.UpdateOriginalLanguageIndex(language_index); 118 ui_delegate_.UpdateOriginalLanguageIndex(language_index);
116 } 119 }
117 120
118 void TranslateInfoBarDelegate::UpdateTargetLanguageIndex( 121 void TranslateInfoBarDelegate::UpdateTargetLanguageIndex(
119 size_t language_index) { 122 size_t language_index) {
120 ui_delegate_.UpdateTargetLanguageIndex(language_index); 123 ui_delegate_.UpdateTargetLanguageIndex(language_index);
121 } 124 }
122 125
123 void TranslateInfoBarDelegate::Translate() { 126 void TranslateInfoBarDelegate::Translate() {
124 ui_delegate_.Translate(); 127 ui_delegate_.Translate();
125 } 128 }
126 129
127 void TranslateInfoBarDelegate::RevertTranslation() { 130 void TranslateInfoBarDelegate::RevertTranslation() {
128 ui_delegate_.RevertTranslation(); 131 ui_delegate_.RevertTranslation();
129 infobar()->RemoveSelf(); 132 infobar()->RemoveSelf();
130 } 133 }
131 134
132 void TranslateInfoBarDelegate::ReportLanguageDetectionError() { 135 void TranslateInfoBarDelegate::ReportLanguageDetectionError() {
133 TranslateManager* manager = 136 if (translate_manager_)
134 TranslateTabHelper::GetManagerFromWebContents(GetWebContents()); 137 translate_manager_->ReportLanguageDetectionError();
135 if (!manager)
136 return;
137 manager->ReportLanguageDetectionError();
138 } 138 }
139 139
140 void TranslateInfoBarDelegate::TranslationDeclined() { 140 void TranslateInfoBarDelegate::TranslationDeclined() {
141 ui_delegate_.TranslationDeclined(false); 141 ui_delegate_.TranslationDeclined(false);
142 } 142 }
143 143
144 bool TranslateInfoBarDelegate::IsTranslatableLanguageByPrefs() { 144 bool TranslateInfoBarDelegate::IsTranslatableLanguageByPrefs() {
145 TranslateTabHelper* translate_tab_helper = 145 TranslateClient* client = GetTranslateClient();
146 TranslateTabHelper::FromWebContents(GetWebContents()); 146 scoped_ptr<TranslatePrefs> translate_prefs(client->GetTranslatePrefs());
147 scoped_ptr<TranslatePrefs> translate_prefs(
148 TranslateTabHelper::CreateTranslatePrefs(
149 translate_tab_helper->GetPrefs()));
150 TranslateAcceptLanguages* accept_languages = 147 TranslateAcceptLanguages* accept_languages =
151 translate_tab_helper->GetTranslateAcceptLanguages(); 148 client->GetTranslateAcceptLanguages();
152 return translate_prefs->CanTranslateLanguage(accept_languages, 149 return translate_prefs->CanTranslateLanguage(accept_languages,
153 original_language_code()); 150 original_language_code());
154 } 151 }
155 152
156 void TranslateInfoBarDelegate::ToggleTranslatableLanguageByPrefs() { 153 void TranslateInfoBarDelegate::ToggleTranslatableLanguageByPrefs() {
157 if (ui_delegate_.IsLanguageBlocked()) { 154 if (ui_delegate_.IsLanguageBlocked()) {
158 ui_delegate_.SetLanguageBlocked(false); 155 ui_delegate_.SetLanguageBlocked(false);
159 } else { 156 } else {
160 ui_delegate_.SetLanguageBlocked(true); 157 ui_delegate_.SetLanguageBlocked(true);
161 infobar()->RemoveSelf(); 158 infobar()->RemoveSelf();
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
245 return base::string16(); 242 return base::string16();
246 } 243 }
247 244
248 void TranslateInfoBarDelegate::MessageInfoBarButtonPressed() { 245 void TranslateInfoBarDelegate::MessageInfoBarButtonPressed() {
249 DCHECK_EQ(translate::TRANSLATE_STEP_TRANSLATE_ERROR, step_); 246 DCHECK_EQ(translate::TRANSLATE_STEP_TRANSLATE_ERROR, step_);
250 if (error_type_ == TranslateErrors::UNSUPPORTED_LANGUAGE) { 247 if (error_type_ == TranslateErrors::UNSUPPORTED_LANGUAGE) {
251 RevertTranslation(); 248 RevertTranslation();
252 return; 249 return;
253 } 250 }
254 // This is the "Try again..." case. 251 // This is the "Try again..." case.
255 TranslateManager* manager = 252 DCHECK(translate_manager_);
256 TranslateTabHelper::GetManagerFromWebContents(GetWebContents()); 253 translate_manager_->TranslatePage(
257 DCHECK(manager);
258 manager->TranslatePage(
259 original_language_code(), target_language_code(), false); 254 original_language_code(), target_language_code(), false);
260 } 255 }
261 256
262 bool TranslateInfoBarDelegate::ShouldShowMessageInfoBarButton() { 257 bool TranslateInfoBarDelegate::ShouldShowMessageInfoBarButton() {
263 return !GetMessageInfoBarButtonText().empty(); 258 return !GetMessageInfoBarButtonText().empty();
264 } 259 }
265 260
266 bool TranslateInfoBarDelegate::ShouldShowNeverTranslateShortcut() { 261 bool TranslateInfoBarDelegate::ShouldShowNeverTranslateShortcut() {
267 DCHECK_EQ(translate::TRANSLATE_STEP_BEFORE_TRANSLATE, step_); 262 DCHECK_EQ(translate::TRANSLATE_STEP_BEFORE_TRANSLATE, step_);
268 return !GetWebContents()->GetBrowserContext()->IsOffTheRecord() && 263 return !is_off_the_record_ &&
269 (prefs_->GetTranslationDeniedCount(original_language_code()) >= 264 (prefs_->GetTranslationDeniedCount(original_language_code()) >=
270 kNeverTranslateMinCount); 265 kNeverTranslateMinCount);
271 } 266 }
272 267
273 bool TranslateInfoBarDelegate::ShouldShowAlwaysTranslateShortcut() { 268 bool TranslateInfoBarDelegate::ShouldShowAlwaysTranslateShortcut() {
274 DCHECK_EQ(translate::TRANSLATE_STEP_BEFORE_TRANSLATE, step_); 269 DCHECK_EQ(translate::TRANSLATE_STEP_BEFORE_TRANSLATE, step_);
275 return !GetWebContents()->GetBrowserContext()->IsOffTheRecord() && 270 return !is_off_the_record_ &&
276 (prefs_->GetTranslationAcceptedCount(original_language_code()) >= 271 (prefs_->GetTranslationAcceptedCount(original_language_code()) >=
277 kAlwaysTranslateMinCount); 272 kAlwaysTranslateMinCount);
278 } 273 }
279 274
280 content::WebContents* TranslateInfoBarDelegate::GetWebContents() { 275 content::WebContents* TranslateInfoBarDelegate::GetWebContents() {
281 return InfoBarService::WebContentsFromInfoBar(infobar()); 276 return InfoBarService::WebContentsFromInfoBar(infobar());
282 } 277 }
283 278
284 // static 279 // static
285 void TranslateInfoBarDelegate::GetAfterTranslateStrings( 280 void TranslateInfoBarDelegate::GetAfterTranslateStrings(
(...skipping 24 matching lines...) Expand all
310 *swap_languages = (offsets[0] > offsets[1]); 305 *swap_languages = (offsets[0] > offsets[1]);
311 if (*swap_languages) 306 if (*swap_languages)
312 std::swap(offsets[0], offsets[1]); 307 std::swap(offsets[0], offsets[1]);
313 308
314 strings->push_back(text.substr(0, offsets[0])); 309 strings->push_back(text.substr(0, offsets[0]));
315 strings->push_back(text.substr(offsets[0], offsets[1] - offsets[0])); 310 strings->push_back(text.substr(offsets[0], offsets[1] - offsets[0]));
316 strings->push_back(text.substr(offsets[1])); 311 strings->push_back(text.substr(offsets[1]));
317 } 312 }
318 313
319 TranslateInfoBarDelegate::TranslateInfoBarDelegate( 314 TranslateInfoBarDelegate::TranslateInfoBarDelegate(
320 content::WebContents* web_contents, 315 const base::WeakPtr<TranslateManager>& translate_manager,
316 bool is_off_the_record,
321 translate::TranslateStep step, 317 translate::TranslateStep step,
322 TranslateInfoBarDelegate* old_delegate, 318 TranslateInfoBarDelegate* old_delegate,
323 const std::string& original_language, 319 const std::string& original_language,
324 const std::string& target_language, 320 const std::string& target_language,
325 TranslateErrors::Type error_type, 321 TranslateErrors::Type error_type,
326 PrefService* prefs, 322 PrefService* prefs,
327 bool triggered_from_menu) 323 bool triggered_from_menu)
328 : infobars::InfoBarDelegate(), 324 : infobars::InfoBarDelegate(),
325 is_off_the_record_(is_off_the_record),
329 step_(step), 326 step_(step),
330 background_animation_(NONE), 327 background_animation_(NONE),
331 ui_delegate_(TranslateTabHelper::FromWebContents(web_contents), 328 ui_delegate_(translate_manager->translate_client(),
332 TranslateTabHelper::GetManagerFromWebContents(web_contents), 329 translate_manager.get(),
blundell 2014/05/16 15:11:03 hmm, is it ok that this guy holds on to a raw poin
droger 2014/05/16 15:14:11 You're right, it's probably not OK conceptually.
333 original_language, 330 original_language,
334 target_language), 331 target_language),
332 translate_manager_(translate_manager),
335 error_type_(error_type), 333 error_type_(error_type),
336 prefs_(TranslateTabHelper::CreateTranslatePrefs(prefs)), 334 prefs_(translate_manager->translate_client()->GetTranslatePrefs()),
337 triggered_from_menu_(triggered_from_menu) { 335 triggered_from_menu_(triggered_from_menu) {
338 DCHECK_NE((step_ == translate::TRANSLATE_STEP_TRANSLATE_ERROR), 336 DCHECK_NE((step_ == translate::TRANSLATE_STEP_TRANSLATE_ERROR),
339 (error_type_ == TranslateErrors::NONE)); 337 (error_type_ == TranslateErrors::NONE));
338 DCHECK(translate_manager_);
340 339
341 if (old_delegate && (old_delegate->is_error() != is_error())) 340 if (old_delegate && (old_delegate->is_error() != is_error()))
342 background_animation_ = is_error() ? NORMAL_TO_ERROR : ERROR_TO_NORMAL; 341 background_animation_ = is_error() ? NORMAL_TO_ERROR : ERROR_TO_NORMAL;
343 } 342 }
344 343
344 TranslateClient* TranslateInfoBarDelegate::GetTranslateClient() {
345 if (!translate_manager_)
346 return NULL;
347
348 return translate_manager_->translate_client();
349 }
350
345 // TranslateInfoBarDelegate::CreateInfoBar() is implemented in platform-specific 351 // TranslateInfoBarDelegate::CreateInfoBar() is implemented in platform-specific
346 // files. 352 // files.
347 353
348 void TranslateInfoBarDelegate::InfoBarDismissed() { 354 void TranslateInfoBarDelegate::InfoBarDismissed() {
349 if (step_ != translate::TRANSLATE_STEP_BEFORE_TRANSLATE) 355 if (step_ != translate::TRANSLATE_STEP_BEFORE_TRANSLATE)
350 return; 356 return;
351 357
352 // The user closed the infobar without clicking the translate button. 358 // The user closed the infobar without clicking the translate button.
353 TranslationDeclined(); 359 TranslationDeclined();
354 UMA_HISTOGRAM_BOOLEAN("Translate.DeclineTranslateCloseInfobar", true); 360 UMA_HISTOGRAM_BOOLEAN("Translate.DeclineTranslateCloseInfobar", true);
(...skipping 15 matching lines...) Expand all
370 if (!details.is_navigation_to_different_page && !details.is_main_frame) 376 if (!details.is_navigation_to_different_page && !details.is_main_frame)
371 return false; 377 return false;
372 378
373 return infobars::InfoBarDelegate::ShouldExpireInternal(details); 379 return infobars::InfoBarDelegate::ShouldExpireInternal(details);
374 } 380 }
375 381
376 TranslateInfoBarDelegate* 382 TranslateInfoBarDelegate*
377 TranslateInfoBarDelegate::AsTranslateInfoBarDelegate() { 383 TranslateInfoBarDelegate::AsTranslateInfoBarDelegate() {
378 return this; 384 return this;
379 } 385 }
OLDNEW
« no previous file with comments | « chrome/browser/translate/translate_infobar_delegate.h ('k') | chrome/browser/translate/translate_tab_helper.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698