| 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 =
|
| + _translateUIDelegate->GetAlwaysTranslateToLanguage(languageCode);
|
| + bool isLanguageBlocked =
|
| + _translateUIDelegate->IsLanguageBlocked(languageCode);
|
| + if (isLanguageBlocked) {
|
| + return [CWVTranslationPolicy translationPolicyNever];
|
| + } else if (!autoTargetLanguageCode.empty()) {
|
| + size_t autoTargetLanguageIndex =
|
| + _translateUIDelegate->GetLanguageIndex(autoTargetLanguageCode);
|
| + base::string16 autoTargetLanguageName =
|
| + _translateUIDelegate->GetLanguageNameAt(autoTargetLanguageIndex);
|
| + 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(
|
| + base::SysNSStringToUTF8(pageHost));
|
| + if (IsSiteBlackListed) {
|
| + return [CWVTranslationPolicy translationPolicyNever];
|
| + } else {
|
| + return [CWVTranslationPolicy translationPolicyAsk];
|
| + }
|
| +}
|
| +
|
| #pragma mark - Private Methods
|
|
|
| - (NSArray<CWVTranslationLanguage*>*)supportedLanguages {
|
|
|