1 // Copyright 2017 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 IOS_WEB_VIEW_INTERNAL_AUTOFILL_WEB_VIEW_AUTOFILL_CLIENT_IOS_H_
6 #define IOS_WEB_VIEW_INTERNAL_AUTOFILL_WEB_VIEW_AUTOFILL_CLIENT_IOS_H_
7 
8 #include <memory>
9 #include <string>
10 #include <vector>
11 
12 #include "base/macros.h"
13 #include "base/memory/weak_ptr.h"
14 #include "components/autofill/core/browser/autocomplete_history_manager.h"
15 #include "components/autofill/core/browser/autofill_client.h"
16 #include "components/autofill/core/browser/logging/log_manager.h"
17 #include "components/autofill/core/browser/payments/card_unmask_delegate.h"
18 #include "components/autofill/core/browser/payments/legal_message_line.h"
19 #include "components/autofill/core/browser/payments/strike_database.h"
20 #include "components/autofill/core/browser/personal_data_manager.h"
21 #include "components/prefs/pref_service.h"
22 #include "components/sync/driver/sync_service.h"
23 #import "ios/web/public/web_state.h"
24 #import "ios/web_view/internal/autofill/cwv_autofill_client_ios_bridge.h"
25 #include "ios/web_view/internal/web_view_browser_state.h"
26 
27 namespace autofill {
28 
29 // WebView implementation of AutofillClient.
30 class WebViewAutofillClientIOS : public AutofillClient {
31  public:
32   static std::unique_ptr<WebViewAutofillClientIOS> Create(
33       web::WebState* web_state,
34       ios_web_view::WebViewBrowserState* browser_state);
35 
36   WebViewAutofillClientIOS(
37       const std::string& locale,
38       PrefService* pref_service,
39       PersonalDataManager* personal_data_manager,
40       AutocompleteHistoryManager* autocomplete_history_manager,
41       web::WebState* web_state,
42       signin::IdentityManager* identity_manager,
43       StrikeDatabase* strike_database,
44       syncer::SyncService* sync_service,
45       std::unique_ptr<autofill::LogManager> log_manager);
46   ~WebViewAutofillClientIOS() override;
47 
48   // AutofillClient:
49   PersonalDataManager* GetPersonalDataManager() override;
50   AutocompleteHistoryManager* GetAutocompleteHistoryManager() override;
51   PrefService* GetPrefs() override;
52   syncer::SyncService* GetSyncService() override;
53   signin::IdentityManager* GetIdentityManager() override;
54   FormDataImporter* GetFormDataImporter() override;
55   payments::PaymentsClient* GetPaymentsClient() override;
56   StrikeDatabase* GetStrikeDatabase() override;
57   ukm::UkmRecorder* GetUkmRecorder() override;
58   ukm::SourceId GetUkmSourceId() override;
59   AddressNormalizer* GetAddressNormalizer() override;
60   const GURL& GetLastCommittedURL() override;
61   security_state::SecurityLevel GetSecurityLevelForUmaHistograms() override;
62   const translate::LanguageState* GetLanguageState() override;
63   void ShowAutofillSettings(bool show_credit_card_settings) override;
64   void ShowUnmaskPrompt(const CreditCard& card,
65                         UnmaskCardReason reason,
66                         base::WeakPtr<CardUnmaskDelegate> delegate) override;
67   void OnUnmaskVerificationResult(PaymentsRpcResult result) override;
68   void ConfirmAccountNameFixFlow(
69       base::OnceCallback<void(const base::string16&)> callback) override;
70   void ConfirmExpirationDateFixFlow(
71       const CreditCard& card,
72       base::OnceCallback<void(const base::string16&, const base::string16&)>
73           callback) override;
74   void ConfirmSaveCreditCardLocally(
75       const CreditCard& card,
76       SaveCreditCardOptions options,
77       LocalSaveCardPromptCallback callback) override;
78   void ConfirmSaveCreditCardToCloud(
79       const CreditCard& card,
80       const LegalMessageLines& legal_message_lines,
81       SaveCreditCardOptions options,
82       UploadSaveCardPromptCallback callback) override;
83   void CreditCardUploadCompleted(bool card_saved) override;
84   void ConfirmCreditCardFillAssist(const CreditCard& card,
85                                    base::OnceClosure callback) override;
86   bool HasCreditCardScanFeature() override;
87   void ScanCreditCard(CreditCardScanCallback callback) override;
88   void ShowAutofillPopup(
89       const AutofillClient::PopupOpenArgs& open_args,
90       base::WeakPtr<AutofillPopupDelegate> delegate) override;
91   void UpdateAutofillPopupDataListValues(
92       const std::vector<base::string16>& values,
93       const std::vector<base::string16>& labels) override;
94   base::span<const Suggestion> GetPopupSuggestions() const override;
95   void PinPopupView() override;
96   AutofillClient::PopupOpenArgs GetReopenPopupArgs() const override;
97   void UpdatePopup(const std::vector<Suggestion>& suggestions,
98                    PopupType popup_type) override;
99   void HideAutofillPopup(PopupHidingReason reason) override;
100   bool IsAutocompleteEnabled() override;
101   void PropagateAutofillPredictions(
102       content::RenderFrameHost* rfh,
103       const std::vector<FormStructure*>& forms) override;
104   void DidFillOrPreviewField(const base::string16& autofilled_value,
105                              const base::string16& profile_full_name) override;
106   bool IsContextSecure() override;
107   bool ShouldShowSigninPromo() override;
108   bool AreServerCardsSupported() override;
109   void ExecuteCommand(int id) override;
110 
111   // RiskDataLoader:
112   void LoadRiskData(
113       base::OnceCallback<void(const std::string&)> callback) override;
114 
115   LogManager* GetLogManager() const override;
116 
set_bridge(id<CWVAutofillClientIOSBridge> bridge)117   void set_bridge(id<CWVAutofillClientIOSBridge> bridge) { bridge_ = bridge; }
118 
119   bool IsQueryIDRelevant(int query_id) override;
120 
121  private:
122   PrefService* pref_service_;
123   PersonalDataManager* personal_data_manager_;
124   AutocompleteHistoryManager* autocomplete_history_manager_;
125   web::WebState* web_state_;
126   __weak id<CWVAutofillClientIOSBridge> bridge_;
127   signin::IdentityManager* identity_manager_;
128   std::unique_ptr<payments::PaymentsClient> payments_client_;
129   std::unique_ptr<FormDataImporter> form_data_importer_;
130   StrikeDatabase* strike_database_;
131   syncer::SyncService* sync_service_ = nullptr;
132   std::unique_ptr<LogManager> log_manager_;
133 
134   DISALLOW_COPY_AND_ASSIGN(WebViewAutofillClientIOS);
135 };
136 
137 }  // namespace autofill
138 
139 #endif  // IOS_WEB_VIEW_INTERNAL_AUTOFILL_WEB_VIEW_AUTOFILL_CLIENT_IOS_H_
140