Chromium Code Reviews| 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..17b2b068e8e302fd31bcb0b37fd63e0c9305a5f1 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,22 @@ 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_); |
| + if (provider) { |
|
Mathieu
2017/05/24 18:02:02
Please comment the behavior here. What is a provid
michaelbai
2017/05/26 23:12:08
Done.
|
| + 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 +155,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()) |
|
Roger McFarlane (Chromium)
2017/05/24 04:18:22
maybe add IsShowingUnmaskPrompt as a, default fals
michaelbai
2017/05/24 05:14:09
I didn't add this method to the interface because
|
| RendererShouldClearPreviewedForm(); |
| } |
| @@ -176,22 +183,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 +206,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() { |