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

Side by Side Diff: ios/web_view/internal/translate/cwv_translation_controller.mm

Issue 2839093002: Implemented new Translate API for purely Objective-C clients. (Closed)
Patch Set: Added some error handling. 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #import "ios/web_view/public/cwv_translation_controller.h"
6
7 #include <string>
8
9 #include "base/memory/ptr_util.h"
10 #include "base/strings/string16.h"
11 #include "components/translate/core/browser/translate_manager.h"
12 #include "components/translate/core/browser/translate_ui_delegate.h"
13 #import "ios/web_view/internal/translate/cwv_translation_controller_internal.h"
14 #import "ios/web_view/internal/translate/cwv_translation_language_internal.h"
15 #import "ios/web_view/internal/translate/web_view_translate_client.h"
16 #import "ios/web_view/public/cwv_language_detection_result.h"
17
18 #if !defined(__has_feature) || !__has_feature(objc_arc)
19 #error "This file requires ARC support."
20 #endif
21
22 @implementation CWVTranslationController {
23 ios_web_view::WebViewTranslateClient* _translateClient;
24 std::unique_ptr<translate::TranslateUIDelegate> _translateUIDelegate;
25 }
26
27 @synthesize delegate = _delegate;
28
29 - (instancetype)initWithWebViewTranslateClient:
30 (ios_web_view::WebViewTranslateClient*)translateClient {
31 self = [super init];
32 if (self) {
33 _translateClient = translateClient;
34 _translateClient->set_cwv_translation_controller(self);
35 }
36 return self;
37 }
38
39 - (void)updateTranslateStep:(translate::TranslateStep)step
40 sourceLanguage:(const std::string&)sourceLanguage
41 targetLanguage:(const std::string&)targetLanguage
42 errorType:(translate::TranslateErrors::Type)errorType
43 triggeredFromMenu:(bool)triggeredFromMenu {
44 translate::TranslateManager* manager =
45 _translateClient->GetTranslateManager();
46 _translateUIDelegate = base::MakeUnique<translate::TranslateUIDelegate>(
47 manager->GetWeakPtr(), sourceLanguage, targetLanguage);
48
49 CWVTranslationLanguage* source =
50 [self languageAtIndex:_translateUIDelegate->GetOriginalLanguageIndex()];
51 CWVTranslationLanguage* target =
52 [self languageAtIndex:_translateUIDelegate->GetTargetLanguageIndex()];
53 NSMutableArray* supportedLanguages = [NSMutableArray array];
54 for (size_t i = 0; i < _translateUIDelegate->GetNumberOfLanguages(); i++) {
55 CWVTranslationLanguage* language = [self languageAtIndex:i];
56 [supportedLanguages addObject:language];
57 }
58 CWVLanguageDetectionResult* languageDetectionResult =
59 [[CWVLanguageDetectionResult alloc]
60 initWithSourceLanguage:source
61 targetLanguage:target
62 supportedLanguages:[supportedLanguages copy]];
63
64 NSError* error;
65 if (errorType != translate::TranslateErrors::NONE) {
66 error = [NSError errorWithDomain:@"com.cwvwebview.translate.errors"
67 code:errorType
68 userInfo:nil];
69 }
70
71 switch (step) {
72 case translate::TRANSLATE_STEP_BEFORE_TRANSLATE:
73 [_delegate translationController:self
74 didFinishLanguageDetectionWithResult:languageDetectionResult
75 error:error];
76 break;
77 case translate::TRANSLATE_STEP_TRANSLATING:
78 [_delegate translationController:self
79 didStartTranslationFromLanguage:source
80 toLanguage:target];
81 break;
82 case translate::TRANSLATE_STEP_AFTER_TRANSLATE:
83 [_delegate translationController:self
84 didFinishTranslationFromLanguage:source
85 toLanguage:target
86 error:error];
87 break;
88 case translate::TRANSLATE_STEP_NEVER_TRANSLATE:
89 break;
90 case translate::TRANSLATE_STEP_TRANSLATE_ERROR:
91 break;
92 }
93 }
94
95 #pragma mark - Public Methods
96
97 - (void)translatePageFromLanguage:(CWVTranslationLanguage*)sourceLanguage
98 toLanguage:(CWVTranslationLanguage*)targetLanguage {
99 _translateUIDelegate->Translate();
100 }
101
102 - (void)revertTranslation {
103 _translateUIDelegate->RevertTranslation();
104 }
105
106 #pragma mark - Private Methods
107
108 - (CWVTranslationLanguage*)languageAtIndex:(size_t)index {
109 std::string languageCode = _translateUIDelegate->GetLanguageCodeAt(index);
110 base::string16 languageName = _translateUIDelegate->GetLanguageNameAt(index);
111 return [[CWVTranslationLanguage alloc] initWithLanguageCode:languageCode
112 languageName:languageName];
113 }
114
115 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698