Commit 5ff693d0 authored by John Z Wu's avatar John Z Wu Committed by Commit Bot

Refactor autofill constructors in ios/web_view

Change-Id: I415c47e055985d2d9ef55e6d73fec70fad6a2944
Bug: 1070657
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2148097Reviewed-by: default avatarHiroshi Ichikawa <ichikawa@chromium.org>
Commit-Queue: John Wu <jzw@chromium.org>
Cr-Commit-Position: refs/heads/master@{#759101}
parent 912b071b
......@@ -44,6 +44,7 @@
#import "ios/web_view/internal/autofill/cwv_credit_card_verifier_internal.h"
#include "ios/web_view/internal/autofill/web_view_autocomplete_history_manager_factory.h"
#import "ios/web_view/internal/autofill/web_view_autofill_client_ios.h"
#import "ios/web_view/internal/autofill/web_view_autofill_log_router_factory.h"
#include "ios/web_view/internal/autofill/web_view_personal_data_manager_factory.h"
#include "ios/web_view/internal/autofill/web_view_strike_database_factory.h"
#import "ios/web_view/internal/passwords/cwv_password_controller.h"
......@@ -117,6 +118,9 @@ fetchNonPasswordSuggestionsForFormWithName:(NSString*)formName
@synthesize delegate = _delegate;
- (instancetype)initWithWebState:(web::WebState*)webState
autofillClient:
(std::unique_ptr<autofill::WebViewAutofillClientIOS>)
autofillClient
autofillAgent:(AutofillAgent*)autofillAgent
JSAutofillManager:(JsAutofillManager*)JSAutofillManager
JSSuggestionManager:(JsSuggestionManager*)JSSuggestionManager
......@@ -126,9 +130,6 @@ fetchNonPasswordSuggestionsForFormWithName:(NSString*)formName
DCHECK(webState);
_webState = webState;
ios_web_view::WebViewBrowserState* browserState =
ios_web_view::WebViewBrowserState::FromBrowserState(
_webState->GetBrowserState());
_autofillAgent = autofillAgent;
_webStateObserverBridge =
......@@ -138,19 +139,9 @@ fetchNonPasswordSuggestionsForFormWithName:(NSString*)formName
_formActivityObserverBridge =
std::make_unique<autofill::FormActivityObserverBridge>(webState, self);
_autofillClient.reset(new autofill::WebViewAutofillClientIOS(
browserState->GetPrefs(),
ios_web_view::WebViewPersonalDataManagerFactory::GetForBrowserState(
browserState->GetRecordingBrowserState()),
ios_web_view::WebViewAutocompleteHistoryManagerFactory::
GetForBrowserState(browserState),
_webState, self,
ios_web_view::WebViewIdentityManagerFactory::GetForBrowserState(
browserState->GetRecordingBrowserState()),
ios_web_view::WebViewStrikeDatabaseFactory::GetForBrowserState(
browserState->GetRecordingBrowserState()),
ios_web_view::WebViewProfileSyncServiceFactory::GetForBrowserState(
browserState)));
_autofillClient = std::move(autofillClient);
_autofillClient->set_bridge(self);
autofill::AutofillDriverIOS::PrepareForWebStateWebFrameAndDelegate(
_webState, _autofillClient.get(), self,
ios_web_view::ApplicationContext::GetInstance()->GetApplicationLocale(),
......
......@@ -5,10 +5,16 @@
#ifndef IOS_WEB_VIEW_INTERNAL_AUTOFILL_CWV_AUTOFILL_CONTROLLER_INTERNAL_H_
#define IOS_WEB_VIEW_INTERNAL_AUTOFILL_CWV_AUTOFILL_CONTROLLER_INTERNAL_H_
#include <memory>
#import "ios/web_view/public/cwv_autofill_controller.h"
NS_ASSUME_NONNULL_BEGIN
namespace autofill {
class WebViewAutofillClientIOS;
} // namespace autofill
namespace web {
class WebState;
} // namespace web
......@@ -21,6 +27,9 @@ class WebState;
@interface CWVAutofillController ()
- (instancetype)initWithWebState:(web::WebState*)webState
autofillClient:
(std::unique_ptr<autofill::WebViewAutofillClientIOS>)
autofillClient
autofillAgent:(AutofillAgent*)autofillAgent
JSAutofillManager:(JsAutofillManager*)JSAutofillManager
JSSuggestionManager:(JsSuggestionManager*)JSSuggestionManager
......
......@@ -29,6 +29,7 @@
#include "ios/web/public/test/web_task_environment.h"
#include "ios/web/public/web_client.h"
#import "ios/web_view/internal/autofill/cwv_autofill_suggestion_internal.h"
#import "ios/web_view/internal/autofill/web_view_autofill_client_ios.h"
#import "ios/web_view/internal/passwords/cwv_password_controller_fake.h"
#import "ios/web_view/internal/passwords/web_view_password_manager_client.h"
#import "ios/web_view/internal/passwords/web_view_password_manager_driver.h"
......@@ -98,12 +99,16 @@ class CWVAutofillControllerTest : public TestWithLocaleAndResources {
passwordManagerClient:std::move(passwordManagerClient)
passwordManagerDriver:std::move(passwordManagerDriver)];
autofill_controller_ =
[[CWVAutofillController alloc] initWithWebState:&test_web_state_
autofillAgent:autofill_agent_
JSAutofillManager:js_autofill_manager_
JSSuggestionManager:js_suggestion_manager_
passwordController:password_controller_];
// TODO(crbug.com/1070657): Fake the dependencies of the autofill client.
auto autofill_client = autofill::WebViewAutofillClientIOS::Create(
&test_web_state_, &browser_state_);
autofill_controller_ = [[CWVAutofillController alloc]
initWithWebState:&test_web_state_
autofillClient:std::move(autofill_client)
autofillAgent:autofill_agent_
JSAutofillManager:js_autofill_manager_
JSSuggestionManager:js_suggestion_manager_
passwordController:password_controller_];
test_form_activity_tab_helper_ =
std::make_unique<autofill::TestFormActivityTabHelper>(&test_web_state_);
}
......
......@@ -13,32 +13,36 @@
#include "base/memory/weak_ptr.h"
#include "components/autofill/core/browser/autocomplete_history_manager.h"
#include "components/autofill/core/browser/autofill_client.h"
#include "components/autofill/core/browser/logging/log_manager.h"
#include "components/autofill/core/browser/payments/card_unmask_delegate.h"
#include "components/autofill/core/browser/payments/legal_message_line.h"
#include "components/autofill/core/browser/payments/strike_database.h"
#include "components/autofill/core/browser/personal_data_manager.h"
#include "components/prefs/pref_service.h"
#include "components/sync/driver/sync_service.h"
#import "ios/web/public/web_state.h"
#import "ios/web_view/internal/autofill/cwv_autofill_client_ios_bridge.h"
namespace web {
class WebState;
}
#include "ios/web_view/internal/web_view_browser_state.h"
namespace autofill {
// WebView implementation of AutofillClient.
class WebViewAutofillClientIOS : public AutofillClient {
public:
static std::unique_ptr<WebViewAutofillClientIOS> Create(
web::WebState* web_state,
ios_web_view::WebViewBrowserState* browser_state);
WebViewAutofillClientIOS(
const std::string& locale,
PrefService* pref_service,
PersonalDataManager* personal_data_manager,
AutocompleteHistoryManager* autocomplete_history_manager,
web::WebState* web_state,
id<CWVAutofillClientIOSBridge> bridge,
signin::IdentityManager* identity_manager,
StrikeDatabase* strike_database,
syncer::SyncService* sync_service);
syncer::SyncService* sync_service,
std::unique_ptr<autofill::LogManager> log_manager);
~WebViewAutofillClientIOS() override;
// AutofillClient:
......@@ -125,6 +129,8 @@ class WebViewAutofillClientIOS : public AutofillClient {
LogManager* GetLogManager() const override;
void set_bridge(id<CWVAutofillClientIOSBridge> bridge) { bridge_ = bridge; }
private:
PrefService* pref_service_;
PersonalDataManager* personal_data_manager_;
......
......@@ -10,15 +10,20 @@
#include "base/logging.h"
#include "base/memory/ptr_util.h"
#include "components/autofill/core/browser/form_data_importer.h"
#include "components/autofill/core/browser/logging/log_manager.h"
#include "components/autofill/core/browser/logging/log_router.h"
#include "components/autofill/core/browser/payments/payments_client.h"
#include "components/autofill/core/common/autofill_prefs.h"
#include "components/autofill/ios/browser/autofill_util.h"
#include "components/security_state/ios/security_state_utils.h"
#include "ios/web/public/browser_state.h"
#import "ios/web/public/web_state.h"
#include "ios/web_view/internal/app/application_context.h"
#include "ios/web_view/internal/autofill/web_view_autocomplete_history_manager_factory.h"
#import "ios/web_view/internal/autofill/web_view_autofill_log_router_factory.h"
#include "ios/web_view/internal/web_view_browser_state.h"
#include "ios/web_view/internal/autofill/web_view_personal_data_manager_factory.h"
#include "ios/web_view/internal/autofill/web_view_strike_database_factory.h"
#include "ios/web_view/internal/signin/web_view_identity_manager_factory.h"
#import "ios/web_view/internal/sync/web_view_profile_sync_service_factory.h"
#include "services/network/public/cpp/shared_url_loader_factory.h"
#include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h"
......@@ -28,20 +33,47 @@
namespace autofill {
// static
std::unique_ptr<WebViewAutofillClientIOS> WebViewAutofillClientIOS::Create(
web::WebState* web_state,
ios_web_view::WebViewBrowserState* browser_state) {
return std::make_unique<autofill::WebViewAutofillClientIOS>(
ios_web_view::ApplicationContext::GetInstance()->GetApplicationLocale(),
browser_state->GetPrefs(),
ios_web_view::WebViewPersonalDataManagerFactory::GetForBrowserState(
browser_state->GetRecordingBrowserState()),
ios_web_view::WebViewAutocompleteHistoryManagerFactory::
GetForBrowserState(browser_state),
web_state,
ios_web_view::WebViewIdentityManagerFactory::GetForBrowserState(
browser_state->GetRecordingBrowserState()),
ios_web_view::WebViewStrikeDatabaseFactory::GetForBrowserState(
browser_state->GetRecordingBrowserState()),
ios_web_view::WebViewProfileSyncServiceFactory::GetForBrowserState(
browser_state),
// TODO(crbug.com/928595): Replace the closure with a callback to the
// renderer that indicates if log messages should be sent from the
// renderer.
LogManager::Create(
autofill::WebViewAutofillLogRouterFactory::GetForBrowserState(
browser_state),
base::Closure()));
}
WebViewAutofillClientIOS::WebViewAutofillClientIOS(
const std::string& locale,
PrefService* pref_service,
PersonalDataManager* personal_data_manager,
AutocompleteHistoryManager* autocomplete_history_manager,
web::WebState* web_state,
id<CWVAutofillClientIOSBridge> bridge,
signin::IdentityManager* identity_manager,
StrikeDatabase* strike_database,
syncer::SyncService* sync_service)
syncer::SyncService* sync_service,
std::unique_ptr<autofill::LogManager> log_manager)
: pref_service_(pref_service),
personal_data_manager_(personal_data_manager),
autocomplete_history_manager_(autocomplete_history_manager),
web_state_(web_state),
bridge_(bridge),
identity_manager_(identity_manager),
payments_client_(std::make_unique<payments::PaymentsClient>(
base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>(
......@@ -49,22 +81,14 @@ WebViewAutofillClientIOS::WebViewAutofillClientIOS(
identity_manager_,
personal_data_manager_,
web_state_->GetBrowserState()->IsOffTheRecord())),
form_data_importer_(std::make_unique<FormDataImporter>(
this,
payments_client_.get(),
personal_data_manager_,
ios_web_view::ApplicationContext::GetInstance()
->GetApplicationLocale())),
form_data_importer_(
std::make_unique<FormDataImporter>(this,
payments_client_.get(),
personal_data_manager_,
locale)),
strike_database_(strike_database),
sync_service_(sync_service),
// TODO(crbug.com/928595): Replace the closure with a callback to the
// renderer that indicates if log messages should be sent from the
// renderer.
log_manager_(LogManager::Create(
autofill::WebViewAutofillLogRouterFactory::GetForBrowserState(
ios_web_view::WebViewBrowserState::FromBrowserState(
web_state->GetBrowserState())),
base::Closure())) {}
log_manager_(std::move(log_manager)) {}
WebViewAutofillClientIOS::~WebViewAutofillClientIOS() {
HideAutofillPopup(PopupHidingReason::kTabGone);
......
......@@ -39,6 +39,7 @@
#import "ios/web/public/web_state_observer_bridge.h"
#import "ios/web/public/web_view_only/wk_web_view_configuration_util.h"
#import "ios/web_view/internal/autofill/cwv_autofill_controller_internal.h"
#import "ios/web_view/internal/autofill/web_view_autofill_client_ios.h"
#import "ios/web_view/internal/cwv_back_forward_list_internal.h"
#import "ios/web_view/internal/cwv_favicon_internal.h"
#import "ios/web_view/internal/cwv_html_element_internal.h"
......@@ -634,6 +635,8 @@ BOOL gChromeLongPressAndForceTouchHandlingEnabled = YES;
}
- (CWVAutofillController*)newAutofillController {
auto autofillClient = autofill::WebViewAutofillClientIOS::Create(
_webState.get(), _configuration.browserState);
AutofillAgent* autofillAgent = [[AutofillAgent alloc]
initWithPrefService:_configuration.browserState->GetPrefs()
webState:_webState.get()];
......@@ -660,11 +663,13 @@ BOOL gChromeLongPressAndForceTouchHandlingEnabled = YES;
passwordManagerClient:std::move(passwordManagerClient)
passwordManagerDriver:std::move(passwordManagerDriver)];
return [[CWVAutofillController alloc] initWithWebState:_webState.get()
autofillAgent:autofillAgent
JSAutofillManager:JSAutofillManager
JSSuggestionManager:JSSuggestionManager
passwordController:passwordController];
return
[[CWVAutofillController alloc] initWithWebState:_webState.get()
autofillClient:std::move(autofillClient)
autofillAgent:autofillAgent
JSAutofillManager:JSAutofillManager
JSSuggestionManager:JSSuggestionManager
passwordController:passwordController];
}
#pragma mark - Preserving and Restoring State
......
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