• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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