File: android_autofill_client.h

package info (click to toggle)
chromium 139.0.7258.127-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 6,122,068 kB
  • sloc: cpp: 35,100,771; ansic: 7,163,530; javascript: 4,103,002; python: 1,436,920; asm: 946,517; xml: 746,709; pascal: 187,653; perl: 88,691; sh: 88,436; objc: 79,953; sql: 51,488; cs: 44,583; fortran: 24,137; makefile: 22,147; tcl: 15,277; php: 13,980; yacc: 8,984; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (171 lines) | stat: -rw-r--r-- 7,435 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
// Copyright 2014 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef COMPONENTS_ANDROID_AUTOFILL_BROWSER_ANDROID_AUTOFILL_CLIENT_H_
#define COMPONENTS_ANDROID_AUTOFILL_BROWSER_ANDROID_AUTOFILL_CLIENT_H_

#include <memory>
#include <string>
#include <vector>

#include "base/android/jni_weak_ref.h"
#include "base/compiler_specific.h"
#include "base/dcheck_is_on.h"
#include "base/functional/callback_forward.h"
#include "base/memory/raw_ptr.h"
#include "components/autofill/content/browser/content_autofill_client.h"
#include "components/autofill/content/browser/content_autofill_driver.h"
#include "components/autofill/core/browser/autofill_trigger_source.h"
#include "components/autofill/core/browser/crowdsourcing/votes_uploader.h"
#include "components/autofill/core/browser/data_manager/valuables/valuables_data_manager.h"
#include "components/autofill/core/browser/metrics/form_interactions_ukm_logger.h"
#include "components/autofill/core/browser/payments/legal_message_line.h"
#include "components/credential_management/content_credential_manager.h"
#include "content/public/browser/web_contents_user_data.h"
#include "ui/android/view_android.h"

namespace autofill {
class AutocompleteHistoryManager;
class AutofillSuggestionDelegate;
class PersonalDataManager;
class StrikeDatabase;
enum class SuggestionType;
}  // namespace autofill

namespace content {
class WebContents;
}

namespace syncer {
class SyncService;
}

class PersonalDataManager;
class PrefService;

namespace android_autofill {

// One Android implementation of the AutofillClient. If used, the Android
// Autofill framework is responsible for autofill and password management.
//
// This client is
//   a) always used on WebView, and
//   b) used on Clank if users switch to a 3P provider and thus disable the
//      built-in `BrowserAutofillManager`.
//
// By using this client, the embedder responds to requests from the Android
// Autofill API asking for a "virtual view structure". This class defers to
// parsing logic in renderer and components/autofill to identify forms. The
// forms are translated into that virtual view structure by the Java-side of
// this component (see AndroidAutofillClient.java using AutofillProvider.java).
// Any higher layer only needs to forward the API requests to this client. The
// same applies to filling: the data filling happens in renderer code and only
// requires the embedder to forward the data to be filled.
// The UI (except for datalist dropdowns) are handled entirely by the Platform.
// Neither WebView nor Chrome can control whether e.g. a dropdown or
// keyboard-inlined suggestion are served to the user.
//
// It is created by either AwContents or ChromeAutofillClient and owned by the
// WebContents that it is attached to.
//
// BEWARE OF SUBCLASSING in tests: virtual function calls during construction
// may lead to very surprising behavior. The class is not `final` because one
// test derives from it. Member functions should be final unless they need to be
// mocked or overridden in subclasses and you have verified that they are not
// called, directly or indirectly, from the constructor.
class AndroidAutofillClient : public autofill::ContentAutofillClient {
 public:
  static void CreateForWebContents(content::WebContents* contents);

  AndroidAutofillClient(const AndroidAutofillClient&) = delete;
  AndroidAutofillClient& operator=(const AndroidAutofillClient&) = delete;

  ~AndroidAutofillClient() override;

