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 { |