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

Side by Side Diff: ios/web_view/internal/translate/cwv_translation_controller.mm

Issue 2872083003: Added translation policy API. (Closed)
Patch Set: addressed some final comments Created 3 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
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 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 #import "ios/web_view/internal/translate/cwv_translation_controller_internal.h" 5 #import "ios/web_view/internal/translate/cwv_translation_controller_internal.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/memory/ptr_util.h" 9 #include "base/memory/ptr_util.h"
10 #include "base/strings/string16.h" 10 #include "base/strings/string16.h"
11 #include "base/strings/sys_string_conversions.h"
11 #include "components/translate/core/browser/translate_manager.h" 12 #include "components/translate/core/browser/translate_manager.h"
12 #include "components/translate/core/browser/translate_ui_delegate.h" 13 #include "components/translate/core/browser/translate_ui_delegate.h"
13 #import "ios/web_view/internal/translate/cwv_language_detection_result_internal. h" 14 #import "ios/web_view/internal/translate/cwv_language_detection_result_internal. h"
14 #import "ios/web_view/internal/translate/cwv_translation_language_internal.h" 15 #import "ios/web_view/internal/translate/cwv_translation_language_internal.h"
15 #import "ios/web_view/internal/translate/web_view_translate_client.h" 16 #import "ios/web_view/internal/translate/web_view_translate_client.h"
16 #import "ios/web_view/public/cwv_translation_controller_delegate.h" 17 #import "ios/web_view/public/cwv_translation_controller_delegate.h"
18 #import "ios/web_view/public/cwv_translation_policy.h"
17 19
18 #if !defined(__has_feature) || !__has_feature(objc_arc) 20 #if !defined(__has_feature) || !__has_feature(objc_arc)
19 #error "This file requires ARC support." 21 #error "This file requires ARC support."
20 #endif 22 #endif
21 23
22 NSErrorDomain const CWVTranslationErrorDomain = 24 NSErrorDomain const CWVTranslationErrorDomain =
23 @"org.chromium.chromewebview.TranslationErrorDomain"; 25 @"org.chromium.chromewebview.TranslationErrorDomain";
24 26
25 const NSInteger CWVTranslationErrorNetwork = 27 const NSInteger CWVTranslationErrorNetwork =
26 translate::TranslateErrors::NETWORK; 28 translate::TranslateErrors::NETWORK;
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 break; 135 break;
134 case translate::TRANSLATE_STEP_TRANSLATE_ERROR: 136 case translate::TRANSLATE_STEP_TRANSLATE_ERROR:
135 break; 137 break;
136 } 138 }
137 } 139 }
138 140
139 #pragma mark - Public Methods 141 #pragma mark - Public Methods
140 142
141 - (void)translatePageFromLanguage:(CWVTranslationLanguage*)sourceLanguage 143 - (void)translatePageFromLanguage:(CWVTranslationLanguage*)sourceLanguage
142 toLanguage:(CWVTranslationLanguage*)targetLanguage { 144 toLanguage:(CWVTranslationLanguage*)targetLanguage {
143 // TODO(706289): Use the passed parameters. 145 _translateUIDelegate->UpdateOriginalLanguage(
146 base::SysNSStringToUTF8(sourceLanguage.languageCode));
147 _translateUIDelegate->UpdateTargetLanguage(
148 base::SysNSStringToUTF8(targetLanguage.languageCode));
144 _translateUIDelegate->Translate(); 149 _translateUIDelegate->Translate();
145 } 150 }
146 151
147 - (void)revertTranslation { 152 - (void)revertTranslation {
148 _translateUIDelegate->RevertTranslation(); 153 _translateUIDelegate->RevertTranslation();
149 } 154 }
150 155
156 - (void)setTranslationPolicy:(CWVTranslationPolicy*)policy
157 forPageLanguage:(CWVTranslationLanguage*)pageLanguage {
158 std::string languageCode = base::SysNSStringToUTF8(pageLanguage.languageCode);
159 switch (policy.type) {
160 case CWVTranslationPolicyAsk: {
161 _translateUIDelegate->SetLanguageBlocked(false, languageCode);
162 std::string autoTargetLanguageCode =
163 _translateUIDelegate->GetAlwaysTranslateToLanguage(languageCode);
164 _translateUIDelegate->SetAlwaysTranslate(false, languageCode,
sdefresne 2017/05/17 09:47:30 The documentation says that target_language is ign
jzw1 2017/05/19 02:40:58 Done.
165 autoTargetLanguageCode);
166 break;
167 }
168 case CWVTranslationPolicyNever: {
169 _translateUIDelegate->SetLanguageBlocked(true, languageCode);
170 break;
171 }
172 case CWVTranslationPolicyAuto: {
173 _translateUIDelegate->SetAlwaysTranslate(
174 true, languageCode,
175 base::SysNSStringToUTF8(policy.language.languageCode));
176 break;
177 }
178 }
179 }
180
181 - (CWVTranslationPolicy*)translationPolicyForPageLanguage:
182 (CWVTranslationLanguage*)pageLanguage {
183 std::string languageCode = base::SysNSStringToUTF8(pageLanguage.languageCode);
184 bool isLanguageBlocked =
185 _translateUIDelegate->IsLanguageBlocked(languageCode);
186 if (isLanguageBlocked) {
187 return [CWVTranslationPolicy translationPolicyNever];
188 }
189
190 std::string autoTargetLanguageCode =
191 _translateUIDelegate->GetAlwaysTranslateToLanguage(languageCode);
192 if (autoTargetLanguageCode.empty()) {
193 return [CWVTranslationPolicy translationPolicyAsk];
194 }
195
196 base::string16 autoTargetLanguageName =
197 _translateUIDelegate->GetLanguageNameForLanguageCode(
198 autoTargetLanguageCode);
199 CWVTranslationLanguage* targetLanguage = [[CWVTranslationLanguage alloc]
200 initWithLanguageCode:autoTargetLanguageCode
201 languageName:autoTargetLanguageName];
202 return [CWVTranslationPolicy
203 translationPolicyAutoTranslateToLanguage:targetLanguage];
204 }
205
206 - (void)setTranslationPolicy:(CWVTranslationPolicy*)policy
207 forPageHost:(NSString*)pageHost {
208 DCHECK(pageHost.length > 0);
209 switch (policy.type) {
210 case CWVTranslationPolicyAsk: {
211 _translateUIDelegate->SetSiteBlacklist(false,
212 base::SysNSStringToUTF8(pageHost));
213 break;
214 }
215 case CWVTranslationPolicyNever: {
216 _translateUIDelegate->SetSiteBlacklist(true,
217 base::SysNSStringToUTF8(pageHost));
218 break;
219 }
220 case CWVTranslationPolicyAuto: {
221 // TODO(crbug.com/706289): Support auto translation policies for websites.
222 NOTREACHED();
223 break;
224 }
225 }
226 }
227
228 - (CWVTranslationPolicy*)translationPolicyForPageHost:(NSString*)pageHost {
229 bool isSiteBlackListed = _translateUIDelegate->IsSiteBlacklisted(
230 base::SysNSStringToUTF8(pageHost));
231 if (isSiteBlackListed) {
232 return [CWVTranslationPolicy translationPolicyNever];
233 }
234 return [CWVTranslationPolicy translationPolicyAsk];
235 }
236
151 #pragma mark - Private Methods 237 #pragma mark - Private Methods
152 238
153 - (NSArray<CWVTranslationLanguage*>*)supportedLanguages { 239 - (NSArray<CWVTranslationLanguage*>*)supportedLanguages {
154 NSMutableArray* supportedLanguages = [NSMutableArray array]; 240 NSMutableArray* supportedLanguages = [NSMutableArray array];
155 for (size_t i = 0; i < _translateUIDelegate->GetNumberOfLanguages(); i++) { 241 for (size_t i = 0; i < _translateUIDelegate->GetNumberOfLanguages(); i++) {
156 CWVTranslationLanguage* language = [self languageAtIndex:i]; 242 CWVTranslationLanguage* language = [self languageAtIndex:i];
157 [supportedLanguages addObject:language]; 243 [supportedLanguages addObject:language];
158 } 244 }
159 245
160 return [supportedLanguages copy]; 246 return [supportedLanguages copy];
161 } 247 }
162 248
163 - (CWVTranslationLanguage*)languageAtIndex:(size_t)index { 249 - (CWVTranslationLanguage*)languageAtIndex:(size_t)index {
164 std::string languageCode = _translateUIDelegate->GetLanguageCodeAt(index); 250 std::string languageCode = _translateUIDelegate->GetLanguageCodeAt(index);
165 base::string16 languageName = _translateUIDelegate->GetLanguageNameAt(index); 251 base::string16 languageName = _translateUIDelegate->GetLanguageNameAt(index);
166 return [[CWVTranslationLanguage alloc] initWithLanguageCode:languageCode 252 return [[CWVTranslationLanguage alloc] initWithLanguageCode:languageCode
167 languageName:languageName]; 253 languageName:languageName];
168 } 254 }
169 255
170 @end 256 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698