Home | History | Annotate | Download | only in autofill
      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.
     76   AutofillDialogController* GetDialogControllerForTesting() {
     77     return dialog_controller_.get();
     78   }
     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