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..339888c76fdb7a0b040002c5f1f4bfc7a18bb866 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,87 @@ 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, |
sdefresne
2017/05/17 09:47:30
The documentation says that target_language is ign
jzw1
2017/05/19 02:40:58
Done.
|
+ 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); |
+ bool isLanguageBlocked = |
+ _translateUIDelegate->IsLanguageBlocked(languageCode); |
+ if (isLanguageBlocked) { |
+ return [CWVTranslationPolicy translationPolicyNever]; |
+ } |
+ |
+ std::string autoTargetLanguageCode = |
+ _translateUIDelegate->GetAlwaysTranslateToLanguage(languageCode); |
+ if (autoTargetLanguageCode.empty()) { |
+ return [CWVTranslationPolicy translationPolicyAsk]; |
+ } |
+ |
+ base::string16 autoTargetLanguageName = |
+ _translateUIDelegate->GetLanguageNameForLanguageCode( |
+ autoTargetLanguageCode); |
+ CWVTranslationLanguage* targetLanguage = [[CWVTranslationLanguage alloc] |
+ initWithLanguageCode:autoTargetLanguageCode |
+ languageName:autoTargetLanguageName]; |
+ return [CWVTranslationPolicy |
+ translationPolicyAutoTranslateToLanguage:targetLanguage]; |
+} |
+ |
+- (void)setTranslationPolicy:(CWVTranslationPolicy*)policy |
+ forPageHost:(NSString*)pageHost { |
+ DCHECK(pageHost.length > 0); |
+ 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( |
+ base::SysNSStringToUTF8(pageHost)); |
+ if (isSiteBlackListed) { |
+ return [CWVTranslationPolicy translationPolicyNever]; |
+ } |
+ return [CWVTranslationPolicy translationPolicyAsk]; |
+} |
+ |
#pragma mark - Private Methods |
- (NSArray<CWVTranslationLanguage*>*)supportedLanguages { |