| OLD | NEW |
| 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/memory/singleton.h" | 9 #include "base/memory/singleton.h" |
| 10 #include "base/metrics/field_trial.h" | 10 #include "base/metrics/field_trial.h" |
| 11 #include "base/metrics/histogram.h" | 11 #include "base/metrics/histogram.h" |
| 12 #include "base/prefs/pref_service.h" | 12 #include "base/prefs/pref_service.h" |
| 13 #include "base/strings/string_split.h" | 13 #include "base/strings/string_split.h" |
| 14 #include "base/strings/stringprintf.h" | 14 #include "base/strings/stringprintf.h" |
| 15 #include "base/time/time.h" | 15 #include "base/time/time.h" |
| 16 #include "chrome/browser/browser_process.h" | 16 #include "chrome/browser/browser_process.h" |
| 17 #include "chrome/browser/chrome_notification_types.h" | 17 #include "chrome/browser/chrome_notification_types.h" |
| 18 #include "chrome/browser/profiles/profile.h" | 18 #include "chrome/browser/profiles/profile.h" |
| 19 #include "chrome/browser/tab_contents/tab_util.h" | 19 #include "chrome/browser/tab_contents/tab_util.h" |
| 20 #include "chrome/browser/translate/translate_accept_languages.h" | 20 #include "chrome/browser/translate/translate_accept_languages.h" |
| 21 #include "chrome/browser/translate/translate_infobar_delegate.h" | 21 #include "chrome/browser/translate/translate_infobar_delegate.h" |
| 22 #include "chrome/browser/translate/translate_language_list.h" | |
| 23 #include "chrome/browser/translate/translate_prefs.h" | 22 #include "chrome/browser/translate/translate_prefs.h" |
| 24 #include "chrome/browser/translate/translate_script.h" | 23 #include "chrome/browser/translate/translate_script.h" |
| 25 #include "chrome/browser/translate/translate_tab_helper.h" | 24 #include "chrome/browser/translate/translate_tab_helper.h" |
| 26 #include "chrome/browser/translate/translate_url_util.h" | |
| 27 #include "chrome/browser/ui/browser.h" | 25 #include "chrome/browser/ui/browser.h" |
| 28 #include "chrome/browser/ui/browser_finder.h" | 26 #include "chrome/browser/ui/browser_finder.h" |
| 29 #include "chrome/browser/ui/browser_tabstrip.h" | 27 #include "chrome/browser/ui/browser_tabstrip.h" |
| 30 #include "chrome/browser/ui/browser_window.h" | 28 #include "chrome/browser/ui/browser_window.h" |
| 31 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 29 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
| 32 #include "chrome/browser/ui/translate/translate_bubble_factory.h" | 30 #include "chrome/browser/ui/translate/translate_bubble_factory.h" |
| 33 #include "chrome/common/chrome_switches.h" | 31 #include "chrome/common/chrome_switches.h" |
| 34 #include "chrome/common/pref_names.h" | 32 #include "chrome/common/pref_names.h" |
| 35 #include "chrome/common/render_messages.h" | 33 #include "chrome/common/render_messages.h" |
| 36 #include "chrome/common/url_constants.h" | 34 #include "chrome/common/url_constants.h" |
| 37 #include "components/translate/core/browser/language_state.h" | 35 #include "components/translate/core/browser/language_state.h" |
| 38 #include "components/translate/core/browser/page_translated_details.h" | 36 #include "components/translate/core/browser/page_translated_details.h" |
| 39 #include "components/translate/core/browser/translate_browser_metrics.h" | 37 #include "components/translate/core/browser/translate_browser_metrics.h" |
| 38 #include "components/translate/core/browser/translate_download_manager.h" |
| 40 #include "components/translate/core/browser/translate_error_details.h" | 39 #include "components/translate/core/browser/translate_error_details.h" |
| 41 #include "components/translate/core/browser/translate_event_details.h" | 40 #include "components/translate/core/browser/translate_language_list.h" |
| 41 #include "components/translate/core/browser/translate_url_util.h" |
| 42 #include "components/translate/core/common/language_detection_details.h" | 42 #include "components/translate/core/common/language_detection_details.h" |
| 43 #include "components/translate/core/common/translate_constants.h" | 43 #include "components/translate/core/common/translate_constants.h" |
| 44 #include "components/translate/core/common/translate_pref_names.h" |
| 45 #include "components/translate/core/common/translate_switches.h" |
| 44 #include "content/public/browser/navigation_controller.h" | 46 #include "content/public/browser/navigation_controller.h" |
| 45 #include "content/public/browser/navigation_details.h" | 47 #include "content/public/browser/navigation_details.h" |
| 46 #include "content/public/browser/navigation_entry.h" | 48 #include "content/public/browser/navigation_entry.h" |
| 47 #include "content/public/browser/notification_details.h" | 49 #include "content/public/browser/notification_details.h" |
| 48 #include "content/public/browser/notification_service.h" | 50 #include "content/public/browser/notification_service.h" |
| 49 #include "content/public/browser/notification_source.h" | 51 #include "content/public/browser/notification_source.h" |
| 50 #include "content/public/browser/notification_types.h" | 52 #include "content/public/browser/notification_types.h" |
| 51 #include "content/public/browser/render_process_host.h" | 53 #include "content/public/browser/render_process_host.h" |
| 52 #include "content/public/browser/render_view_host.h" | 54 #include "content/public/browser/render_view_host.h" |
| 53 #include "content/public/browser/web_contents.h" | 55 #include "content/public/browser/web_contents.h" |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 105 !url.SchemeIs(chrome::kChromeUIScheme) && | 107 !url.SchemeIs(chrome::kChromeUIScheme) && |
| 106 !url.SchemeIs(chrome::kChromeDevToolsScheme) && | 108 !url.SchemeIs(chrome::kChromeDevToolsScheme) && |
| 107 #if defined(OS_CHROMEOS) | 109 #if defined(OS_CHROMEOS) |
| 108 !(url.SchemeIs(extensions::kExtensionScheme) && | 110 !(url.SchemeIs(extensions::kExtensionScheme) && |
| 109 url.DomainIs(file_manager::kFileManagerAppId)) && | 111 url.DomainIs(file_manager::kFileManagerAppId)) && |
| 110 #endif | 112 #endif |
| 111 !url.SchemeIs(content::kFtpScheme); | 113 !url.SchemeIs(content::kFtpScheme); |
| 112 } | 114 } |
| 113 | 115 |
| 114 // static | 116 // static |
| 115 void TranslateManager::GetSupportedLanguages( | |
| 116 std::vector<std::string>* languages) { | |
| 117 if (GetInstance()->language_list_.get()) { | |
| 118 GetInstance()->language_list_->GetSupportedLanguages(languages); | |
| 119 return; | |
| 120 } | |
| 121 NOTREACHED(); | |
| 122 } | |
| 123 | |
| 124 // static | |
| 125 base::Time TranslateManager::GetSupportedLanguagesLastUpdated() { | |
| 126 if (GetInstance()->language_list_.get()) { | |
| 127 return GetInstance()->language_list_->last_updated(); | |
| 128 } | |
| 129 NOTREACHED(); | |
| 130 return base::Time(); | |
| 131 } | |
| 132 | |
| 133 // static | |
| 134 std::string TranslateManager::GetLanguageCode( | |
| 135 const std::string& chrome_locale) { | |
| 136 if (GetInstance()->language_list_.get()) | |
| 137 return GetInstance()->language_list_->GetLanguageCode(chrome_locale); | |
| 138 NOTREACHED(); | |
| 139 return chrome_locale; | |
| 140 } | |
| 141 | |
| 142 // static | |
| 143 bool TranslateManager::IsSupportedLanguage(const std::string& language) { | |
| 144 if (GetInstance()->language_list_.get()) | |
| 145 return GetInstance()->language_list_->IsSupportedLanguage(language); | |
| 146 NOTREACHED(); | |
| 147 return false; | |
| 148 } | |
| 149 | |
| 150 // static | |
| 151 bool TranslateManager::IsAlphaLanguage(const std::string& language) { | |
| 152 if (GetInstance()->language_list_.get()) | |
| 153 return GetInstance()->language_list_->IsAlphaLanguage(language); | |
| 154 NOTREACHED(); | |
| 155 return false; | |
| 156 } | |
| 157 | |
| 158 // static | |
| 159 bool TranslateManager::IsAcceptLanguage(Profile* profile, | 117 bool TranslateManager::IsAcceptLanguage(Profile* profile, |
| 160 const std::string& language) { | 118 const std::string& language) { |
| 161 if (GetInstance()->accept_languages_.get()) { | 119 if (GetInstance()->accept_languages_.get()) { |
| 162 return GetInstance()->accept_languages_->IsAcceptLanguage( | 120 return GetInstance()->accept_languages_->IsAcceptLanguage( |
| 163 profile, language); | 121 profile, language); |
| 164 } | 122 } |
| 165 NOTREACHED(); | 123 NOTREACHED(); |
| 166 return false; | 124 return false; |
| 167 } | 125 } |
| 168 | 126 |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 272 } | 230 } |
| 273 | 231 |
| 274 void TranslateManager::AddObserver(Observer* obs) { | 232 void TranslateManager::AddObserver(Observer* obs) { |
| 275 observer_list_.AddObserver(obs); | 233 observer_list_.AddObserver(obs); |
| 276 } | 234 } |
| 277 | 235 |
| 278 void TranslateManager::RemoveObserver(Observer* obs) { | 236 void TranslateManager::RemoveObserver(Observer* obs) { |
| 279 observer_list_.RemoveObserver(obs); | 237 observer_list_.RemoveObserver(obs); |
| 280 } | 238 } |
| 281 | 239 |
| 282 void TranslateManager::NotifyTranslateEvent( | |
| 283 const TranslateEventDetails& details) { | |
| 284 FOR_EACH_OBSERVER(Observer, observer_list_, OnTranslateEvent(details)); | |
| 285 } | |
| 286 | |
| 287 void TranslateManager::NotifyLanguageDetection( | 240 void TranslateManager::NotifyLanguageDetection( |
| 288 const LanguageDetectionDetails& details) { | 241 const LanguageDetectionDetails& details) { |
| 289 FOR_EACH_OBSERVER(Observer, observer_list_, OnLanguageDetection(details)); | 242 FOR_EACH_OBSERVER(Observer, observer_list_, OnLanguageDetection(details)); |
| 290 } | 243 } |
| 291 | 244 |
| 292 void TranslateManager::NotifyTranslateError( | 245 void TranslateManager::NotifyTranslateError( |
| 293 const TranslateErrorDetails& details) { | 246 const TranslateErrorDetails& details) { |
| 294 FOR_EACH_OBSERVER(Observer, observer_list_, OnTranslateError(details)); | 247 FOR_EACH_OBSERVER(Observer, observer_list_, OnTranslateError(details)); |
| 295 } | 248 } |
| 296 | 249 |
| 297 TranslateManager::TranslateManager() | 250 TranslateManager::TranslateManager() |
| 298 : max_reload_check_attempts_(kMaxTranslateLoadCheckAttempts), | 251 : max_reload_check_attempts_(kMaxTranslateLoadCheckAttempts), |
| 299 weak_method_factory_(this) { | 252 weak_method_factory_(this) { |
| 300 notification_registrar_.Add(this, content::NOTIFICATION_NAV_ENTRY_COMMITTED, | 253 notification_registrar_.Add(this, content::NOTIFICATION_NAV_ENTRY_COMMITTED, |
| 301 content::NotificationService::AllSources()); | 254 content::NotificationService::AllSources()); |
| 302 notification_registrar_.Add(this, | 255 notification_registrar_.Add(this, |
| 303 chrome::NOTIFICATION_TAB_LANGUAGE_DETERMINED, | 256 chrome::NOTIFICATION_TAB_LANGUAGE_DETERMINED, |
| 304 content::NotificationService::AllSources()); | 257 content::NotificationService::AllSources()); |
| 305 notification_registrar_.Add(this, chrome::NOTIFICATION_PAGE_TRANSLATED, | 258 notification_registrar_.Add(this, chrome::NOTIFICATION_PAGE_TRANSLATED, |
| 306 content::NotificationService::AllSources()); | 259 content::NotificationService::AllSources()); |
| 307 language_list_.reset(new TranslateLanguageList); | |
| 308 accept_languages_.reset(new TranslateAcceptLanguages); | 260 accept_languages_.reset(new TranslateAcceptLanguages); |
| 309 script_.reset(new TranslateScript); | 261 script_.reset(new TranslateScript); |
| 310 } | 262 } |
| 311 | 263 |
| 312 void TranslateManager::InitiateTranslation(WebContents* web_contents, | 264 void TranslateManager::InitiateTranslation(WebContents* web_contents, |
| 313 const std::string& page_lang) { | 265 const std::string& page_lang) { |
| 314 TranslateTabHelper* translate_tab_helper = | 266 TranslateTabHelper* translate_tab_helper = |
| 315 TranslateTabHelper::FromWebContents(web_contents); | 267 TranslateTabHelper::FromWebContents(web_contents); |
| 316 if (!translate_tab_helper) | 268 if (!translate_tab_helper) |
| 317 return; | 269 return; |
| 318 | 270 |
| 319 Profile* profile = | 271 Profile* profile = |
| 320 Profile::FromBrowserContext(web_contents->GetBrowserContext()); | 272 Profile::FromBrowserContext(web_contents->GetBrowserContext()); |
| 321 Profile* original_profile = profile->GetOriginalProfile(); | 273 Profile* original_profile = profile->GetOriginalProfile(); |
| 322 PrefService* prefs = original_profile->GetPrefs(); | 274 PrefService* prefs = original_profile->GetPrefs(); |
| 323 if (!prefs->GetBoolean(prefs::kEnableTranslate)) { | 275 if (!prefs->GetBoolean(prefs::kEnableTranslate)) { |
| 324 TranslateBrowserMetrics::ReportInitiationStatus( | 276 TranslateBrowserMetrics::ReportInitiationStatus( |
| 325 TranslateBrowserMetrics::INITIATION_STATUS_DISABLED_BY_PREFS); | 277 TranslateBrowserMetrics::INITIATION_STATUS_DISABLED_BY_PREFS); |
| 326 const std::string& locale = g_browser_process->GetApplicationLocale(); | 278 const std::string& locale = g_browser_process->GetApplicationLocale(); |
| 327 TranslateBrowserMetrics::ReportLocalesOnDisabledByPrefs(locale); | 279 TranslateBrowserMetrics::ReportLocalesOnDisabledByPrefs(locale); |
| 328 return; | 280 return; |
| 329 } | 281 } |
| 330 | 282 |
| 331 // Allow disabling of translate from the command line to assist with | 283 // Allow disabling of translate from the command line to assist with |
| 332 // automated browser testing. | 284 // automated browser testing. |
| 333 if (CommandLine::ForCurrentProcess()->HasSwitch( | 285 if (CommandLine::ForCurrentProcess()->HasSwitch( |
| 334 switches::kDisableTranslate)) { | 286 translate::switches::kDisableTranslate)) { |
| 335 TranslateBrowserMetrics::ReportInitiationStatus( | 287 TranslateBrowserMetrics::ReportInitiationStatus( |
| 336 TranslateBrowserMetrics::INITIATION_STATUS_DISABLED_BY_SWITCH); | 288 TranslateBrowserMetrics::INITIATION_STATUS_DISABLED_BY_SWITCH); |
| 337 return; | 289 return; |
| 338 } | 290 } |
| 339 | 291 |
| 340 // MHTML pages currently cannot be translated. | 292 // MHTML pages currently cannot be translated. |
| 341 // See bug: 217945. | 293 // See bug: 217945. |
| 342 if (web_contents->GetContentsMimeType() == "multipart/related") { | 294 if (web_contents->GetContentsMimeType() == "multipart/related") { |
| 343 TranslateBrowserMetrics::ReportInitiationStatus( | 295 TranslateBrowserMetrics::ReportInitiationStatus( |
| 344 TranslateBrowserMetrics::INITIATION_STATUS_MIME_TYPE_IS_NOT_SUPPORTED); | 296 TranslateBrowserMetrics::INITIATION_STATUS_MIME_TYPE_IS_NOT_SUPPORTED); |
| 345 return; | 297 return; |
| 346 } | 298 } |
| 347 | 299 |
| 348 // Don't translate any Chrome specific page, e.g., New Tab Page, Download, | 300 // Don't translate any Chrome specific page, e.g., New Tab Page, Download, |
| 349 // History, and so on. | 301 // History, and so on. |
| 350 GURL page_url = web_contents->GetURL(); | 302 GURL page_url = web_contents->GetURL(); |
| 351 if (!IsTranslatableURL(page_url)) { | 303 if (!IsTranslatableURL(page_url)) { |
| 352 TranslateBrowserMetrics::ReportInitiationStatus( | 304 TranslateBrowserMetrics::ReportInitiationStatus( |
| 353 TranslateBrowserMetrics::INITIATION_STATUS_URL_IS_NOT_SUPPORTED); | 305 TranslateBrowserMetrics::INITIATION_STATUS_URL_IS_NOT_SUPPORTED); |
| 354 return; | 306 return; |
| 355 } | 307 } |
| 356 | 308 |
| 357 std::string target_lang = GetTargetLanguage(prefs); | 309 std::string target_lang = GetTargetLanguage(prefs); |
| 358 std::string language_code = GetLanguageCode(page_lang); | 310 std::string language_code = |
| 311 TranslateDownloadManager::GetLanguageCode(page_lang); |
| 359 | 312 |
| 360 // Don't translate similar languages (ex: en-US to en). | 313 // Don't translate similar languages (ex: en-US to en). |
| 361 if (language_code == target_lang) { | 314 if (language_code == target_lang) { |
| 362 TranslateBrowserMetrics::ReportInitiationStatus( | 315 TranslateBrowserMetrics::ReportInitiationStatus( |
| 363 TranslateBrowserMetrics::INITIATION_STATUS_SIMILAR_LANGUAGES); | 316 TranslateBrowserMetrics::INITIATION_STATUS_SIMILAR_LANGUAGES); |
| 364 return; | 317 return; |
| 365 } | 318 } |
| 366 | 319 |
| 367 // Nothing to do if either the language Chrome is in or the language of the | 320 // Nothing to do if either the language Chrome is in or the language of the |
| 368 // page is not supported by the translation server. | 321 // page is not supported by the translation server. |
| 369 if (target_lang.empty() || !IsSupportedLanguage(language_code)) { | 322 if (target_lang.empty() || |
| 323 !TranslateDownloadManager::IsSupportedLanguage(language_code)) { |
| 370 TranslateBrowserMetrics::ReportInitiationStatus( | 324 TranslateBrowserMetrics::ReportInitiationStatus( |
| 371 TranslateBrowserMetrics::INITIATION_STATUS_LANGUAGE_IS_NOT_SUPPORTED); | 325 TranslateBrowserMetrics::INITIATION_STATUS_LANGUAGE_IS_NOT_SUPPORTED); |
| 372 TranslateBrowserMetrics::ReportUnsupportedLanguageAtInitiation( | 326 TranslateBrowserMetrics::ReportUnsupportedLanguageAtInitiation( |
| 373 language_code); | 327 language_code); |
| 374 return; | 328 return; |
| 375 } | 329 } |
| 376 | 330 |
| 377 TranslatePrefs translate_prefs(prefs); | 331 TranslatePrefs translate_prefs(prefs); |
| 378 | 332 |
| 379 // Don't translate any user black-listed languages. | 333 // Don't translate any user black-listed languages. |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 455 if ((web_contents->IsLoading()) && attempt < kMaxTranslateLoadCheckAttempts) { | 409 if ((web_contents->IsLoading()) && attempt < kMaxTranslateLoadCheckAttempts) { |
| 456 int backoff = attempt * max_reload_check_attempts_; | 410 int backoff = attempt * max_reload_check_attempts_; |
| 457 base::MessageLoop::current()->PostDelayedTask( | 411 base::MessageLoop::current()->PostDelayedTask( |
| 458 FROM_HERE, base::Bind(&TranslateManager::InitiateTranslationPosted, | 412 FROM_HERE, base::Bind(&TranslateManager::InitiateTranslationPosted, |
| 459 weak_method_factory_.GetWeakPtr(), process_id, | 413 weak_method_factory_.GetWeakPtr(), process_id, |
| 460 render_id, page_lang, ++attempt), | 414 render_id, page_lang, ++attempt), |
| 461 base::TimeDelta::FromMilliseconds(backoff)); | 415 base::TimeDelta::FromMilliseconds(backoff)); |
| 462 return; | 416 return; |
| 463 } | 417 } |
| 464 | 418 |
| 465 InitiateTranslation(web_contents, GetLanguageCode(page_lang)); | 419 InitiateTranslation(web_contents, |
| 420 TranslateDownloadManager::GetLanguageCode(page_lang)); |
| 466 } | 421 } |
| 467 | 422 |
| 468 void TranslateManager::TranslatePage(WebContents* web_contents, | 423 void TranslateManager::TranslatePage(WebContents* web_contents, |
| 469 const std::string& original_source_lang, | 424 const std::string& original_source_lang, |
| 470 const std::string& target_lang) { | 425 const std::string& target_lang) { |
| 471 NavigationEntry* entry = web_contents->GetController().GetActiveEntry(); | 426 NavigationEntry* entry = web_contents->GetController().GetActiveEntry(); |
| 472 if (!entry) { | 427 if (!entry) { |
| 473 NOTREACHED(); | 428 NOTREACHED(); |
| 474 return; | 429 return; |
| 475 } | 430 } |
| 476 | 431 |
| 477 // Translation can be kicked by context menu against unsupported languages. | 432 // Translation can be kicked by context menu against unsupported languages. |
| 478 // Unsupported language strings should be replaced with | 433 // Unsupported language strings should be replaced with |
| 479 // kUnknownLanguageCode in order to send a translation request with enabling | 434 // kUnknownLanguageCode in order to send a translation request with enabling |
| 480 // server side auto language detection. | 435 // server side auto language detection. |
| 481 std::string source_lang(original_source_lang); | 436 std::string source_lang(original_source_lang); |
| 482 if (!IsSupportedLanguage(source_lang)) | 437 if (!TranslateDownloadManager::IsSupportedLanguage(source_lang)) |
| 483 source_lang = std::string(translate::kUnknownLanguageCode); | 438 source_lang = std::string(translate::kUnknownLanguageCode); |
| 484 | 439 |
| 485 if (IsTranslateBubbleEnabled()) { | 440 if (IsTranslateBubbleEnabled()) { |
| 486 ShowBubble(web_contents, TranslateBubbleModel::VIEW_STATE_TRANSLATING, | 441 ShowBubble(web_contents, TranslateBubbleModel::VIEW_STATE_TRANSLATING, |
| 487 TranslateErrors::NONE); | 442 TranslateErrors::NONE); |
| 488 } else { | 443 } else { |
| 489 Profile* profile = | 444 Profile* profile = |
| 490 Profile::FromBrowserContext(web_contents->GetBrowserContext()); | 445 Profile::FromBrowserContext(web_contents->GetBrowserContext()); |
| 491 TranslateInfoBarDelegate::Create( | 446 TranslateInfoBarDelegate::Create( |
| 492 true, web_contents, TranslateInfoBarDelegate::TRANSLATING, source_lang, | 447 true, web_contents, TranslateInfoBarDelegate::TRANSLATING, source_lang, |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 593 translate_tab_helper->GetLanguageState().set_translation_pending(true); | 548 translate_tab_helper->GetLanguageState().set_translation_pending(true); |
| 594 web_contents->GetRenderViewHost()->Send(new ChromeViewMsg_TranslatePage( | 549 web_contents->GetRenderViewHost()->Send(new ChromeViewMsg_TranslatePage( |
| 595 web_contents->GetRenderViewHost()->GetRoutingID(), entry->GetPageID(), | 550 web_contents->GetRenderViewHost()->GetRoutingID(), entry->GetPageID(), |
| 596 translate_script, source_lang, target_lang)); | 551 translate_script, source_lang, target_lang)); |
| 597 } | 552 } |
| 598 | 553 |
| 599 void TranslateManager::PageTranslated(WebContents* web_contents, | 554 void TranslateManager::PageTranslated(WebContents* web_contents, |
| 600 PageTranslatedDetails* details) { | 555 PageTranslatedDetails* details) { |
| 601 if ((details->error_type == TranslateErrors::NONE) && | 556 if ((details->error_type == TranslateErrors::NONE) && |
| 602 details->source_language != translate::kUnknownLanguageCode && | 557 details->source_language != translate::kUnknownLanguageCode && |
| 603 !IsSupportedLanguage(details->source_language)) { | 558 !TranslateDownloadManager::IsSupportedLanguage( |
| 559 details->source_language)) { |
| 604 details->error_type = TranslateErrors::UNSUPPORTED_LANGUAGE; | 560 details->error_type = TranslateErrors::UNSUPPORTED_LANGUAGE; |
| 605 } | 561 } |
| 606 | 562 |
| 607 if (IsTranslateBubbleEnabled()) { | 563 if (IsTranslateBubbleEnabled()) { |
| 608 TranslateBubbleModel::ViewState view_state = | 564 TranslateBubbleModel::ViewState view_state = |
| 609 (details->error_type == TranslateErrors::NONE) ? | 565 (details->error_type == TranslateErrors::NONE) ? |
| 610 TranslateBubbleModel::VIEW_STATE_AFTER_TRANSLATE : | 566 TranslateBubbleModel::VIEW_STATE_AFTER_TRANSLATE : |
| 611 TranslateBubbleModel::VIEW_STATE_ERROR; | 567 TranslateBubbleModel::VIEW_STATE_ERROR; |
| 612 ShowBubble(web_contents, view_state, details->error_type); | 568 ShowBubble(web_contents, view_state, details->error_type); |
| 613 } else { | 569 } else { |
| (...skipping 11 matching lines...) Expand all Loading... |
| 625 if (details->error_type != TranslateErrors::NONE && | 581 if (details->error_type != TranslateErrors::NONE && |
| 626 !web_contents->GetBrowserContext()->IsOffTheRecord()) { | 582 !web_contents->GetBrowserContext()->IsOffTheRecord()) { |
| 627 TranslateErrorDetails error_details; | 583 TranslateErrorDetails error_details; |
| 628 error_details.time = base::Time::Now(); | 584 error_details.time = base::Time::Now(); |
| 629 error_details.url = web_contents->GetLastCommittedURL(); | 585 error_details.url = web_contents->GetLastCommittedURL(); |
| 630 error_details.error = details->error_type; | 586 error_details.error = details->error_type; |
| 631 NotifyTranslateError(error_details); | 587 NotifyTranslateError(error_details); |
| 632 } | 588 } |
| 633 } | 589 } |
| 634 | 590 |
| 635 void TranslateManager::FetchLanguageListFromTranslateServer( | |
| 636 PrefService* prefs) { | |
| 637 // We don't want to do this when translate is disabled. | |
| 638 DCHECK(prefs != NULL); | |
| 639 if (CommandLine::ForCurrentProcess()->HasSwitch( | |
| 640 switches::kDisableTranslate) || | |
| 641 (prefs != NULL && !prefs->GetBoolean(prefs::kEnableTranslate))) { | |
| 642 return; | |
| 643 } | |
| 644 | |
| 645 if (language_list_.get()) | |
| 646 language_list_->RequestLanguageList(); | |
| 647 else | |
| 648 NOTREACHED(); | |
| 649 } | |
| 650 | |
| 651 void TranslateManager::CleanupPendingUlrFetcher() { | 591 void TranslateManager::CleanupPendingUlrFetcher() { |
| 652 language_list_.reset(); | |
| 653 script_.reset(); | 592 script_.reset(); |
| 654 } | 593 } |
| 655 | 594 |
| 656 void TranslateManager::OnTranslateScriptFetchComplete( | 595 void TranslateManager::OnTranslateScriptFetchComplete( |
| 657 bool success, const std::string& data) { | 596 bool success, const std::string& data) { |
| 658 std::vector<PendingRequest>::const_iterator iter; | 597 std::vector<PendingRequest>::const_iterator iter; |
| 659 for (iter = pending_requests_.begin(); iter != pending_requests_.end(); | 598 for (iter = pending_requests_.begin(); iter != pending_requests_.end(); |
| 660 ++iter) { | 599 ++iter) { |
| 661 const PendingRequest& request = *iter; | 600 const PendingRequest& request = *iter; |
| 662 WebContents* web_contents = | 601 WebContents* web_contents = |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 742 | 681 |
| 743 TranslateBubbleFactory::Show(browser->window(), web_contents, view_state, | 682 TranslateBubbleFactory::Show(browser->window(), web_contents, view_state, |
| 744 error_type); | 683 error_type); |
| 745 #else | 684 #else |
| 746 NOTREACHED(); | 685 NOTREACHED(); |
| 747 #endif | 686 #endif |
| 748 } | 687 } |
| 749 | 688 |
| 750 // static | 689 // static |
| 751 std::string TranslateManager::GetTargetLanguage(PrefService* prefs) { | 690 std::string TranslateManager::GetTargetLanguage(PrefService* prefs) { |
| 752 std::string ui_lang = | 691 std::string ui_lang = TranslatePrefs::ConvertLangCodeForTranslation( |
| 753 TranslatePrefs::ConvertLangCodeForTranslation( | 692 TranslateDownloadManager::GetLanguageCode( |
| 754 GetLanguageCode(g_browser_process->GetApplicationLocale())); | 693 g_browser_process->GetApplicationLocale())); |
| 755 | 694 |
| 756 if (IsSupportedLanguage(ui_lang)) | 695 if (TranslateDownloadManager::IsSupportedLanguage(ui_lang)) |
| 757 return ui_lang; | 696 return ui_lang; |
| 758 | 697 |
| 759 // Getting the accepted languages list | 698 // Getting the accepted languages list |
| 760 std::string accept_langs_str = prefs->GetString(prefs::kAcceptLanguages); | 699 std::string accept_langs_str = prefs->GetString(prefs::kAcceptLanguages); |
| 761 | 700 |
| 762 std::vector<std::string> accept_langs_list; | 701 std::vector<std::string> accept_langs_list; |
| 763 base::SplitString(accept_langs_str, ',', &accept_langs_list); | 702 base::SplitString(accept_langs_str, ',', &accept_langs_list); |
| 764 | 703 |
| 765 // Will translate to the first supported language on the Accepted Language | 704 // Will translate to the first supported language on the Accepted Language |
| 766 // list or not at all if no such candidate exists | 705 // list or not at all if no such candidate exists |
| 767 std::vector<std::string>::iterator iter; | 706 std::vector<std::string>::iterator iter; |
| 768 for (iter = accept_langs_list.begin(); | 707 for (iter = accept_langs_list.begin(); |
| 769 iter != accept_langs_list.end(); ++iter) { | 708 iter != accept_langs_list.end(); ++iter) { |
| 770 std::string lang_code = GetLanguageCode(*iter); | 709 std::string lang_code = TranslateDownloadManager::GetLanguageCode(*iter); |
| 771 if (IsSupportedLanguage(lang_code)) | 710 if (TranslateDownloadManager::IsSupportedLanguage(lang_code)) |
| 772 return lang_code; | 711 return lang_code; |
| 773 } | 712 } |
| 774 return std::string(); | 713 return std::string(); |
| 775 } | 714 } |
| 776 | 715 |
| 777 // static | 716 // static |
| 778 std::string TranslateManager::GetAutoTargetLanguage( | 717 std::string TranslateManager::GetAutoTargetLanguage( |
| 779 const std::string& original_language, | 718 const std::string& original_language, |
| 780 PrefService* prefs) { | 719 PrefService* prefs) { |
| 781 std::string auto_target_lang; | 720 std::string auto_target_lang; |
| 782 if (TranslatePrefs::ShouldAutoTranslate(prefs, original_language, | 721 if (TranslatePrefs::ShouldAutoTranslate(prefs, original_language, |
| 783 &auto_target_lang)) { | 722 &auto_target_lang)) { |
| 784 // We need to confirm that the saved target language is still supported. | 723 // We need to confirm that the saved target language is still supported. |
| 785 // Also, GetLanguageCode will take care of removing country code if any. | 724 // Also, GetLanguageCode will take care of removing country code if any. |
| 786 auto_target_lang = GetLanguageCode(auto_target_lang); | 725 auto_target_lang = |
| 787 if (IsSupportedLanguage(auto_target_lang)) | 726 TranslateDownloadManager::GetLanguageCode(auto_target_lang); |
| 727 if (TranslateDownloadManager::IsSupportedLanguage(auto_target_lang)) |
| 788 return auto_target_lang; | 728 return auto_target_lang; |
| 789 } | 729 } |
| 790 return std::string(); | 730 return std::string(); |
| 791 } | 731 } |
| 792 | 732 |
| 793 // static | 733 // static |
| 794 bool TranslateManager::IsTranslateBubbleEnabled() { | 734 bool TranslateManager::IsTranslateBubbleEnabled() { |
| 795 #if defined(USE_AURA) | 735 #if defined(USE_AURA) |
| 796 return !use_infobar_; | 736 return !use_infobar_; |
| 797 #elif defined(OS_MACOSX) | 737 #elif defined(OS_MACOSX) |
| (...skipping 19 matching lines...) Expand all Loading... |
| 817 // so we are more aggressive about showing the shortcut to never translate. | 757 // so we are more aggressive about showing the shortcut to never translate. |
| 818 #if defined(OS_ANDROID) | 758 #if defined(OS_ANDROID) |
| 819 config.never_translate_min_count = 1; | 759 config.never_translate_min_count = 1; |
| 820 #else | 760 #else |
| 821 config.never_translate_min_count = 3; | 761 config.never_translate_min_count = 3; |
| 822 #endif // defined(OS_ANDROID) | 762 #endif // defined(OS_ANDROID) |
| 823 | 763 |
| 824 config.always_translate_min_count = 3; | 764 config.always_translate_min_count = 3; |
| 825 return config; | 765 return config; |
| 826 } | 766 } |
| OLD | NEW |