  // AutofillClient:
  base::WeakPtr<AutofillClient> GetWeakPtr() final;
  const std::string& GetAppLocale() const final;
  bool IsOffTheRecord() const final;
  scoped_refptr<network::SharedURLLoaderFactory> GetURLLoaderFactory() final;
  autofill::AutofillCrowdsourcingManager& GetCrowdsourcingManager() final;
  autofill::VotesUploader& GetVotesUploader() override;
  autofill::PersonalDataManager& GetPersonalDataManager() final;
  autofill::ValuablesDataManager* GetValuablesDataManager() override;
  autofill::EntityDataManager* GetEntityDataManager() override;
  autofill::SingleFieldFillRouter& GetSingleFieldFillRouter() final;
  autofill::AutocompleteHistoryManager* GetAutocompleteHistoryManager() final;
  PrefService* GetPrefs() final;
  const PrefService* GetPrefs() const final;
  syncer::SyncService* GetSyncService() final;
  signin::IdentityManager* GetIdentityManager() final;
  const signin::IdentityManager* GetIdentityManager() const final;
  autofill::FormDataImporter* GetFormDataImporter() final;
  autofill::StrikeDatabase* GetStrikeDatabase() final;
  ukm::UkmRecorder* GetUkmRecorder() final;
  autofill::AddressNormalizer* GetAddressNormalizer() final;
  const GURL& GetLastCommittedPrimaryMainFrameURL() const final;
  url::Origin GetLastCommittedPrimaryMainFrameOrigin() const final;
  security_state::SecurityLevel GetSecurityLevelForUmaHistograms() final;
  const translate::LanguageState* GetLanguageState() final;
  translate::TranslateDriver* GetTranslateDriver() final;
  void ShowAutofillSettings(autofill::SuggestionType suggestion_type) final;
  void ConfirmSaveAddressProfile(
      const autofill::AutofillProfile& profile,
      const autofill::AutofillProfile* original_profile,
      bool is_migration_to_account,
      AddressProfileSavePromptCallback callback) final;
  SuggestionUiSessionId ShowAutofillSuggestions(
      const autofill::AutofillClient::PopupOpenArgs& open_args,
      base::WeakPtr<autofill::AutofillSuggestionDelegate> delegate) final;
  void UpdateAutofillDataListValues(
      base::span<const autofill::SelectOption> datalist) final;
  void HideAutofillSuggestions(autofill::SuggestionHidingReason reason) final;
  bool IsAutofillEnabled() const final;
  bool IsAutofillProfileEnabled() const final;
  bool IsAutofillPaymentMethodsEnabled() const final;
  bool IsAutocompleteEnabled() const final;
  bool IsPasswordManagerEnabled() const final;
  void DidFillForm(autofill::AutofillTriggerSource trigger_source,
                   bool is_refill) final;
  bool IsContextSecure() const final;
  autofill::FormInteractionsFlowId GetCurrentFormInteractionsFlowId() final;
  autofill::autofill_metrics::FormInteractionsUkmLogger&
  GetFormInteractionsUkmLogger() final;

  // ContentAutofillClient:
  std::unique_ptr<autofill::AutofillManager> CreateManager(
      base::PassKey<autofill::ContentAutofillDriver> pass_key,
      autofill::ContentAutofillDriver& driver) final;

  credential_management::ContentCredentialManager* GetContentCredentialManager()
      override;

 protected:
  // Protected for testing.
  explicit AndroidAutofillClient(content::WebContents* web_contents);

 private:
  friend class content::WebContentsUserData<AndroidAutofillClient>;

  content::WebContents& GetWebContents() const;

  JavaObjectWeakGlobalRef java_ref_;

  std::unique_ptr<autofill::AutofillCrowdsourcingManager>
      crowdsourcing_manager_;

  autofill::VotesUploader votes_uploader_{this};

  autofill::autofill_metrics::FormInteractionsUkmLogger
      form_interactions_ukm_logger_{this};

  // Content credential manager to handle navigator.credentials calls.
  credential_management::ContentCredentialManager content_credential_manager_;

  base::WeakPtrFactory<AndroidAutofillClient> weak_ptr_factory_{this};
};

}  // namespace android_autofill

#endif  // COMPONENTS_ANDROID_AUTOFILL_BROWSER_ANDROID_AUTOFILL_CLIENT_H_