Index: components/autofill/content/browser/content_autofill_driver.cc |
diff --git a/components/autofill/content/browser/content_autofill_driver.cc b/components/autofill/content/browser/content_autofill_driver.cc |
index d897ff3cb7fa1b9a79b453489e6f07f4d308f678..467648996efd3c48265a62d162ef78b60ec93570 100644 |
--- a/components/autofill/content/browser/content_autofill_driver.cc |
+++ b/components/autofill/content/browser/content_autofill_driver.cc |
@@ -10,6 +10,7 @@ |
#include "components/autofill/content/browser/content_autofill_driver_factory.h" |
#include "components/autofill/core/browser/autofill_client.h" |
#include "components/autofill/core/browser/autofill_external_delegate.h" |
+#include "components/autofill/core/browser/autofill_handler_proxy.h" |
#include "components/autofill/core/browser/autofill_manager.h" |
#include "components/autofill/core/browser/form_structure.h" |
#include "components/autofill/core/common/autofill_switches.h" |
@@ -32,16 +33,24 @@ ContentAutofillDriver::ContentAutofillDriver( |
content::RenderFrameHost* render_frame_host, |
AutofillClient* client, |
const std::string& app_locale, |
- AutofillManager::AutofillDownloadManagerState enable_download_manager) |
+ AutofillManager::AutofillDownloadManagerState enable_download_manager, |
+ AutofillProvider* provider) |
: render_frame_host_(render_frame_host), |
- autofill_manager_(new AutofillManager(this, |
- client, |
- app_locale, |
- enable_download_manager)), |
- autofill_external_delegate_(autofill_manager_.get(), this), |
+ autofill_manager_(nullptr), |
key_press_handler_manager_(this), |
binding_(this) { |
- autofill_manager_->SetExternalDelegate(&autofill_external_delegate_); |
+ // AutofillManager isn't used if provider is valid, Autofill provider is |
+ // currently used by Android only. |
+ if (provider) { |
+ autofill_handler_ = base::MakeUnique<AutofillHandlerProxy>(this, provider); |
+ } else { |
+ autofill_handler_ = base::MakeUnique<AutofillManager>( |
+ this, client, app_locale, enable_download_manager); |
+ autofill_manager_ = static_cast<AutofillManager*>(autofill_handler_.get()); |
+ autofill_external_delegate_ = |
+ base::MakeUnique<AutofillExternalDelegate>(autofill_manager_, this); |
+ autofill_manager_->SetExternalDelegate(autofill_external_delegate_.get()); |
+ } |
} |
ContentAutofillDriver::~ContentAutofillDriver() {} |
@@ -148,7 +157,7 @@ void ContentAutofillDriver::RendererShouldPreviewFieldWithValue( |
void ContentAutofillDriver::PopupHidden() { |
// If the unmask prompt is showing, keep showing the preview. The preview |
// will be cleared when the prompt closes. |
- if (!autofill_manager_->IsShowingUnmaskPrompt()) |
+ if (autofill_manager_ && !autofill_manager_->IsShowingUnmaskPrompt()) |
RendererShouldClearPreviewedForm(); |
} |
@@ -176,22 +185,22 @@ void ContentAutofillDriver::DidInteractWithCreditCardForm() { |
void ContentAutofillDriver::FormsSeen(const std::vector<FormData>& forms, |
base::TimeTicks timestamp) { |
- autofill_manager_->OnFormsSeen(forms, timestamp); |
+ autofill_handler_->OnFormsSeen(forms, timestamp); |
} |
void ContentAutofillDriver::WillSubmitForm(const FormData& form, |
base::TimeTicks timestamp) { |
- autofill_manager_->OnWillSubmitForm(form, timestamp); |
+ autofill_handler_->OnWillSubmitForm(form, timestamp); |
} |
void ContentAutofillDriver::FormSubmitted(const FormData& form) { |
- autofill_manager_->OnFormSubmitted(form); |
+ autofill_handler_->OnFormSubmitted(form); |
} |
void ContentAutofillDriver::TextFieldDidChange(const FormData& form, |
const FormFieldData& field, |
base::TimeTicks timestamp) { |
- autofill_manager_->OnTextFieldDidChange(form, field, timestamp); |
+ autofill_handler_->OnTextFieldDidChange(form, field, timestamp); |
} |
void ContentAutofillDriver::QueryFormFieldAutofill( |
@@ -199,48 +208,50 @@ void ContentAutofillDriver::QueryFormFieldAutofill( |
const FormData& form, |
const FormFieldData& field, |
const gfx::RectF& bounding_box) { |
- autofill_manager_->OnQueryFormFieldAutofill(id, form, field, bounding_box); |
+ autofill_handler_->OnQueryFormFieldAutofill(id, form, field, bounding_box); |
} |
void ContentAutofillDriver::HidePopup() { |
- autofill_manager_->OnHidePopup(); |
+ autofill_handler_->OnHidePopup(); |
} |
void ContentAutofillDriver::FocusNoLongerOnForm() { |
- autofill_manager_->OnFocusNoLongerOnForm(); |
+ autofill_handler_->OnFocusNoLongerOnForm(); |
} |
void ContentAutofillDriver::DidFillAutofillFormData(const FormData& form, |
base::TimeTicks timestamp) { |
- autofill_manager_->OnDidFillAutofillFormData(form, timestamp); |
+ autofill_handler_->OnDidFillAutofillFormData(form, timestamp); |
} |
void ContentAutofillDriver::DidPreviewAutofillFormData() { |
- autofill_manager_->OnDidPreviewAutofillFormData(); |
+ autofill_handler_->OnDidPreviewAutofillFormData(); |
} |
void ContentAutofillDriver::DidEndTextFieldEditing() { |
- autofill_manager_->OnDidEndTextFieldEditing(); |
+ autofill_handler_->OnDidEndTextFieldEditing(); |
} |
void ContentAutofillDriver::SetDataList( |
const std::vector<base::string16>& values, |
const std::vector<base::string16>& labels) { |
- autofill_manager_->OnSetDataList(values, labels); |
+ autofill_handler_->OnSetDataList(values, labels); |
} |
void ContentAutofillDriver::DidNavigateFrame( |
content::NavigationHandle* navigation_handle) { |
if (navigation_handle->IsInMainFrame() && |
!navigation_handle->IsSameDocument()) { |
- autofill_manager_->Reset(); |
+ autofill_handler_->Reset(); |
} |
} |
void ContentAutofillDriver::SetAutofillManager( |
std::unique_ptr<AutofillManager> manager) { |
- autofill_manager_ = std::move(manager); |
- autofill_manager_->SetExternalDelegate(&autofill_external_delegate_); |
+ CHECK(autofill_manager_); |
+ autofill_handler_ = std::move(manager); |
+ autofill_manager_ = static_cast<AutofillManager*>(autofill_handler_.get()); |
+ autofill_manager_->SetExternalDelegate(autofill_external_delegate_.get()); |
} |
const mojom::AutofillAgentPtr& ContentAutofillDriver::GetAutofillAgent() { |