blob: c6f6055f2eebb9e024675473ee5ec726d9b4c2c4 [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_ANDROID_AUTOFILL_BROWSER_ANDROID_AUTOFILL_MANAGER_H_
#define COMPONENTS_ANDROID_AUTOFILL_BROWSER_ANDROID_AUTOFILL_MANAGER_H_
#include "base/memory/weak_ptr.h"
#include "components/autofill/core/browser/autofill_manager.h"
#include "components/autofill/core/common/dense_set.h"
namespace autofill {
class AutofillProvider;
// This class forwards AutofillManager calls to AutofillProvider.
class AndroidAutofillManager : public AutofillManager {
public:
static std::unique_ptr<AutofillManager> Create(
AutofillDriver* driver,
AutofillClient* client,
const std::string& app_locale,
AutofillManager::AutofillDownloadManagerState enable_download_manager);
~AndroidAutofillManager() override;
void OnFocusNoLongerOnForm(bool had_interacted_form) override;
void OnDidFillAutofillFormData(const FormData& form,
const base::TimeTicks timestamp) override;
void OnDidPreviewAutofillFormData() override {}
void OnDidEndTextFieldEditing() override {}
void OnHidePopup() override;
void SelectFieldOptionsDidChange(const FormData& form) override;
void Reset() override;
base::WeakPtr<AndroidAutofillManager> GetWeakPtr() {
return weak_ptr_factory_.GetWeakPtr();
}
bool has_server_prediction() const { return has_server_prediction_; }
protected:
AndroidAutofillManager(
AutofillDriver* driver,
AutofillClient* client,
AutofillManager::AutofillDownloadManagerState enable_download_manager);
void OnFormSubmittedImpl(const FormData& form,
bool known_success,
mojom::SubmissionSource source) override;
void OnTextFieldDidChangeImpl(const FormData& form,
const FormFieldData& field,
const gfx::RectF& bounding_box,
const base::TimeTicks timestamp) override;
void OnTextFieldDidScrollImpl(const FormData& form,
const FormFieldData& field,
const gfx::RectF& bounding_box) override;
void OnQueryFormFieldAutofillImpl(int query_id,
const FormData& form,
const FormFieldData& field,
const gfx::RectF& bounding_box,
bool autoselect_first_suggestion) override;
void OnFocusOnFormFieldImpl(const FormData& form,
const FormFieldData& field,
const gfx::RectF& bounding_box) override;
void OnSelectControlDidChangeImpl(const FormData& form,
const FormFieldData& field,
const gfx::RectF& bounding_box) override;
bool ShouldParseForms(const std::vector<FormData>& forms) override;
void OnBeforeProcessParsedForms() override {}
void OnFormProcessed(const FormData& form,
const FormStructure& form_structure) override {}
void OnAfterProcessParsedForms(
const DenseSet<FormType>& form_types) override {}
void PropagateAutofillPredictions(
content::RenderFrameHost* rfh,
const std::vector<FormStructure*>& forms) override;
void OnServerRequestError(FormSignature form_signature,
AutofillDownloadManager::RequestType request_type,
int http_error) override;
protected:
#ifdef UNIT_TEST
// For the unit tests where WebContents isn't available.
void set_autofill_provider_for_testing(AutofillProvider* autofill_provider) {
autofill_provider_for_testing_ = autofill_provider;
}
#endif // UNIT_TEST
private:
AutofillProvider* GetAutofillProvider();
bool has_server_prediction_ = false;
AutofillProvider* autofill_provider_for_testing_ = nullptr;
base::WeakPtrFactory<AndroidAutofillManager> weak_ptr_factory_{this};
DISALLOW_COPY_AND_ASSIGN(AndroidAutofillManager);
};
} // namespace autofill
#endif // COMPONENTS_ANDROID_AUTOFILL_BROWSER_ANDROID_AUTOFILL_MANAGER_H_