Chromium Code Reviews| 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..2d664979783b829b2457c16c2df93c1fea8436a5 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, |
| + 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()) { |
|
michaeldo
2017/05/12 15:29:09
I also recommend removing the ! from this if and r
jzw1
2017/05/15 02:43:29
Done.
|
| + size_t autoTargetLanguageIndex = |
| + _translateUIDelegate->GetLanguageIndex(autoTargetLanguageCode); |
| + base::string16 autoTargetLanguageName = |
| + _translateUIDelegate->GetLanguageNameAt(autoTargetLanguageIndex); |
| + CWVTranslationLanguage* targetLanguage = [[CWVTranslationLanguage alloc] |
| + initWithLanguageCode:autoTargetLanguageCode |
| + languageName:autoTargetLanguageName]; |
| + return [CWVTranslationPolicy |
| + translationPolicyAutoTranslateToLanguage:targetLanguage]; |
| + } |
| + |
| + 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/12 15:29:09
sorry about that, bool does seem fine here, but va
jzw1
2017/05/15 02:43:28
Ah nice catch. Thakns.
|
| + base::SysNSStringToUTF8(pageHost)); |
| + if (IsSiteBlackListed) { |
| + return [CWVTranslationPolicy translationPolicyNever]; |
| + } |
| + return [CWVTranslationPolicy translationPolicyAsk]; |
| +} |
| + |
| #pragma mark - Private Methods |
| - (NSArray<CWVTranslationLanguage*>*)supportedLanguages { |