Commit 3af29001 authored by John Z Wu's avatar John Z Wu Committed by Commit Bot

Change CWVTranslationController dependency injection to use init.

This will help in writing tests for CWVTranslationController.

Bug: 770983
Cq-Include-Trybots: master.tryserver.chromium.mac:ios-simulator-cronet;master.tryserver.chromium.mac:ios-simulator-full-configs
Change-Id: I8f0b67e14872e654fcf276f0fba20dab4289b6b9
Reviewed-on: https://chromium-review.googlesource.com/939045
Commit-Queue: John Wu <jzw@chromium.org>
Reviewed-by: default avatarEugene But <eugenebut@chromium.org>
Cr-Commit-Position: refs/heads/master@{#539494}
parent 69001d48
......@@ -86,6 +86,8 @@ NSString* const kSessionStorageKey = @"sessionStorage";
- (void)updateTitle;
// Returns a new CWVAutofillController created from |_webState|.
- (CWVAutofillController*)newAutofillController;
// Returns a new CWVTranslationController created from |_webState|.
- (CWVTranslationController*)newTranslationController;
@end
......@@ -390,12 +392,19 @@ static NSString* gUserAgentProduct = nil;
- (CWVTranslationController*)translationController {
if (!_translationController) {
_translationController = [[CWVTranslationController alloc] init];
_translationController.webState = _webState.get();
_translationController = [self newTranslationController];
}
return _translationController;
}
- (CWVTranslationController*)newTranslationController {
ios_web_view::WebViewTranslateClient::CreateForWebState(_webState.get());
ios_web_view::WebViewTranslateClient* translateClient =
ios_web_view::WebViewTranslateClient::FromWebState(_webState.get());
return [[CWVTranslationController alloc]
initWithTranslateClient:translateClient];
}
#pragma mark - Autofill
- (CWVAutofillController*)autofillController {
......@@ -482,7 +491,12 @@ static NSString* gUserAgentProduct = nil;
_scrollView.proxy = _webState.get()->GetWebViewProxy().scrollViewProxy;
_translationController.webState = _webState.get();
if (_translationController) {
id<CWVTranslationControllerDelegate> delegate =
_translationController.delegate;
_translationController = [self newTranslationController];
_translationController.delegate = delegate;
}
// Recreate and restore the delegate only if previously lazily loaded.
if (_autofillController) {
......
......@@ -12,7 +12,6 @@
#include "components/translate/core/browser/translate_download_manager.h"
#include "components/translate/core/browser/translate_manager.h"
#import "ios/web_view/internal/cwv_web_view_configuration_internal.h"
#import "ios/web_view/internal/language/web_view_url_language_histogram_factory.h"
#import "ios/web_view/internal/translate/cwv_translation_language_internal.h"
#import "ios/web_view/internal/translate/web_view_translate_client.h"
#include "ios/web_view/internal/web_view_browser_state.h"
......@@ -66,29 +65,19 @@ const NSInteger CWVTranslationErrorScriptLoadError =
@synthesize delegate = _delegate;
@synthesize supportedLanguagesByCode = _supportedLanguagesByCode;
@synthesize webState = _webState;
#pragma mark - Internal Methods
- (void)setWebState:(web::WebState*)webState {
_webState = webState;
ios_web_view::WebViewTranslateClient::CreateForWebState(_webState);
language::IOSLanguageDetectionTabHelper::CreateForWebState(
_webState,
ios_web_view::WebViewTranslateClient::FromWebState(_webState)
->GetTranslateDriver()
->CreateLanguageDetectionCallback(),
ios_web_view::WebViewUrlLanguageHistogramFactory::GetForBrowserState(
ios_web_view::WebViewBrowserState::FromBrowserState(
_webState->GetBrowserState())));
_translateClient =
ios_web_view::WebViewTranslateClient::FromWebState(_webState);
_translateClient->set_translation_controller(self);
_translatePrefs = _translateClient->translate_manager()
->translate_client()
->GetTranslatePrefs();
- (instancetype)initWithTranslateClient:
(ios_web_view::WebViewTranslateClient*)translateClient {
self = [super init];
if (self) {
_translateClient = translateClient;
_translateClient->set_translation_controller(self);
_translatePrefs = _translateClient->GetTranslatePrefs();
}
return self;
}
- (void)updateTranslateStep:(translate::TranslateStep)step
......
......@@ -12,17 +12,18 @@
#include "components/translate/core/browser/translate_step.h"
#include "components/translate/core/common/translate_errors.h"
namespace web {
class WebState;
}
namespace ios_web_view {
class WebViewTranslateClient;
} // namespace ios_web_view
NS_ASSUME_NONNULL_BEGIN
// Some internal methods needed to hide any C++ details.
@interface CWVTranslationController ()
// Set to create a new translate stack under the new webState.
@property(nonatomic, assign) web::WebState* webState;
- (instancetype)initWithTranslateClient:
(ios_web_view::WebViewTranslateClient*)translateClient
NS_DESIGNATED_INITIALIZER;
// Called to keep this class informed of the current translate progress.
// |step| the state of current translation.
......
......@@ -19,6 +19,7 @@
#include "ios/web/public/browser_state.h"
#import "ios/web/public/web_state/web_state.h"
#include "ios/web_view/internal/language/web_view_language_model_factory.h"
#import "ios/web_view/internal/language/web_view_url_language_histogram_factory.h"
#include "ios/web_view/internal/pref_names.h"
#import "ios/web_view/internal/translate/cwv_translation_controller_internal.h"
#include "ios/web_view/internal/translate/web_view_translate_accept_languages_factory.h"
......@@ -45,6 +46,11 @@ WebViewTranslateClient::WebViewTranslateClient(web::WebState* web_state)
web_state->GetNavigationManager(),
translate_manager_.get()) {
web_state->AddObserver(this);
language::IOSLanguageDetectionTabHelper::CreateForWebState(
web_state, translate_driver_.CreateLanguageDetectionCallback(),
ios_web_view::WebViewUrlLanguageHistogramFactory::GetForBrowserState(
ios_web_view::WebViewBrowserState::FromBrowserState(
web_state->GetBrowserState())));
}
WebViewTranslateClient::~WebViewTranslateClient() = default;
......
......@@ -52,6 +52,8 @@ CWV_EXPORT
@property(nonatomic, readonly)
NSSet<CWVTranslationLanguage*>* supportedLanguages;
- (instancetype)init NS_UNAVAILABLE;
// Begins translation on the current page from |sourceLanguage| to
// |targetLanguage|. These language parameters must be chosen from
// |supportedLanguages|. Set |userInitiated| to YES if translation
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment