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

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

Issue 2872083003: Added translation policy API. (Closed)
Patch Set: Addressed ichikawa 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,
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 std::string autoTargetLanguageCode =
185 _translateUIDelegate->GetAlwaysTranslateToLanguage(languageCode);
186 bool isLanguageBlocked =
187 _translateUIDelegate->IsLanguageBlocked(languageCode);
188 if (isLanguageBlocked) {
189 return [CWVTranslationPolicy translationPolicyNever];
190 } else if (!autoTargetLanguageCode.empty()) {
191 size_t autoTargetLanguageIndex =
192 _translateUIDelegate->GetLanguageIndex(autoTargetLanguageCode);
193 base::string16 autoTargetLanguageName =
194 _translateUIDelegate->GetLanguageNameAt(autoTargetLanguageIndex);
195 CWVTranslationLanguage* targetLanguage = [[CWVTranslationLanguage alloc]
196 initWithLanguageCode:autoTargetLanguageCode
197 languageName:autoTargetLanguageName];
198 return [CWVTranslationPolicy
199 translationPolicyAutoTranslateToLanguage:targetLanguage];
200 } else {
201 return [CWVTranslationPolicy translationPolicyAsk];
202 }
203 }
204
205 - (void)setTranslationPolicy:(CWVTranslationPolicy*)policy
206 forPageHost:(NSString*)pageHost {
207 switch (policy.type) {
208 case CWVTranslationPolicyAsk: {
209 _translateUIDelegate->SetSiteBlacklist(false,
210 base::SysNSStringToUTF8(pageHost));
211 break;
212 }
213 case CWVTranslationPolicyNever: {
214 _translateUIDelegate->SetSiteBlacklist(true,
215 base::SysNSStringToUTF8(pageHost));
216 break;
217 }
218 case CWVTranslationPolicyAuto: {
219 NOTREACHED();
220 // TODO(crbug.com/706289): Support auto translation policies for websites.
Hiroshi Ichikawa 2017/05/11 04:14:15 Nit: It may be better to put this comment before N
jzw1 2017/05/11 04:43:00 Done.
221 break;
222 }
223 }
224 }
225
226 - (CWVTranslationPolicy*)translationPolicyForPageHost:(NSString*)pageHost {
227 bool IsSiteBlackListed = _translateUIDelegate->IsSiteBlacklisted(
228 base::SysNSStringToUTF8(pageHost));
229 if (IsSiteBlackListed) {
230 return [CWVTranslationPolicy translationPolicyNever];
231 } else {
232 return [CWVTranslationPolicy translationPolicyAsk];
233 }
234 }
235
151 #pragma mark - Private Methods 236 #pragma mark - Private Methods
152 237
153 - (NSArray<CWVTranslationLanguage*>*)supportedLanguages { 238 - (NSArray<CWVTranslationLanguage*>*)supportedLanguages {
154 NSMutableArray* supportedLanguages = [NSMutableArray array]; 239 NSMutableArray* supportedLanguages = [NSMutableArray array];
155 for (size_t i = 0; i < _translateUIDelegate->GetNumberOfLanguages(); i++) { 240 for (size_t i = 0; i < _translateUIDelegate->GetNumberOfLanguages(); i++) {
156 CWVTranslationLanguage* language = [self languageAtIndex:i]; 241 CWVTranslationLanguage* language = [self languageAtIndex:i];
157 [supportedLanguages addObject:language]; 242 [supportedLanguages addObject:language];
158 } 243 }
159 244
160 return [supportedLanguages copy]; 245 return [supportedLanguages copy];
161 } 246 }
162 247
163 - (CWVTranslationLanguage*)languageAtIndex:(size_t)index { 248 - (CWVTranslationLanguage*)languageAtIndex:(size_t)index {
164 std::string languageCode = _translateUIDelegate->GetLanguageCodeAt(index); 249 std::string languageCode = _translateUIDelegate->GetLanguageCodeAt(index);
165 base::string16 languageName = _translateUIDelegate->GetLanguageNameAt(index); 250 base::string16 languageName = _translateUIDelegate->GetLanguageNameAt(index);
166 return [[CWVTranslationLanguage alloc] initWithLanguageCode:languageCode 251 return [[CWVTranslationLanguage alloc] initWithLanguageCode:languageCode
167 languageName:languageName]; 252 languageName:languageName];
168 } 253 }
169 254
170 @end 255 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698