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

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

Issue 227043005: Eliminate TranslateManager listening to //chrome-level notifications. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: 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
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_manager.h" 5 #include "chrome/browser/translate/translate_manager.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/metrics/field_trial.h" 9 #include "base/metrics/field_trial.h"
10 #include "base/metrics/histogram.h" 10 #include "base/metrics/histogram.h"
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
158 // be done after that. 158 // be done after that.
159 base::MessageLoop::current()->PostTask( 159 base::MessageLoop::current()->PostTask(
160 FROM_HERE, 160 FROM_HERE,
161 base::Bind( 161 base::Bind(
162 &TranslateManager::InitiateTranslationPosted, 162 &TranslateManager::InitiateTranslationPosted,
163 weak_method_factory_.GetWeakPtr(), 163 weak_method_factory_.GetWeakPtr(),
164 translate_driver_->GetLanguageState().original_language(), 164 translate_driver_->GetLanguageState().original_language(),
165 0)); 165 0));
166 break; 166 break;
167 } 167 }
168 case chrome::NOTIFICATION_TAB_LANGUAGE_DETERMINED: {
169 const LanguageDetectionDetails* lang_det_details =
170 content::Details<const LanguageDetectionDetails>(details).ptr();
171
172 WebContents* tab = content::Source<WebContents>(source).ptr();
173 DCHECK_EQ(translate_tab_helper_->GetWebContents(), tab);
174
175 if (!translate_tab_helper_->GetWebContents())
176 return;
177
178 // We may get this notifications multiple times. Make sure to translate
179 // only once.
180 LanguageState& language_state = translate_driver_->GetLanguageState();
181 if (language_state.page_needs_translation() &&
182 !language_state.translation_pending() &&
183 !language_state.translation_declined() &&
184 !language_state.IsPageTranslated()) {
185 std::string language = lang_det_details->adopted_language;
186 InitiateTranslation(language);
187 }
188 break;
189 }
190 case chrome::NOTIFICATION_PAGE_TRANSLATED: {
191 // Only add translate infobar if it doesn't exist; if it already exists,
192 // just update the state, the actual infobar would have received the same
193 // notification and update the visual display accordingly.
194 PageTranslatedDetails* page_translated_details =
195 content::Details<PageTranslatedDetails>(details).ptr();
196 PageTranslated(page_translated_details);
197 break;
198 }
199 default: 168 default:
200 NOTREACHED(); 169 NOTREACHED();
201 } 170 }
202 } 171 }
203 172
204 // static 173 // static
205 scoped_ptr<TranslateManager::TranslateErrorCallbackList::Subscription> 174 scoped_ptr<TranslateManager::TranslateErrorCallbackList::Subscription>
206 TranslateManager::RegisterTranslateErrorCallback( 175 TranslateManager::RegisterTranslateErrorCallback(
207 const TranslateManager::TranslateErrorCallback& callback) { 176 const TranslateManager::TranslateErrorCallback& callback) {
208 if (!g_callback_list_) 177 if (!g_callback_list_)
209 g_callback_list_ = new TranslateErrorCallbackList; 178 g_callback_list_ = new TranslateErrorCallbackList;
210 return g_callback_list_->Add(callback); 179 return g_callback_list_->Add(callback);
211 } 180 }
212 181
213 TranslateManager::TranslateManager( 182 TranslateManager::TranslateManager(
214 TranslateTabHelper* helper, 183 TranslateTabHelper* helper,
215 const std::string& accept_languages_pref_name) 184 const std::string& accept_languages_pref_name)
216 : max_reload_check_attempts_(kMaxTranslateLoadCheckAttempts), 185 : max_reload_check_attempts_(kMaxTranslateLoadCheckAttempts),
217 accept_languages_pref_name_(accept_languages_pref_name), 186 accept_languages_pref_name_(accept_languages_pref_name),
218 translate_tab_helper_(helper), 187 translate_tab_helper_(helper),
219 translate_client_(helper), 188 translate_client_(helper),
220 translate_driver_(translate_client_->GetTranslateDriver()), 189 translate_driver_(translate_client_->GetTranslateDriver()),
221 weak_method_factory_(this) { 190 weak_method_factory_(this) {
222 191
223 WebContents* web_contents = translate_tab_helper_->GetWebContents(); 192 WebContents* web_contents = translate_tab_helper_->GetWebContents();
224 193
225 notification_registrar_.Add( 194 notification_registrar_.Add(
226 this, content::NOTIFICATION_NAV_ENTRY_COMMITTED, 195 this, content::NOTIFICATION_NAV_ENTRY_COMMITTED,
227 content::Source<NavigationController>(&web_contents->GetController())); 196 content::Source<NavigationController>(&web_contents->GetController()));
228 notification_registrar_.Add(this,
229 chrome::NOTIFICATION_TAB_LANGUAGE_DETERMINED,
230 content::Source<WebContents>(web_contents));
231 notification_registrar_.Add(this,
232 chrome::NOTIFICATION_PAGE_TRANSLATED,
233 content::Source<WebContents>(web_contents));
234 } 197 }
235 198
236 void TranslateManager::InitiateTranslation(const std::string& page_lang) { 199 void TranslateManager::InitiateTranslation(const std::string& page_lang) {
200 // Short-circuit out if not in a state where initiating translation makes
droger 2014/04/07 09:09:54 Nit: maybe keep the comment about this being calle
blundell 2014/04/08 05:25:22 Done.
201 // sense.
202 LanguageState& language_state = translate_driver_->GetLanguageState();
203 if (!language_state.page_needs_translation() ||
204 language_state.translation_pending() ||
205 language_state.translation_declined() ||
206 language_state.IsPageTranslated()) {
207 return;
208 }
209
237 PrefService* prefs = translate_client_->GetPrefs(); 210 PrefService* prefs = translate_client_->GetPrefs();
238 if (!prefs->GetBoolean(prefs::kEnableTranslate)) { 211 if (!prefs->GetBoolean(prefs::kEnableTranslate)) {
239 TranslateBrowserMetrics::ReportInitiationStatus( 212 TranslateBrowserMetrics::ReportInitiationStatus(
240 TranslateBrowserMetrics::INITIATION_STATUS_DISABLED_BY_PREFS); 213 TranslateBrowserMetrics::INITIATION_STATUS_DISABLED_BY_PREFS);
241 const std::string& locale = 214 const std::string& locale =
242 TranslateDownloadManager::GetInstance()->application_locale(); 215 TranslateDownloadManager::GetInstance()->application_locale();
243 TranslateBrowserMetrics::ReportLocalesOnDisabledByPrefs(locale); 216 TranslateBrowserMetrics::ReportLocalesOnDisabledByPrefs(locale);
244 return; 217 return;
245 } 218 }
246 219
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
325 if (!web_contents->GetBrowserContext()->IsOffTheRecord()) { 298 if (!web_contents->GetBrowserContext()->IsOffTheRecord()) {
326 std::string auto_target_lang = GetAutoTargetLanguage(language_code, prefs); 299 std::string auto_target_lang = GetAutoTargetLanguage(language_code, prefs);
327 if (!auto_target_lang.empty()) { 300 if (!auto_target_lang.empty()) {
328 TranslateBrowserMetrics::ReportInitiationStatus( 301 TranslateBrowserMetrics::ReportInitiationStatus(
329 TranslateBrowserMetrics::INITIATION_STATUS_AUTO_BY_CONFIG); 302 TranslateBrowserMetrics::INITIATION_STATUS_AUTO_BY_CONFIG);
330 TranslatePage(language_code, auto_target_lang, false); 303 TranslatePage(language_code, auto_target_lang, false);
331 return; 304 return;
332 } 305 }
333 } 306 }
334 307
335 LanguageState& language_state = translate_driver_->GetLanguageState();
336 std::string auto_translate_to = language_state.AutoTranslateTo(); 308 std::string auto_translate_to = language_state.AutoTranslateTo();
337 if (!auto_translate_to.empty()) { 309 if (!auto_translate_to.empty()) {
338 // This page was navigated through a click from a translated page. 310 // This page was navigated through a click from a translated page.
339 TranslateBrowserMetrics::ReportInitiationStatus( 311 TranslateBrowserMetrics::ReportInitiationStatus(
340 TranslateBrowserMetrics::INITIATION_STATUS_AUTO_BY_LINK); 312 TranslateBrowserMetrics::INITIATION_STATUS_AUTO_BY_LINK);
341 TranslatePage(language_code, auto_translate_to, false); 313 TranslatePage(language_code, auto_translate_to, false);
342 return; 314 return;
343 } 315 }
344 316
345 TranslateBrowserMetrics::ReportInitiationStatus( 317 TranslateBrowserMetrics::ReportInitiationStatus(
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
478 NOTREACHED(); 450 NOTREACHED();
479 return; 451 return;
480 } 452 }
481 453
482 translate_driver_->GetLanguageState().set_translation_pending(true); 454 translate_driver_->GetLanguageState().set_translation_pending(true);
483 web_contents->GetRenderViewHost()->Send(new ChromeViewMsg_TranslatePage( 455 web_contents->GetRenderViewHost()->Send(new ChromeViewMsg_TranslatePage(
484 web_contents->GetRenderViewHost()->GetRoutingID(), entry->GetPageID(), 456 web_contents->GetRenderViewHost()->GetRoutingID(), entry->GetPageID(),
485 translate_script, source_lang, target_lang)); 457 translate_script, source_lang, target_lang));
486 } 458 }
487 459
488 void TranslateManager::PageTranslated(PageTranslatedDetails* details) { 460 void TranslateManager::PageTranslated(const std::string& source_lang,
489 if ((details->error_type == TranslateErrors::NONE) && 461 const std::string& target_lang,
490 details->source_language != translate::kUnknownLanguageCode && 462 TranslateErrors::Type error_type) {
491 !TranslateDownloadManager::IsSupportedLanguage( 463 translate_driver_->GetLanguageState().SetCurrentLanguage(target_lang);
492 details->source_language)) { 464 translate_driver_->GetLanguageState().set_translation_pending(false);
493 details->error_type = TranslateErrors::UNSUPPORTED_LANGUAGE; 465
466 if ((error_type == TranslateErrors::NONE) &&
467 source_lang != translate::kUnknownLanguageCode &&
468 !TranslateDownloadManager::IsSupportedLanguage(source_lang)) {
469 error_type = TranslateErrors::UNSUPPORTED_LANGUAGE;
494 } 470 }
495 471
496 DCHECK(translate_tab_helper_->GetWebContents());
497
498 translate_tab_helper_->ShowTranslateUI(TranslateTabHelper::AFTER_TRANSLATE, 472 translate_tab_helper_->ShowTranslateUI(TranslateTabHelper::AFTER_TRANSLATE,
499 details->source_language, 473 source_lang,
500 details->target_language, 474 target_lang,
501 details->error_type, 475 error_type,
502 false); 476 false);
503 477
504 WebContents* web_contents = translate_tab_helper_->GetWebContents(); 478 WebContents* web_contents = translate_tab_helper_->GetWebContents();
505 if (details->error_type != TranslateErrors::NONE && 479 if (error_type != TranslateErrors::NONE &&
506 !web_contents->GetBrowserContext()->IsOffTheRecord()) { 480 !web_contents->GetBrowserContext()->IsOffTheRecord()) {
507 TranslateErrorDetails error_details; 481 TranslateErrorDetails error_details;
508 error_details.time = base::Time::Now(); 482 error_details.time = base::Time::Now();
509 error_details.url = web_contents->GetLastCommittedURL(); 483 error_details.url = web_contents->GetLastCommittedURL();
510 error_details.error = details->error_type; 484 error_details.error = error_type;
511 NotifyTranslateError(error_details); 485 NotifyTranslateError(error_details);
512 } 486 }
513 } 487 }
514 488
515 void TranslateManager::OnTranslateScriptFetchComplete( 489 void TranslateManager::OnTranslateScriptFetchComplete(
516 int page_id, 490 int page_id,
517 const std::string& source_lang, 491 const std::string& source_lang,
518 const std::string& target_lang, 492 const std::string& target_lang,
519 bool success, 493 bool success,
520 const std::string& data) { 494 const std::string& data) {
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
581 &auto_target_lang)) { 555 &auto_target_lang)) {
582 // We need to confirm that the saved target language is still supported. 556 // We need to confirm that the saved target language is still supported.
583 // Also, GetLanguageCode will take care of removing country code if any. 557 // Also, GetLanguageCode will take care of removing country code if any.
584 auto_target_lang = 558 auto_target_lang =
585 TranslateDownloadManager::GetLanguageCode(auto_target_lang); 559 TranslateDownloadManager::GetLanguageCode(auto_target_lang);
586 if (TranslateDownloadManager::IsSupportedLanguage(auto_target_lang)) 560 if (TranslateDownloadManager::IsSupportedLanguage(auto_target_lang))
587 return auto_target_lang; 561 return auto_target_lang;
588 } 562 }
589 return std::string(); 563 return std::string();
590 } 564 }
OLDNEW
« no previous file with comments | « chrome/browser/translate/translate_manager.h ('k') | chrome/browser/translate/translate_tab_helper.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698