| 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 a0fed92c8641b8815a7067f8ca77037980b48a2c..be6e31eff0ef995a8bb636d2c862e9fd178586c6 100644
|
| --- a/components/autofill/content/browser/content_autofill_driver.cc
|
| +++ b/components/autofill/content/browser/content_autofill_driver.cc
|
| @@ -9,6 +9,7 @@
|
| #include "base/command_line.h"
|
| #include "base/threading/sequenced_worker_pool.h"
|
| #include "components/autofill/content/browser/content_autofill_driver_factory.h"
|
| +#include "components/autofill/content/browser/autofill_provider.h"
|
| #include "components/autofill/core/browser/autofill_client.h"
|
| #include "components/autofill/core/browser/autofill_external_delegate.h"
|
| #include "components/autofill/core/browser/autofill_manager.h"
|
| @@ -33,7 +34,8 @@ 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),
|
| client_(client),
|
| autofill_manager_(new AutofillManager(this,
|
| @@ -41,11 +43,18 @@ ContentAutofillDriver::ContentAutofillDriver(
|
| app_locale,
|
| enable_download_manager)),
|
| autofill_external_delegate_(autofill_manager_.get(), this),
|
| - binding_(this) {
|
| + binding_(this),
|
| + provider_(provider) {
|
| + LOG(ERROR) << "bt:" << __PRETTY_FUNCTION__;
|
| autofill_manager_->SetExternalDelegate(&autofill_external_delegate_);
|
| }
|
|
|
| -ContentAutofillDriver::~ContentAutofillDriver() {}
|
| +ContentAutofillDriver::~ContentAutofillDriver() {
|
| + LOG(ERROR) << "bt:" << __PRETTY_FUNCTION__;
|
| + // Provider_ might already be distroyed, might use weak_ptr here.
|
| + if (provider_)
|
| + provider_->OnContentAutofillDriverDestroyed(this);
|
| +}
|
|
|
| // static
|
| ContentAutofillDriver* ContentAutofillDriver::GetForRenderFrameHost(
|
| @@ -61,18 +70,21 @@ void ContentAutofillDriver::BindRequest(mojom::AutofillDriverRequest request) {
|
| }
|
|
|
| bool ContentAutofillDriver::IsOffTheRecord() const {
|
| + LOG(ERROR) << "bt:" << __PRETTY_FUNCTION__;
|
| return render_frame_host_->GetSiteInstance()
|
| ->GetBrowserContext()
|
| ->IsOffTheRecord();
|
| }
|
|
|
| net::URLRequestContextGetter* ContentAutofillDriver::GetURLRequestContext() {
|
| + LOG(ERROR) << "bt:" << __PRETTY_FUNCTION__;
|
| return content::BrowserContext::GetDefaultStoragePartition(
|
| render_frame_host_->GetSiteInstance()->GetBrowserContext())->
|
| GetURLRequestContext();
|
| }
|
|
|
| base::SequencedWorkerPool* ContentAutofillDriver::GetBlockingPool() {
|
| + LOG(ERROR) << "bt:" << __PRETTY_FUNCTION__;
|
| return content::BrowserThread::GetBlockingPool();
|
| }
|
|
|
| @@ -84,6 +96,8 @@ void ContentAutofillDriver::SendFormDataToRenderer(
|
| int query_id,
|
| RendererFormDataAction action,
|
| const FormData& data) {
|
| + LOG(ERROR) << "bt:" << __PRETTY_FUNCTION__ << this << "id = " << query_id;
|
| + LOG(ERROR) << "bt:" << data;
|
| if (!RendererIsAvailable())
|
| return;
|
|
|
| @@ -99,12 +113,14 @@ void ContentAutofillDriver::SendFormDataToRenderer(
|
|
|
| void ContentAutofillDriver::PropagateAutofillPredictions(
|
| const std::vector<FormStructure*>& forms) {
|
| + LOG(ERROR) << "bt:" << __PRETTY_FUNCTION__;
|
| autofill_manager_->client()->PropagateAutofillPredictions(render_frame_host_,
|
| forms);
|
| }
|
|
|
| void ContentAutofillDriver::SendAutofillTypePredictionsToRenderer(
|
| const std::vector<FormStructure*>& forms) {
|
| + LOG(ERROR) << "bt:" << __PRETTY_FUNCTION__;
|
| if (!base::CommandLine::ForCurrentProcess()->HasSwitch(
|
| switches::kShowAutofillTypePredictions))
|
| return;
|
| @@ -119,18 +135,21 @@ void ContentAutofillDriver::SendAutofillTypePredictionsToRenderer(
|
|
|
| void ContentAutofillDriver::RendererShouldAcceptDataListSuggestion(
|
| const base::string16& value) {
|
| + LOG(ERROR) << "bt:" << __PRETTY_FUNCTION__;
|
| if (!RendererIsAvailable())
|
| return;
|
| GetAutofillAgent()->AcceptDataListSuggestion(value);
|
| }
|
|
|
| void ContentAutofillDriver::RendererShouldClearFilledForm() {
|
| + LOG(ERROR) << "bt:" << __PRETTY_FUNCTION__;
|
| if (!RendererIsAvailable())
|
| return;
|
| GetAutofillAgent()->ClearForm();
|
| }
|
|
|
| void ContentAutofillDriver::RendererShouldClearPreviewedForm() {
|
| + LOG(ERROR) << "bt:" << __PRETTY_FUNCTION__;
|
| if (!RendererIsAvailable())
|
| return;
|
| GetAutofillAgent()->ClearPreviewedForm();
|
| @@ -138,6 +157,7 @@ void ContentAutofillDriver::RendererShouldClearPreviewedForm() {
|
|
|
| void ContentAutofillDriver::RendererShouldFillFieldWithValue(
|
| const base::string16& value) {
|
| + LOG(ERROR) << "bt:" << __PRETTY_FUNCTION__;
|
| if (!RendererIsAvailable())
|
| return;
|
| GetAutofillAgent()->FillFieldWithValue(value);
|
| @@ -145,12 +165,14 @@ void ContentAutofillDriver::RendererShouldFillFieldWithValue(
|
|
|
| void ContentAutofillDriver::RendererShouldPreviewFieldWithValue(
|
| const base::string16& value) {
|
| + LOG(ERROR) << "bt:" << __PRETTY_FUNCTION__;
|
| if (!RendererIsAvailable())
|
| return;
|
| GetAutofillAgent()->PreviewFieldWithValue(value);
|
| }
|
|
|
| void ContentAutofillDriver::PopupHidden() {
|
| + LOG(ERROR) << "bt:" << __PRETTY_FUNCTION__;
|
| // If the unmask prompt is showing, keep showing the preview. The preview
|
| // will be cleared when the prompt closes.
|
| if (!autofill_manager_->IsShowingUnmaskPrompt())
|
| @@ -159,6 +181,7 @@ void ContentAutofillDriver::PopupHidden() {
|
|
|
| gfx::RectF ContentAutofillDriver::TransformBoundingBoxToViewportCoordinates(
|
| const gfx::RectF& bounding_box) {
|
| + LOG(ERROR) << "bt:" << __PRETTY_FUNCTION__;
|
| content::RenderWidgetHostView* view = render_frame_host_->GetView();
|
| if (!view)
|
| return bounding_box;
|
| @@ -171,6 +194,7 @@ gfx::RectF ContentAutofillDriver::TransformBoundingBoxToViewportCoordinates(
|
| }
|
|
|
| void ContentAutofillDriver::DidInteractWithCreditCardForm() {
|
| + LOG(ERROR) << "bt:" << __PRETTY_FUNCTION__;
|
| // Notify the WebContents about credit card inputs on HTTP pages.
|
| content::WebContents* contents =
|
| content::WebContents::FromRenderFrameHost(render_frame_host_);
|
| @@ -181,27 +205,41 @@ void ContentAutofillDriver::DidInteractWithCreditCardForm() {
|
|
|
| // mojom::AutofillDriver:
|
| void ContentAutofillDriver::FirstUserGestureObserved() {
|
| + LOG(ERROR) << "bt:" << __PRETTY_FUNCTION__;
|
| client_->OnFirstUserGestureObserved();
|
| }
|
|
|
| void ContentAutofillDriver::FormsSeen(const std::vector<FormData>& forms,
|
| base::TimeTicks timestamp) {
|
| + LOG(ERROR) << "bt:" << __PRETTY_FUNCTION__ << forms.size();
|
| + for(auto form: forms) {
|
| + LOG(ERROR) << "bt:" << form;
|
| + }
|
| autofill_manager_->OnFormsSeen(forms, timestamp);
|
| }
|
|
|
| void ContentAutofillDriver::WillSubmitForm(const FormData& form,
|
| base::TimeTicks timestamp) {
|
| - autofill_manager_->OnWillSubmitForm(form, timestamp);
|
| + LOG(ERROR) << "bt:" << __PRETTY_FUNCTION__;
|
| + if (provider_)
|
| + provider_->OnWillSubmitForm(this, form, timestamp);
|
| + else
|
| + autofill_manager_->OnWillSubmitForm(form, timestamp);
|
| }
|
|
|
| void ContentAutofillDriver::FormSubmitted(const FormData& form) {
|
| + LOG(ERROR) << "bt:" << __PRETTY_FUNCTION__;
|
| autofill_manager_->OnFormSubmitted(form);
|
| }
|
|
|
| void ContentAutofillDriver::TextFieldDidChange(const FormData& form,
|
| const FormFieldData& field,
|
| base::TimeTicks timestamp) {
|
| - autofill_manager_->OnTextFieldDidChange(form, field, timestamp);
|
| + LOG(ERROR) << "bt:" << __PRETTY_FUNCTION__;
|
| + if (provider_)
|
| + provider_->OnTextFieldDidChange(this, form, field, timestamp);
|
| + else
|
| + autofill_manager_->OnTextFieldDidChange(form, field, timestamp);
|
| }
|
|
|
| void ContentAutofillDriver::QueryFormFieldAutofill(
|
| @@ -209,38 +247,64 @@ void ContentAutofillDriver::QueryFormFieldAutofill(
|
| const FormData& form,
|
| const FormFieldData& field,
|
| const gfx::RectF& bounding_box) {
|
| - autofill_manager_->OnQueryFormFieldAutofill(id, form, field, bounding_box);
|
| + LOG(ERROR) << "bt:" << __PRETTY_FUNCTION__ << this << " id:" << id;
|
| + LOG(ERROR) << "bt:" << form;
|
| + LOG(ERROR) << "bt:" << field;
|
| + if (provider_)
|
| + provider_->OnQueryFormFieldAutofill(this, id, form, field, bounding_box);
|
| + else
|
| + autofill_manager_->OnQueryFormFieldAutofill(id, form, field, bounding_box);
|
| }
|
|
|
| void ContentAutofillDriver::HidePopup() {
|
| + LOG(ERROR) << "bt:" << __PRETTY_FUNCTION__;
|
| autofill_manager_->OnHidePopup();
|
| }
|
|
|
| void ContentAutofillDriver::FocusNoLongerOnForm() {
|
| - autofill_manager_->OnFocusNoLongerOnForm();
|
| + LOG(ERROR) << "bt:" << __PRETTY_FUNCTION__;
|
| + if (provider_)
|
| + provider_->OnFocusNoLongerOnForm(this);
|
| + else
|
| + autofill_manager_->OnFocusNoLongerOnForm();
|
| }
|
|
|
| void ContentAutofillDriver::DidFillAutofillFormData(const FormData& form,
|
| base::TimeTicks timestamp) {
|
| - autofill_manager_->OnDidFillAutofillFormData(form, timestamp);
|
| + LOG(ERROR) << "bt:" << __PRETTY_FUNCTION__;
|
| + if (provider_)
|
| + provider_->OnDidFillAutofillFormData(this, form, timestamp);
|
| + else
|
| + autofill_manager_->OnDidFillAutofillFormData(form, timestamp);
|
| }
|
|
|
| void ContentAutofillDriver::DidPreviewAutofillFormData() {
|
| + LOG(ERROR) << "bt:" << __PRETTY_FUNCTION__;
|
| autofill_manager_->OnDidPreviewAutofillFormData();
|
| }
|
|
|
| void ContentAutofillDriver::DidEndTextFieldEditing() {
|
| + LOG(ERROR) << "bt:" << __PRETTY_FUNCTION__;
|
| autofill_manager_->OnDidEndTextFieldEditing();
|
| }
|
|
|
| void ContentAutofillDriver::SetDataList(
|
| const std::vector<base::string16>& values,
|
| const std::vector<base::string16>& labels) {
|
| + LOG(ERROR) << "bt:" << __PRETTY_FUNCTION__;
|
| + for(auto v : values) {
|
| + LOG(ERROR) << "bt:" << v;
|
| + }
|
| + for(auto l : labels) {
|
| + LOG(ERROR) << "bt:" << l;
|
| + }
|
| +
|
| autofill_manager_->OnSetDataList(values, labels);
|
| }
|
|
|
| void ContentAutofillDriver::DidNavigateFrame(
|
| content::NavigationHandle* navigation_handle) {
|
| + LOG(ERROR) << "bt:" << __PRETTY_FUNCTION__;
|
| if (navigation_handle->IsInMainFrame() &&
|
| !navigation_handle->IsSameDocument()) {
|
| autofill_manager_->Reset();
|
| @@ -249,15 +313,18 @@ void ContentAutofillDriver::DidNavigateFrame(
|
|
|
| void ContentAutofillDriver::SetAutofillManager(
|
| std::unique_ptr<AutofillManager> manager) {
|
| + LOG(ERROR) << "bt:" << __PRETTY_FUNCTION__;
|
| autofill_manager_ = std::move(manager);
|
| autofill_manager_->SetExternalDelegate(&autofill_external_delegate_);
|
| }
|
|
|
| void ContentAutofillDriver::NotifyFirstUserGestureObservedInTab() {
|
| + LOG(ERROR) << "bt:" << __PRETTY_FUNCTION__;
|
| GetAutofillAgent()->FirstUserGestureObservedInTab();
|
| }
|
|
|
| const mojom::AutofillAgentPtr& ContentAutofillDriver::GetAutofillAgent() {
|
| + LOG(ERROR) << "bt:" << __PRETTY_FUNCTION__;
|
| // Here is a lazy binding, and will not reconnect after connection error.
|
| if (!autofill_agent_) {
|
| render_frame_host_->GetRemoteInterfaces()->GetInterface(
|
|
|