1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CHROME_BROWSER_UI_AUTOFILL_CHROME_AUTOFILL_CLIENT_H_ 6 #define CHROME_BROWSER_UI_AUTOFILL_CHROME_AUTOFILL_CLIENT_H_ 7 8 #include "base/callback.h" 9 #include "base/compiler_specific.h" 10 #include "base/i18n/rtl.h" 11 #include "base/memory/weak_ptr.h" 12 #include "components/autofill/core/browser/autofill_client.h" 13 #include "content/public/browser/web_contents_observer.h" 14 #include "content/public/browser/web_contents_user_data.h" 15 16 namespace content { 17 struct FrameNavigateParams; 18 struct LoadCommittedDetails; 19 class WebContents; 20 } 21 22 namespace autofill { 23 24 class AutofillDialogController; 25 class AutofillKeystoneBridgeWrapper; 26 class AutofillPopupControllerImpl; 27 struct FormData; 28 29 // Chrome implementation of AutofillClient. 30 class ChromeAutofillClient 31 : public AutofillClient, 32 public content::WebContentsUserData<ChromeAutofillClient>, 33 public content::WebContentsObserver { 34 public: 35 virtual ~ChromeAutofillClient(); 36 37 // Called when the tab corresponding to |this| instance is activated. 38 void TabActivated(); 39 40 // AutofillClient: 41 virtual PersonalDataManager* GetPersonalDataManager() OVERRIDE; 42 virtual scoped_refptr<AutofillWebDataService> GetDatabase() OVERRIDE; 43 virtual PrefService* GetPrefs() OVERRIDE; 44 virtual void HideRequestAutocompleteDialog() OVERRIDE; 45 virtual void ShowAutofillSettings() OVERRIDE; 46 virtual void ConfirmSaveCreditCard( 47 const AutofillMetrics& metric_logger, 48 const base::Closure& save_card_callback) OVERRIDE; 49 virtual void ShowRequestAutocompleteDialog( 50 const FormData& form, 51 const GURL& source_url, 52 const ResultCallback& callback) OVERRIDE; 53 virtual void ShowAutofillPopup( 54 const gfx::RectF& element_bounds, 55 base::i18n::TextDirection text_direction, 56 const std::vector<base::string16>& values, 57 const std::vector<base::string16>& labels, 58 const std::vector<base::string16>& icons, 59 const std::vector<int>& identifiers, 60 base::WeakPtr<AutofillPopupDelegate> delegate) OVERRIDE; 61 virtual void UpdateAutofillPopupDataListValues( 62 const std::vector<base::string16>& values, 63 const std::vector<base::string16>& labels) OVERRIDE; 64 virtual void HideAutofillPopup() OVERRIDE; 65 virtual bool IsAutocompleteEnabled() OVERRIDE; 66 virtual void DetectAccountCreationForms( 67 const std::vector<autofill::FormStructure*>& forms) OVERRIDE; 68 virtual void DidFillOrPreviewField( 69 const base::string16& autofilled_value, 70 const base::string16& profile_full_name) OVERRIDE; 71 72 // content::WebContentsObserver implementation. 73 virtual void WebContentsDestroyed() OVERRIDE; 74 75 // Exposed for testing. GetDialogControllerForTesting()76 AutofillDialogController* GetDialogControllerForTesting() { 77 return dialog_controller_.get(); 78 } SetDialogControllerForTesting(const base::WeakPtr<AutofillDialogController> & dialog_controller)79 void SetDialogControllerForTesting( 80 const base::WeakPtr<AutofillDialogController>& dialog_controller) { 81 dialog_controller_ = dialog_controller; 82 } 83 84 private: 85 #if defined(OS_MACOSX) && !defined(OS_IOS) 86 // Creates |bridge_wrapper_|, which is responsible for dealing with Keystone 87 // notifications. 88 void RegisterForKeystoneNotifications(); 89 90 // Deletes |bridge_wrapper_|. 91 void UnregisterFromKeystoneNotifications(); 92 #endif // defined(OS_MACOSX) && !defined(OS_IOS) 93 94 explicit ChromeAutofillClient(content::WebContents* web_contents); 95 friend class content::WebContentsUserData<ChromeAutofillClient>; 96 97 content::WebContents* const web_contents_; 98 base::WeakPtr<AutofillDialogController> dialog_controller_; 99 base::WeakPtr<AutofillPopupControllerImpl> popup_controller_; 100 101 #if defined(OS_MACOSX) && !defined(OS_IOS) 102 // Listens to Keystone notifications and passes relevant ones on to the 103 // PersonalDataManager. 104 // 105 // The class of this member must remain a forward declaration, even in the 106 // .cc implementation file, since the class is defined in a Mac-only 107 // implementation file. This means that the pointer cannot be wrapped in a 108 // scoped_ptr. 109 AutofillKeystoneBridgeWrapper* bridge_wrapper_; 110 #endif // defined(OS_MACOSX) && !defined(OS_IOS) 111 112 DISALLOW_COPY_AND_ASSIGN(ChromeAutofillClient); 113 }; 114 115 } // namespace autofill 116 117 #endif // CHROME_BROWSER_UI_AUTOFILL_CHROME_AUTOFILL_CLIENT_H_ 118