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 @@ ...@@ -44,6 +44,7 @@
#import "ios/web_view/internal/autofill/cwv_credit_card_verifier_internal.h" #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" #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_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_personal_data_manager_factory.h"
#include "ios/web_view/internal/autofill/web_view_strike_database_factory.h" #include "ios/web_view/internal/autofill/web_view_strike_database_factory.h"
#import "ios/web_view/internal/passwords/cwv_password_controller.h" #import "ios/web_view/internal/passwords/cwv_password_controller.h"
...@@ -117,6 +118,9 @@ fetchNonPasswordSuggestionsForFormWithName:(NSString*)formName ...@@ -117,6 +118,9 @@ fetchNonPasswordSuggestionsForFormWithName:(NSString*)formName
@synthesize delegate = _delegate; @synthesize delegate = _delegate;
- (instancetype)initWithWebState:(web::WebState*)webState - (instancetype)initWithWebState:(web::WebState*)webState
autofillClient:
(std::unique_ptr<autofill::WebViewAutofillClientIOS>)
autofillClient
autofillAgent:(AutofillAgent*)autofillAgent autofillAgent:(AutofillAgent*)autofillAgent
JSAutofillManager:(JsAutofillManager*)JSAutofillManager JSAutofillManager:(JsAutofillManager*)JSAutofillManager
JSSuggestionManager:(JsSuggestionManager*)JSSuggestionManager JSSuggestionManager:(JsSuggestionManager*)JSSuggestionManager
...@@ -126,9 +130,6 @@ fetchNonPasswordSuggestionsForFormWithName:(NSString*)formName ...@@ -126,9 +130,6 @@ fetchNonPasswordSuggestionsForFormWithName:(NSString*)formName
DCHECK(webState); DCHECK(webState);
_webState = webState; _webState = webState;
ios_web_view::WebViewBrowserState* browserState =
ios_web_view::WebViewBrowserState::FromBrowserState(
_webState->GetBrowserState());
_autofillAgent = autofillAgent; _autofillAgent = autofillAgent;
_webStateObserverBridge = _webStateObserverBridge =
...@@ -138,19 +139,9 @@ fetchNonPasswordSuggestionsForFormWithName:(NSString*)formName ...@@ -138,19 +139,9 @@ fetchNonPasswordSuggestionsForFormWithName:(NSString*)formName
_formActivityObserverBridge = _formActivityObserverBridge =
std::make_unique<autofill::FormActivityObserverBridge>(webState, self); std::make_unique<autofill::FormActivityObserverBridge>(webState, self);
_autofillClient.reset(new autofill::WebViewAutofillClientIOS( _autofillClient = std::move(autofillClient);
browserState->GetPrefs(), _autofillClient->set_bridge(self);
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)));
autofill::AutofillDriverIOS::PrepareForWebStateWebFrameAndDelegate( autofill::AutofillDriverIOS::PrepareForWebStateWebFrameAndDelegate(
_webState, _autofillClient.get(), self, _webState, _autofillClient.get(), self,
ios_web_view::ApplicationContext::GetInstance()->GetApplicationLocale(), ios_web_view::ApplicationContext::GetInstance()->GetApplicationLocale(),
......
...@@ -5,10 +5,16 @@ ...@@ -5,10 +5,16 @@
#ifndef IOS_WEB_VIEW_INTERNAL_AUTOFILL_CWV_AUTOFILL_CONTROLLER_INTERNAL_H_ #ifndef IOS_WEB_VIEW_INTERNAL_AUTOFILL_CWV_AUTOFILL_CONTROLLER_INTERNAL_H_
#define 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" #import "ios/web_view/public/cwv_autofill_controller.h"
NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_BEGIN
namespace autofill {
class WebViewAutofillClientIOS;
} // namespace autofill
namespace web { namespace web {
class WebState; class WebState;
} // namespace web } // namespace web
...@@ -21,6 +27,9 @@ class WebState; ...@@ -21,6 +27,9 @@ class WebState;
@interface CWVAutofillController () @interface CWVAutofillController ()
- (instancetype)initWithWebState:(web::WebState*)webState - (instancetype)initWithWebState:(web::WebState*)webState
autofillClient:
(std::unique_ptr<autofill::WebViewAutofillClientIOS>)
autofillClient
autofillAgent:(AutofillAgent*)autofillAgent autofillAgent:(AutofillAgent*)autofillAgent
JSAutofillManager:(JsAutofillManager*)JSAutofillManager JSAutofillManager:(JsAutofillManager*)JSAutofillManager
JSSuggestionManager:(JsSuggestionManager*)JSSuggestionManager JSSuggestionManager:(JsSuggestionManager*)JSSuggestionManager
......
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
#include "ios/web/public/test/web_task_environment.h" #include "ios/web/public/test/web_task_environment.h"
#include "ios/web/public/web_client.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/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/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_client.h"
#import "ios/web_view/internal/passwords/web_view_password_manager_driver.h" #import "ios/web_view/internal/passwords/web_view_password_manager_driver.h"
...@@ -98,12 +99,16 @@ class CWVAutofillControllerTest : public TestWithLocaleAndResources { ...@@ -98,12 +99,16 @@ class CWVAutofillControllerTest : public TestWithLocaleAndResources {
passwordManagerClient:std::move(passwordManagerClient) passwordManagerClient:std::move(passwordManagerClient)
passwordManagerDriver:std::move(passwordManagerDriver)]; passwordManagerDriver:std::move(passwordManagerDriver)];
autofill_controller_ = // TODO(crbug.com/1070657): Fake the dependencies of the autofill client.
[[CWVAutofillController alloc] initWithWebState:&test_web_state_ auto autofill_client = autofill::WebViewAutofillClientIOS::Create(
autofillAgent:autofill_agent_ &test_web_state_, &browser_state_);
JSAutofillManager:js_autofill_manager_ autofill_controller_ = [[CWVAutofillController alloc]
JSSuggestionManager:js_suggestion_manager_ initWithWebState:&test_web_state_
passwordController:password_controller_]; autofillClient:std::move(autofill_client)
autofillAgent:autofill_agent_
JSAutofillManager:js_autofill_manager_
JSSuggestionManager:js_suggestion_manager_
passwordController:password_controller_];
test_form_activity_tab_helper_ = test_form_activity_tab_helper_ =
std::make_unique<autofill::TestFormActivityTabHelper>(&test_web_state_); std::make_unique<autofill::TestFormActivityTabHelper>(&test_web_state_);
} }
......
...@@ -13,32 +13,36 @@ ...@@ -13,32 +13,36 @@
#include "base/memory/weak_ptr.h" #include "base/memory/weak_ptr.h"
#include "components/autofill/core/browser/autocomplete_history_manager.h" #include "components/autofill/core/browser/autocomplete_history_manager.h"
#include "components/autofill/core/browser/autofill_client.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/card_unmask_delegate.h"
#include "components/autofill/core/browser/payments/legal_message_line.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/payments/strike_database.h"
#include "components/autofill/core/browser/personal_data_manager.h" #include "components/autofill/core/browser/personal_data_manager.h"
#include "components/prefs/pref_service.h" #include "components/prefs/pref_service.h"
#include "components/sync/driver/sync_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" #import "ios/web_view/internal/autofill/cwv_autofill_client_ios_bridge.h"
#include "ios/web_view/internal/web_view_browser_state.h"
namespace web {
class WebState;
}
namespace autofill { namespace autofill {
// WebView implementation of AutofillClient. // WebView implementation of AutofillClient.
class WebViewAutofillClientIOS : public AutofillClient { class WebViewAutofillClientIOS : public AutofillClient {
public: public:
static std::unique_ptr<WebViewAutofillClientIOS> Create(
web::WebState* web_state,
ios_web_view::WebViewBrowserState* browser_state);
WebViewAutofillClientIOS( WebViewAutofillClientIOS(
const std::string& locale,
PrefService* pref_service, PrefService* pref_service,
PersonalDataManager* personal_data_manager, PersonalDataManager* personal_data_manager,
AutocompleteHistoryManager* autocomplete_history_manager, AutocompleteHistoryManager* autocomplete_history_manager,
web::WebState* web_state, web::WebState* web_state,
id<CWVAutofillClientIOSBridge> bridge,
signin::IdentityManager* identity_manager, signin::IdentityManager* identity_manager,
StrikeDatabase* strike_database, StrikeDatabase* strike_database,
syncer::SyncService* sync_service); syncer::SyncService* sync_service,
std::unique_ptr<autofill::LogManager> log_manager);
~WebViewAutofillClientIOS() override; ~WebViewAutofillClientIOS() override;
// AutofillClient: // AutofillClient:
...@@ -125,6 +129,8 @@ class WebViewAutofillClientIOS : public AutofillClient { ...@@ -125,6 +129,8 @@ class WebViewAutofillClientIOS : public AutofillClient {
LogManager* GetLogManager() const override; LogManager* GetLogManager() const override;
void set_bridge(id<CWVAutofillClientIOSBridge> bridge) { bridge_ = bridge; }
private: private:
PrefService* pref_service_; PrefService* pref_service_;
PersonalDataManager* personal_data_manager_; PersonalDataManager* personal_data_manager_;
......
...@@ -10,15 +10,20 @@ ...@@ -10,15 +10,20 @@
#include "base/logging.h" #include "base/logging.h"
#include "base/memory/ptr_util.h" #include "base/memory/ptr_util.h"
#include "components/autofill/core/browser/form_data_importer.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/browser/payments/payments_client.h"
#include "components/autofill/core/common/autofill_prefs.h" #include "components/autofill/core/common/autofill_prefs.h"
#include "components/autofill/ios/browser/autofill_util.h" #include "components/autofill/ios/browser/autofill_util.h"
#include "components/security_state/ios/security_state_utils.h" #include "components/security_state/ios/security_state_utils.h"
#include "ios/web/public/browser_state.h"
#import "ios/web/public/web_state.h" #import "ios/web/public/web_state.h"
#include "ios/web_view/internal/app/application_context.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" #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/shared_url_loader_factory.h"
#include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h" #include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h"
...@@ -28,20 +33,47 @@ ...@@ -28,20 +33,47 @@
namespace autofill { 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( WebViewAutofillClientIOS::WebViewAutofillClientIOS(
const std::string& locale,
PrefService* pref_service, PrefService* pref_service,
PersonalDataManager* personal_data_manager, PersonalDataManager* personal_data_manager,
AutocompleteHistoryManager* autocomplete_history_manager, AutocompleteHistoryManager* autocomplete_history_manager,
web::WebState* web_state, web::WebState* web_state,
id<CWVAutofillClientIOSBridge> bridge,
signin::IdentityManager* identity_manager, signin::IdentityManager* identity_manager,
StrikeDatabase* strike_database, StrikeDatabase* strike_database,
syncer::SyncService* sync_service) syncer::SyncService* sync_service,
std::unique_ptr<autofill::LogManager> log_manager)
: pref_service_(pref_service), : pref_service_(pref_service),
personal_data_manager_(personal_data_manager), personal_data_manager_(personal_data_manager),
autocomplete_history_manager_(autocomplete_history_manager), autocomplete_history_manager_(autocomplete_history_manager),
web_state_(web_state), web_state_(web_state),
bridge_(bridge),
identity_manager_(identity_manager), identity_manager_(identity_manager),
payments_client_(std::make_unique<payments::PaymentsClient>( payments_client_(std::make_unique<payments::PaymentsClient>(
base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>( base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>(
...@@ -49,22 +81,14 @@ WebViewAutofillClientIOS::WebViewAutofillClientIOS( ...@@ -49,22 +81,14 @@ WebViewAutofillClientIOS::WebViewAutofillClientIOS(
identity_manager_, identity_manager_,
personal_data_manager_, personal_data_manager_,
web_state_->GetBrowserState()->IsOffTheRecord())), web_state_->GetBrowserState()->IsOffTheRecord())),
form_data_importer_(std::make_unique<FormDataImporter>( form_data_importer_(
this, std::make_unique<FormDataImporter>(this,
payments_client_.get(), payments_client_.get(),
personal_data_manager_, personal_data_manager_,
ios_web_view::ApplicationContext::GetInstance() locale)),
->GetApplicationLocale())),
strike_database_(strike_database), strike_database_(strike_database),
sync_service_(sync_service), sync_service_(sync_service),
// TODO(crbug.com/928595): Replace the closure with a callback to the log_manager_(std::move(log_manager)) {}
// 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())) {}
WebViewAutofillClientIOS::~WebViewAutofillClientIOS() { WebViewAutofillClientIOS::~WebViewAutofillClientIOS() {
HideAutofillPopup(PopupHidingReason::kTabGone); HideAutofillPopup(PopupHidingReason::kTabGone);
......
...@@ -39,6 +39,7 @@ ...@@ -39,6 +39,7 @@
#import "ios/web/public/web_state_observer_bridge.h" #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/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/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_back_forward_list_internal.h"
#import "ios/web_view/internal/cwv_favicon_internal.h" #import "ios/web_view/internal/cwv_favicon_internal.h"
#import "ios/web_view/internal/cwv_html_element_internal.h" #import "ios/web_view/internal/cwv_html_element_internal.h"
...@@ -634,6 +635,8 @@ BOOL gChromeLongPressAndForceTouchHandlingEnabled = YES; ...@@ -634,6 +635,8 @@ BOOL gChromeLongPressAndForceTouchHandlingEnabled = YES;
} }
- (CWVAutofillController*)newAutofillController { - (CWVAutofillController*)newAutofillController {
auto autofillClient = autofill::WebViewAutofillClientIOS::Create(
_webState.get(), _configuration.browserState);
AutofillAgent* autofillAgent = [[AutofillAgent alloc] AutofillAgent* autofillAgent = [[AutofillAgent alloc]
initWithPrefService:_configuration.browserState->GetPrefs() initWithPrefService:_configuration.browserState->GetPrefs()
webState:_webState.get()]; webState:_webState.get()];
...@@ -660,11 +663,13 @@ BOOL gChromeLongPressAndForceTouchHandlingEnabled = YES; ...@@ -660,11 +663,13 @@ BOOL gChromeLongPressAndForceTouchHandlingEnabled = YES;
passwordManagerClient:std::move(passwordManagerClient) passwordManagerClient:std::move(passwordManagerClient)
passwordManagerDriver:std::move(passwordManagerDriver)]; passwordManagerDriver:std::move(passwordManagerDriver)];
return [[CWVAutofillController alloc] initWithWebState:_webState.get() return
autofillAgent:autofillAgent [[CWVAutofillController alloc] initWithWebState:_webState.get()
JSAutofillManager:JSAutofillManager autofillClient:std::move(autofillClient)
JSSuggestionManager:JSSuggestionManager autofillAgent:autofillAgent
passwordController:passwordController]; JSAutofillManager:JSAutofillManager
JSSuggestionManager:JSSuggestionManager
passwordController:passwordController];
} }
#pragma mark - Preserving and Restoring State #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