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

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

Issue 23708029: Translate: Refactoring: Create TranslateUIDelegate (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 7 years, 3 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
OLDNEW
(Empty)
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/translate/translate_ui_delegate.h"
6
7 #include "base/i18n/string_compare.h"
8 #include "base/metrics/histogram.h"
9 #include "chrome/browser/browser_process.h"
10 #include "chrome/browser/profiles/profile.h"
11 #include "chrome/browser/translate/translate_manager.h"
12 #include "chrome/browser/translate/translate_prefs.h"
13 #include "chrome/browser/translate/translate_tab_helper.h"
14 #include "content/public/browser/browser_context.h"
15 #include "content/public/browser/navigation_entry.h"
16 #include "content/public/browser/web_contents.h"
17 #include "third_party/icu/source/i18n/unicode/coll.h"
18 #include "ui/base/l10n/l10n_util.h"
19
20 namespace {
21
22 const char kDeclineTranslate[] = "Translate.DeclineTranslate";
23 const char kRevertTranslation[] = "Translate.RevertTranslation";
24 const char kPerformTranslate[] = "Translate.Translate";
25 const char kNeverTranslateLang[] = "Translate.NeverTranslateLang";
26 const char kNeverTranslateSite[] = "Translate.NeverTranslateSite";
27 const char kAlwaysTranslateLang[] = "Translate.AlwaysTranslateLang";
28
29 }
30
31 // static
32 const size_t TranslateUIDelegate::kNoIndex = static_cast<size_t>(-1);
33
34 TranslateUIDelegate::TranslateUIDelegate(content::WebContents* web_contents,
35 const std::string& original_language,
36 const std::string& target_language)
37 : web_contents_(web_contents),
38 original_language_index_(kNoIndex),
39 initial_original_language_index_(kNoIndex),
40 target_language_index_(kNoIndex) {
41 std::vector<std::string> language_codes;
Takashi Toyoshima 2013/09/10 09:33:16 wrong indent
hajimehoshi 2013/09/12 06:16:04 Done.
42 TranslateManager::GetSupportedLanguages(&language_codes);
43
44 // Preparing for the alphabetical order in the locale.
45 UErrorCode error = U_ZERO_ERROR;
46 std::string locale = g_browser_process->GetApplicationLocale();
47 icu::Locale loc(locale.c_str());
48 scoped_ptr<icu::Collator> collator(icu::Collator::createInstance(loc, error));
49 collator->setStrength(icu::Collator::PRIMARY);
50
51 languages_.reserve(language_codes.size());
52 for (std::vector<std::string>::const_iterator iter = language_codes.begin();
53 iter != language_codes.end(); ++iter) {
54 std::string language_code = *iter;
55
56 string16 language_name = l10n_util::GetDisplayNameForLocale(
57 language_code, g_browser_process->GetApplicationLocale(), true);
58 // Insert the language in languages_ in alphabetical order.
59 std::vector<LanguageNamePair>::iterator iter2;
60 for (iter2 = languages_.begin(); iter2 != languages_.end(); ++iter2) {
61 if (base::i18n::CompareString16WithCollator(collator.get(),
62 language_name, iter2->second) == UCOL_LESS) {
63 break;
64 }
65 }
66 languages_.insert(iter2, LanguageNamePair(language_code, language_name));
67 }
68 for (std::vector<LanguageNamePair>::const_iterator iter = languages_.begin();
69 iter != languages_.end(); ++iter) {
70 std::string language_code = iter->first;
71 if (language_code == original_language) {
72 original_language_index_ = iter - languages_.begin();
73 initial_original_language_index_ = original_language_index_;
74 }
75 if (language_code == target_language)
76 target_language_index_ = iter - languages_.begin();
77 }
78
79 Profile* profile =
80 Profile::FromBrowserContext(web_contents->GetBrowserContext());
81 prefs_.reset(new TranslatePrefs(profile->GetPrefs()));
Takashi Toyoshima 2013/09/10 09:33:16 Maybe we should write a comment at TranslateUIDele
hajimehoshi 2013/09/12 06:16:04 Added a comment to explain the life of this object
82 }
83
84 TranslateUIDelegate::~TranslateUIDelegate() {
85 }
86
87 void TranslateUIDelegate::Translate() {
88 if (!web_contents()->GetBrowserContext()->IsOffTheRecord()) {
89 prefs_->ResetTranslationDeniedCount(original_language_code());
90 prefs_->IncrementTranslationAcceptedCount(original_language_code());
91 }
92 TranslateManager::GetInstance()->TranslatePage(web_contents(),
93 original_language_code(),
94 target_language_code());
95
96 UMA_HISTOGRAM_BOOLEAN(kPerformTranslate, true);
97 }
98
99 void TranslateUIDelegate::RevertTranslation() {
100 TranslateManager::GetInstance()->RevertTranslation(web_contents());
101
102 UMA_HISTOGRAM_BOOLEAN(kRevertTranslation, true);
103 }
104
105 void TranslateUIDelegate::TranslationDeclined() {
106 if (!web_contents()->GetBrowserContext()->IsOffTheRecord()) {
107 prefs_->ResetTranslationAcceptedCount(original_language_code());
108 prefs_->IncrementTranslationDeniedCount(original_language_code());
109 }
110
111 // Remember that the user declined the translation so as to prevent showing a
112 // translate infobar for that page again. (TranslateManager initiates
113 // translations when getting a LANGUAGE_DETERMINED from the page, which
114 // happens when a load stops. That could happen multiple times, including
115 // after the user already declined the translation.)
116 TranslateTabHelper::FromWebContents(web_contents())->
117 language_state().set_translation_declined(true);
118
119 UMA_HISTOGRAM_BOOLEAN(kDeclineTranslate, true);
120 }
121
122 bool TranslateUIDelegate::IsLanguageBlocked() {
123 return prefs_->IsBlockedLanguage(original_language_code());
124 }
125
126 void TranslateUIDelegate::SetLanguageBlocked(bool value) {
127 if (value)
128 prefs_->BlockLanguage(original_language_code());
129 else
130 prefs_->UnblockLanguage(original_language_code());
131
132 UMA_HISTOGRAM_BOOLEAN(kNeverTranslateLang, true);
133 }
134
135 bool TranslateUIDelegate::IsSiteBlacklisted() {
136 std::string host = GetPageHost();
137 return !host.empty() && prefs_->IsSiteBlacklisted(host);
138 }
139
140 void TranslateUIDelegate::SetSiteBlacklist(bool value) {
141 std::string host = GetPageHost();
142 if (host.empty())
143 return;
144
145 if (value)
146 prefs_->BlacklistSite(host);
147 else
148 prefs_->RemoveSiteFromBlacklist(host);
149
150 UMA_HISTOGRAM_BOOLEAN(kNeverTranslateSite, true);
151 }
152
153 bool TranslateUIDelegate::ShouldAlwaysTranslate() {
154 return prefs_->IsLanguagePairWhitelisted(original_language_code(),
155 target_language_code());
156 }
157
158 void TranslateUIDelegate::SetAlwaysTranslate(bool value) {
159 const std::string& original_lang = original_language_code();
160 const std::string& target_lang = target_language_code();
161 if (value)
162 prefs_->WhitelistLanguagePair(original_lang, target_lang);
163 else
164 prefs_->RemoveLanguagePairFromWhitelist(original_lang, target_lang);
165
166 UMA_HISTOGRAM_BOOLEAN(kAlwaysTranslateLang, true);
167 }
168
169 std::string TranslateUIDelegate::GetPageHost() {
170 content::NavigationEntry* entry =
171 web_contents()->GetController().GetActiveEntry();
172 return entry ? entry->GetURL().HostNoBrackets() : std::string();
173 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698