| 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" |
| (...skipping 415 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 426 return; | 426 return; |
| 427 } | 427 } |
| 428 | 428 |
| 429 TranslateBrowserMetrics::ReportInitiationStatus( | 429 TranslateBrowserMetrics::ReportInitiationStatus( |
| 430 TranslateBrowserMetrics::INITIATION_STATUS_SHOW_INFOBAR); | 430 TranslateBrowserMetrics::INITIATION_STATUS_SHOW_INFOBAR); |
| 431 | 431 |
| 432 if (IsEnabledTranslateNewUX()) { | 432 if (IsEnabledTranslateNewUX()) { |
| 433 language_state.SetTranslateEnabled(true); | 433 language_state.SetTranslateEnabled(true); |
| 434 if (language_state.HasLanguageChanged()) { | 434 if (language_state.HasLanguageChanged()) { |
| 435 ShowBubble(web_contents, | 435 ShowBubble(web_contents, |
| 436 TranslateBubbleModel::VIEW_STATE_BEFORE_TRANSLATE); | 436 TranslateBubbleModel::VIEW_STATE_BEFORE_TRANSLATE, |
| 437 TranslateErrors::NONE); |
| 437 } | 438 } |
| 438 } else { | 439 } else { |
| 439 // Prompts the user if he/she wants the page translated. | 440 // Prompts the user if he/she wants the page translated. |
| 440 TranslateInfoBarDelegate::Create( | 441 TranslateInfoBarDelegate::Create( |
| 441 false, InfoBarService::FromWebContents(web_contents), | 442 false, InfoBarService::FromWebContents(web_contents), |
| 442 TranslateInfoBarDelegate::BEFORE_TRANSLATE, language_code, target_lang, | 443 TranslateInfoBarDelegate::BEFORE_TRANSLATE, language_code, target_lang, |
| 443 TranslateErrors::NONE, profile->GetPrefs(), ShortcutConfig()); | 444 TranslateErrors::NONE, profile->GetPrefs(), ShortcutConfig()); |
| 444 } | 445 } |
| 445 } | 446 } |
| 446 | 447 |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 487 | 488 |
| 488 // Translation can be kicked by context menu against unsupported languages. | 489 // Translation can be kicked by context menu against unsupported languages. |
| 489 // Unsupported language strings should be replaced with | 490 // Unsupported language strings should be replaced with |
| 490 // kUnknownLanguageCode in order to send a translation request with enabling | 491 // kUnknownLanguageCode in order to send a translation request with enabling |
| 491 // server side auto language detection. | 492 // server side auto language detection. |
| 492 std::string source_lang(original_source_lang); | 493 std::string source_lang(original_source_lang); |
| 493 if (!IsSupportedLanguage(source_lang)) | 494 if (!IsSupportedLanguage(source_lang)) |
| 494 source_lang = std::string(translate::kUnknownLanguageCode); | 495 source_lang = std::string(translate::kUnknownLanguageCode); |
| 495 | 496 |
| 496 if (IsEnabledTranslateNewUX()) { | 497 if (IsEnabledTranslateNewUX()) { |
| 497 ShowBubble(web_contents, TranslateBubbleModel::VIEW_STATE_TRANSLATING); | 498 ShowBubble(web_contents, TranslateBubbleModel::VIEW_STATE_TRANSLATING, |
| 499 TranslateErrors::NONE); |
| 498 } else { | 500 } else { |
| 499 Profile* profile = | 501 Profile* profile = |
| 500 Profile::FromBrowserContext(web_contents->GetBrowserContext()); | 502 Profile::FromBrowserContext(web_contents->GetBrowserContext()); |
| 501 TranslateInfoBarDelegate::Create( | 503 TranslateInfoBarDelegate::Create( |
| 502 true, InfoBarService::FromWebContents(web_contents), | 504 true, InfoBarService::FromWebContents(web_contents), |
| 503 TranslateInfoBarDelegate::TRANSLATING, source_lang, target_lang, | 505 TranslateInfoBarDelegate::TRANSLATING, source_lang, target_lang, |
| 504 TranslateErrors::NONE, profile->GetPrefs(), ShortcutConfig()); | 506 TranslateErrors::NONE, profile->GetPrefs(), ShortcutConfig()); |
| 505 } | 507 } |
| 506 | 508 |
| 507 DCHECK(script_.get() != NULL); | 509 DCHECK(script_.get() != NULL); |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 612 details->source_language != translate::kUnknownLanguageCode && | 614 details->source_language != translate::kUnknownLanguageCode && |
| 613 !IsSupportedLanguage(details->source_language)) { | 615 !IsSupportedLanguage(details->source_language)) { |
| 614 details->error_type = TranslateErrors::UNSUPPORTED_LANGUAGE; | 616 details->error_type = TranslateErrors::UNSUPPORTED_LANGUAGE; |
| 615 } | 617 } |
| 616 | 618 |
| 617 if (IsEnabledTranslateNewUX()) { | 619 if (IsEnabledTranslateNewUX()) { |
| 618 TranslateBubbleModel::ViewState view_state = | 620 TranslateBubbleModel::ViewState view_state = |
| 619 (details->error_type == TranslateErrors::NONE) ? | 621 (details->error_type == TranslateErrors::NONE) ? |
| 620 TranslateBubbleModel::VIEW_STATE_AFTER_TRANSLATE : | 622 TranslateBubbleModel::VIEW_STATE_AFTER_TRANSLATE : |
| 621 TranslateBubbleModel::VIEW_STATE_ERROR; | 623 TranslateBubbleModel::VIEW_STATE_ERROR; |
| 622 ShowBubble(web_contents, view_state); | 624 ShowBubble(web_contents, view_state, details->error_type); |
| 623 } else { | 625 } else { |
| 624 PrefService* prefs = Profile::FromBrowserContext( | 626 PrefService* prefs = Profile::FromBrowserContext( |
| 625 web_contents->GetBrowserContext())->GetPrefs(); | 627 web_contents->GetBrowserContext())->GetPrefs(); |
| 626 TranslateInfoBarDelegate::Create( | 628 TranslateInfoBarDelegate::Create( |
| 627 true, InfoBarService::FromWebContents(web_contents), | 629 true, InfoBarService::FromWebContents(web_contents), |
| 628 (details->error_type == TranslateErrors::NONE) ? | 630 (details->error_type == TranslateErrors::NONE) ? |
| 629 TranslateInfoBarDelegate::AFTER_TRANSLATE : | 631 TranslateInfoBarDelegate::AFTER_TRANSLATE : |
| 630 TranslateInfoBarDelegate::TRANSLATION_ERROR, | 632 TranslateInfoBarDelegate::TRANSLATION_ERROR, |
| 631 details->source_language, details->target_language, details->error_type, | 633 details->source_language, details->target_language, details->error_type, |
| 632 prefs, ShortcutConfig()); | 634 prefs, ShortcutConfig()); |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 682 continue; | 684 continue; |
| 683 } | 685 } |
| 684 | 686 |
| 685 if (success) { | 687 if (success) { |
| 686 // Translate the page. | 688 // Translate the page. |
| 687 const std::string& translate_script = script_->data(); | 689 const std::string& translate_script = script_->data(); |
| 688 DoTranslatePage(web_contents, translate_script, | 690 DoTranslatePage(web_contents, translate_script, |
| 689 request.source_lang, request.target_lang); | 691 request.source_lang, request.target_lang); |
| 690 } else { | 692 } else { |
| 691 if (IsEnabledTranslateNewUX()) { | 693 if (IsEnabledTranslateNewUX()) { |
| 692 ShowBubble(web_contents, TranslateBubbleModel::VIEW_STATE_ERROR); | 694 ShowBubble(web_contents, TranslateBubbleModel::VIEW_STATE_ERROR, |
| 695 TranslateErrors::NETWORK); |
| 693 } else { | 696 } else { |
| 694 Profile* profile = | 697 Profile* profile = |
| 695 Profile::FromBrowserContext(web_contents->GetBrowserContext()); | 698 Profile::FromBrowserContext(web_contents->GetBrowserContext()); |
| 696 TranslateInfoBarDelegate::Create( | 699 TranslateInfoBarDelegate::Create( |
| 697 true, InfoBarService::FromWebContents(web_contents), | 700 true, InfoBarService::FromWebContents(web_contents), |
| 698 TranslateInfoBarDelegate::TRANSLATION_ERROR, request.source_lang, | 701 TranslateInfoBarDelegate::TRANSLATION_ERROR, request.source_lang, |
| 699 request.target_lang, TranslateErrors::NETWORK, profile->GetPrefs(), | 702 request.target_lang, TranslateErrors::NETWORK, profile->GetPrefs(), |
| 700 ShortcutConfig()); | 703 ShortcutConfig()); |
| 701 } | 704 } |
| 702 | 705 |
| 703 if (!web_contents->GetBrowserContext()->IsOffTheRecord()) { | 706 if (!web_contents->GetBrowserContext()->IsOffTheRecord()) { |
| 704 TranslateErrorDetails error_details; | 707 TranslateErrorDetails error_details; |
| 705 error_details.time = base::Time::Now(); | 708 error_details.time = base::Time::Now(); |
| 706 error_details.url = entry->GetURL(); | 709 error_details.url = entry->GetURL(); |
| 707 error_details.error = TranslateErrors::NETWORK; | 710 error_details.error = TranslateErrors::NETWORK; |
| 708 NotifyTranslateError(error_details); | 711 NotifyTranslateError(error_details); |
| 709 } | 712 } |
| 710 } | 713 } |
| 711 } | 714 } |
| 712 pending_requests_.clear(); | 715 pending_requests_.clear(); |
| 713 } | 716 } |
| 714 | 717 |
| 715 void TranslateManager::ShowBubble(WebContents* web_contents, | 718 void TranslateManager::ShowBubble(WebContents* web_contents, |
| 716 TranslateBubbleModel::ViewState view_state) { | 719 TranslateBubbleModel::ViewState view_state, |
| 720 TranslateErrors::Type error_type) { |
| 717 // The bubble is implemented only on the desktop platforms. | 721 // The bubble is implemented only on the desktop platforms. |
| 718 #if !defined(OS_ANDROID) && !defined(OS_IOS) | 722 #if !defined(OS_ANDROID) && !defined(OS_IOS) |
| 719 Browser* browser = chrome::FindBrowserWithWebContents(web_contents); | 723 Browser* browser = chrome::FindBrowserWithWebContents(web_contents); |
| 720 | 724 |
| 721 // |browser| might be NULL when testing. In this case, Show(...) should be | 725 // |browser| might be NULL when testing. In this case, Show(...) should be |
| 722 // called because the implementation for testing is used. | 726 // called because the implementation for testing is used. |
| 723 if (!browser) { | 727 if (!browser) { |
| 724 TranslateBubbleFactory::Show(NULL, web_contents, view_state); | 728 TranslateBubbleFactory::Show(NULL, web_contents, view_state, error_type); |
| 725 return; | 729 return; |
| 726 } | 730 } |
| 727 | 731 |
| 728 if (web_contents != browser->tab_strip_model()->GetActiveWebContents()) | 732 if (web_contents != browser->tab_strip_model()->GetActiveWebContents()) |
| 729 return; | 733 return; |
| 730 | 734 |
| 731 BrowserWindow* window = browser->window(); | 735 BrowserWindow* window = browser->window(); |
| 732 if (window && !window->IsActive()) | 736 if (window && !window->IsActive()) |
| 733 return; | 737 return; |
| 734 | 738 |
| 735 TranslateBubbleFactory::Show(window, web_contents, view_state); | 739 TranslateBubbleFactory::Show(window, web_contents, view_state, error_type); |
| 736 #else | 740 #else |
| 737 NOTREACHED(); | 741 NOTREACHED(); |
| 738 #endif | 742 #endif |
| 739 } | 743 } |
| 740 | 744 |
| 741 // static | 745 // static |
| 742 std::string TranslateManager::GetTargetLanguage(PrefService* prefs) { | 746 std::string TranslateManager::GetTargetLanguage(PrefService* prefs) { |
| 743 std::string ui_lang = | 747 std::string ui_lang = |
| 744 TranslatePrefs::ConvertLangCodeForTranslation( | 748 TranslatePrefs::ConvertLangCodeForTranslation( |
| 745 GetLanguageCode(g_browser_process->GetApplicationLocale())); | 749 GetLanguageCode(g_browser_process->GetApplicationLocale())); |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 789 // so we are more aggressive about showing the shortcut to never translate. | 793 // so we are more aggressive about showing the shortcut to never translate. |
| 790 #if defined(OS_ANDROID) | 794 #if defined(OS_ANDROID) |
| 791 config.never_translate_min_count = 1; | 795 config.never_translate_min_count = 1; |
| 792 #else | 796 #else |
| 793 config.never_translate_min_count = 3; | 797 config.never_translate_min_count = 3; |
| 794 #endif // defined(OS_ANDROID) | 798 #endif // defined(OS_ANDROID) |
| 795 | 799 |
| 796 config.always_translate_min_count = 3; | 800 config.always_translate_min_count = 3; |
| 797 return config; | 801 return config; |
| 798 } | 802 } |
| OLD | NEW |