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

Unified Diff: ios/web_view/internal/translate/cwv_translation_controller.mm

Issue 2872083003: Added translation policy API. (Closed)
Patch Set: updated 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 side-by-side diff with in-line comments
Download patch
Index: ios/web_view/internal/translate/cwv_translation_controller.mm
diff --git a/ios/web_view/internal/translate/cwv_translation_controller.mm b/ios/web_view/internal/translate/cwv_translation_controller.mm
index f38e1ee039feaaa02209a22f33ead50864e00da1..e15eca71096444b8ca902b956ce4405c3b16267d 100644
--- a/ios/web_view/internal/translate/cwv_translation_controller.mm
+++ b/ios/web_view/internal/translate/cwv_translation_controller.mm
@@ -8,12 +8,14 @@
#include "base/memory/ptr_util.h"
#include "base/strings/string16.h"
+#include "base/strings/sys_string_conversions.h"
#include "components/translate/core/browser/translate_manager.h"
#include "components/translate/core/browser/translate_ui_delegate.h"
#import "ios/web_view/internal/translate/cwv_language_detection_result_internal.h"
#import "ios/web_view/internal/translate/cwv_translation_language_internal.h"
#import "ios/web_view/internal/translate/web_view_translate_client.h"
#import "ios/web_view/public/cwv_translation_controller_delegate.h"
+#import "ios/web_view/public/cwv_translation_policy.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
@@ -140,7 +142,10 @@ const NSInteger CWVTranslationErrorScriptLoadError =
- (void)translatePageFromLanguage:(CWVTranslationLanguage*)sourceLanguage
toLanguage:(CWVTranslationLanguage*)targetLanguage {
- // TODO(706289): Use the passed parameters.
+ _translateUIDelegate->UpdateOriginalLanguage(
+ base::SysNSStringToUTF8(sourceLanguage.languageCode));
+ _translateUIDelegate->UpdateTargetLanguage(
+ base::SysNSStringToUTF8(targetLanguage.languageCode));
_translateUIDelegate->Translate();
}
@@ -148,6 +153,86 @@ const NSInteger CWVTranslationErrorScriptLoadError =
_translateUIDelegate->RevertTranslation();
}
+- (void)setTranslationPolicy:(CWVTranslationPolicy*)policy
+ forPageLanguage:(CWVTranslationLanguage*)pageLanguage {
+ std::string languageCode = base::SysNSStringToUTF8(pageLanguage.languageCode);
+ switch (policy.type) {
+ case CWVTranslationPolicyAsk: {
+ _translateUIDelegate->SetLanguageBlocked(false, languageCode);
+ std::string autoTargetLanguageCode =
+ _translateUIDelegate->GetAlwaysTranslateToLanguage(languageCode);
+ _translateUIDelegate->SetAlwaysTranslate(false, languageCode,
+ autoTargetLanguageCode);
+ break;
+ }
+ case CWVTranslationPolicyNever: {
+ _translateUIDelegate->SetLanguageBlocked(true, languageCode);
+ break;
+ }
+ case CWVTranslationPolicyAuto: {
+ _translateUIDelegate->SetAlwaysTranslate(
+ true, languageCode,
+ base::SysNSStringToUTF8(policy.language.languageCode));
+ break;
+ }
+ }
+}
+
+- (CWVTranslationPolicy*)translationPolicyForPageLanguage:
+ (CWVTranslationLanguage*)pageLanguage {
+ std::string languageCode = base::SysNSStringToUTF8(pageLanguage.languageCode);
+ std::string autoTargetLanguageCode =
Eugene But (OOO till 7-30) 2017/05/11 15:48:59 Do we need this variable? This will not be used if
jzw1 2017/05/12 03:46:46 Done.
+ _translateUIDelegate->GetAlwaysTranslateToLanguage(languageCode);
+ bool isLanguageBlocked =
michaeldo 2017/05/11 23:51:33 use BOOL for obj-C
Eugene But (OOO till 7-30) 2017/05/12 00:31:40 Why? IsLanguageBlocked return bool, not BOOL
jzw1 2017/05/12 03:46:46 yeah I think bool is ok here.
+ _translateUIDelegate->IsLanguageBlocked(languageCode);
+ if (isLanguageBlocked) {
+ return [CWVTranslationPolicy translationPolicyNever];
michaeldo 2017/05/11 23:51:33 I think the if/else can be cleaned up by early ret
jzw1 2017/05/12 03:46:46 Done.
+ } else if (!autoTargetLanguageCode.empty()) {
+ size_t autoTargetLanguageIndex =
+ _translateUIDelegate->GetLanguageIndex(autoTargetLanguageCode);
+ base::string16 autoTargetLanguageName =
+ _translateUIDelegate->GetLanguageNameAt(autoTargetLanguageIndex);
michaeldo 2017/05/11 23:51:33 Can the language code be passed instead of the ind
jzw1 2017/05/12 03:46:46 I believe it just doesn't want you to update thing
michaeldo 2017/05/12 15:29:08 I think you're right, but it still would keep the
jzw1 2017/05/15 03:28:44 that's fair. I'll just make it GetLanguageNameForL
+ CWVTranslationLanguage* targetLanguage = [[CWVTranslationLanguage alloc]
+ initWithLanguageCode:autoTargetLanguageCode
+ languageName:autoTargetLanguageName];
+ return [CWVTranslationPolicy
+ translationPolicyAutoTranslateToLanguage:targetLanguage];
+ } else {
+ return [CWVTranslationPolicy translationPolicyAsk];
+ }
+}
+
+- (void)setTranslationPolicy:(CWVTranslationPolicy*)policy
+ forPageHost:(NSString*)pageHost {
+ switch (policy.type) {
+ case CWVTranslationPolicyAsk: {
+ _translateUIDelegate->SetSiteBlacklist(false,
+ base::SysNSStringToUTF8(pageHost));
+ break;
+ }
+ case CWVTranslationPolicyNever: {
+ _translateUIDelegate->SetSiteBlacklist(true,
+ base::SysNSStringToUTF8(pageHost));
+ break;
+ }
+ case CWVTranslationPolicyAuto: {
+ // TODO(crbug.com/706289): Support auto translation policies for websites.
+ NOTREACHED();
+ break;
+ }
+ }
+}
+
+- (CWVTranslationPolicy*)translationPolicyForPageHost:(NSString*)pageHost {
+ bool IsSiteBlackListed = _translateUIDelegate->IsSiteBlacklisted(
michaeldo 2017/05/11 23:51:33 s/bool IsSiteBlackListed/BOOL isSiteBlackListed
Eugene But (OOO till 7-30) 2017/05/12 00:31:39 ditto
jzw1 2017/05/12 03:46:46 Done.
+ base::SysNSStringToUTF8(pageHost));
+ if (IsSiteBlackListed) {
+ return [CWVTranslationPolicy translationPolicyNever];
+ } else {
Eugene But (OOO till 7-30) 2017/05/11 15:48:59 From Chromium Style Guide: "Don't use else after r
jzw1 2017/05/12 03:46:46 Done.
+ return [CWVTranslationPolicy translationPolicyAsk];
+ }
+}
+
#pragma mark - Private Methods
- (NSArray<CWVTranslationLanguage*>*)supportedLanguages {

Powered by Google App Engine
This is Rietveld 408576698