// Copyright 2013 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 ANDROID_WEBVIEW_BROWSER_AW_AUTOFILL_MANAGER_DELEGATE_H_ #define ANDROID_WEBVIEW_BROWSER_AW_AUTOFILL_MANAGER_DELEGATE_H_ #include #include #include "base/android/jni_helper.h" #include "base/basictypes.h" #include "base/compiler_specific.h" #include "base/prefs/pref_registry_simple.h" #include "base/prefs/pref_service_factory.h" #include "components/autofill/core/browser/autofill_manager_delegate.h" #include "content/public/browser/web_contents_user_data.h" namespace autofill { class AutofillMetrics; class AutofillPopupDelegate; class CreditCard; class FormStructure; class PasswordGenerator; class PersonalDataManager; struct FormData; } namespace content { class WebContents; } namespace gfx { class RectF; } class PersonalDataManager; class PrefService; namespace android_webview { // Manager delegate for the autofill functionality. Android webview // supports enabling autocomplete feature for each webview instance // (different than the browser which supports enabling/disabling for // a profile). Since there is only one pref service for a given browser // context, we cannot enable this feature via UserPrefs. Rather, we always // keep the feature enabled at the pref service, and control it via // the delegates. class AwAutofillManagerDelegate : public autofill::AutofillManagerDelegate, public content::WebContentsUserData { public: virtual ~AwAutofillManagerDelegate(); void SetSaveFormData(bool enabled); bool GetSaveFormData(); // AutofillManagerDelegate implementation. virtual autofill::PersonalDataManager* GetPersonalDataManager() OVERRIDE; virtual scoped_refptr GetDatabase() OVERRIDE; virtual PrefService* GetPrefs() OVERRIDE; virtual void HideRequestAutocompleteDialog() OVERRIDE; virtual void ShowAutofillSettings() OVERRIDE; virtual void ConfirmSaveCreditCard( const autofill::AutofillMetrics& metric_logger, const base::Closure& save_card_callback) OVERRIDE; virtual void ShowRequestAutocompleteDialog( const autofill::FormData& form, const GURL& source_url, const base::Callback& callback) OVERRIDE; virtual void ShowAutofillPopup( const gfx::RectF& element_bounds, base::i18n::TextDirection text_direction, const std::vector& values, const std::vector& labels, const std::vector& icons, const std::vector& identifiers, base::WeakPtr delegate) OVERRIDE; virtual void UpdateAutofillPopupDataListValues( const std::vector& values, const std::vector& labels) OVERRIDE; virtual void HideAutofillPopup() OVERRIDE; virtual bool IsAutocompleteEnabled() OVERRIDE; virtual void DetectAccountCreationForms( const std::vector& forms) OVERRIDE; virtual void DidFillOrPreviewField( const base::string16& autofilled_value, const base::string16& profile_full_name) OVERRIDE; void SuggestionSelected(JNIEnv* env, jobject obj, jint position); private: AwAutofillManagerDelegate(content::WebContents* web_contents); friend class content::WebContentsUserData; void ShowAutofillPopupImpl(const gfx::RectF& element_bounds, const std::vector& values, const std::vector& labels, const std::vector& identifiers); // The web_contents associated with this delegate. content::WebContents* web_contents_; bool save_form_data_; JavaObjectWeakGlobalRef java_ref_; // The current Autofill query values. std::vector values_; std::vector identifiers_; base::WeakPtr delegate_; DISALLOW_COPY_AND_ASSIGN(AwAutofillManagerDelegate); }; bool RegisterAwAutofillManagerDelegate(JNIEnv* env); } // namespace android_webview #endif // ANDROID_WEBVIEW_BROWSER_AW_AUTOFILL_MANAGER_DELEGATE_H_