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.
5 #ifndef CHROME_BROWSER_UI_AUTOFILL_CHROME_AUTOFILL_CLIENT_H_
6 #define CHROME_BROWSER_UI_AUTOFILL_CHROME_AUTOFILL_CLIENT_H_
10 #include "base/callback.h"
11 #include "base/compiler_specific.h"
12 #include "base/i18n/rtl.h"
13 #include "base/memory/scoped_ptr.h"
14 #include "base/memory/weak_ptr.h"
15 #include "components/autofill/core/browser/autofill_client.h"
16 #include "components/autofill/core/browser/ui/card_unmask_prompt_controller_impl.h"
17 #include "components/ui/zoom/zoom_observer.h"
18 #include "content/public/browser/web_contents_observer.h"
19 #include "content/public/browser/web_contents_user_data.h"
22 struct FrameNavigateParams
;
23 struct LoadCommittedDetails
;
29 class AutofillDialogController
;
30 class AutofillPopupControllerImpl
;
31 class CreditCardScannerController
;
34 // Chrome implementation of AutofillClient.
35 class ChromeAutofillClient
36 : public AutofillClient
,
37 public content::WebContentsUserData
<ChromeAutofillClient
>,
38 public content::WebContentsObserver
,
39 public ui_zoom::ZoomObserver
{
41 ~ChromeAutofillClient() override
;
43 // Called when the tab corresponding to |this| instance is activated.
47 PersonalDataManager
* GetPersonalDataManager() override
;
48 scoped_refptr
<AutofillWebDataService
> GetDatabase() override
;
49 PrefService
* GetPrefs() override
;
50 IdentityProvider
* GetIdentityProvider() override
;
51 rappor::RapporService
* GetRapporService() override
;
52 void HideRequestAutocompleteDialog() override
;
53 void ShowAutofillSettings() override
;
54 void ShowUnmaskPrompt(const CreditCard
& card
,
55 base::WeakPtr
<CardUnmaskDelegate
> delegate
) override
;
56 void OnUnmaskVerificationResult(GetRealPanResult result
) override
;
57 void ConfirmSaveCreditCard(const base::Closure
& save_card_callback
) override
;
58 bool HasCreditCardScanFeature() override
;
59 void ScanCreditCard(const CreditCardScanCallback
& callback
) override
;
60 void ShowRequestAutocompleteDialog(
62 content::RenderFrameHost
* render_frame_host
,
63 const ResultCallback
& callback
) override
;
64 void ShowAutofillPopup(
65 const gfx::RectF
& element_bounds
,
66 base::i18n::TextDirection text_direction
,
67 const std::vector
<autofill::Suggestion
>& suggestions
,
68 base::WeakPtr
<AutofillPopupDelegate
> delegate
) override
;
69 void UpdateAutofillPopupDataListValues(
70 const std::vector
<base::string16
>& values
,
71 const std::vector
<base::string16
>& labels
) override
;
72 void HideAutofillPopup() override
;
73 bool IsAutocompleteEnabled() override
;
74 void PropagateAutofillPredictions(
75 content::RenderFrameHost
* rfh
,
76 const std::vector
<autofill::FormStructure
*>& forms
) override
;
77 void DidFillOrPreviewField(const base::string16
& autofilled_value
,
78 const base::string16
& profile_full_name
) override
;
79 void OnFirstUserGestureObserved() override
;
80 void LinkClicked(const GURL
& url
, WindowOpenDisposition disposition
) override
;
81 bool IsContextSecure(const GURL
& form_origin
) override
;
83 // content::WebContentsObserver implementation.
84 void RenderFrameDeleted(content::RenderFrameHost
* rfh
) override
;
85 void DidNavigateAnyFrame(
86 content::RenderFrameHost
* render_frame_host
,
87 const content::LoadCommittedDetails
& details
,
88 const content::FrameNavigateParams
& params
) override
;
89 void MainFrameWasResized(bool width_changed
) override
;
90 void WebContentsDestroyed() override
;
92 // ZoomObserver implementation.
94 const ui_zoom::ZoomController::ZoomChangedEventData
& data
) override
;
96 // Exposed for testing.
97 AutofillDialogController
* GetDialogControllerForTesting() {
98 return dialog_controller_
.get();
100 void SetDialogControllerForTesting(
101 const base::WeakPtr
<AutofillDialogController
>& dialog_controller
) {
102 dialog_controller_
= dialog_controller
;
106 explicit ChromeAutofillClient(content::WebContents
* web_contents
);
107 friend class content::WebContentsUserData
<ChromeAutofillClient
>;
109 base::WeakPtr
<AutofillDialogController
> dialog_controller_
;
110 base::WeakPtr
<AutofillPopupControllerImpl
> popup_controller_
;
111 CardUnmaskPromptControllerImpl unmask_controller_
;
113 // The last render frame that called requestAutocomplete.
114 content::RenderFrameHost
* last_rfh_to_rac_
;
116 // The identity provider, used for Wallet integration.
117 scoped_ptr
<IdentityProvider
> identity_provider_
;
119 DISALLOW_COPY_AND_ASSIGN(ChromeAutofillClient
);
122 } // namespace autofill
124 #endif // CHROME_BROWSER_UI_AUTOFILL_CHROME_AUTOFILL_CLIENT_H_