Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(11)

Side by Side Diff: components/autofill/content/renderer/autofill_agent.h

Issue 2007473004: [Autofill] Migrate ContentAutofillDriver<-->AutofillAgent IPCs to mojo. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix unit tests -- separate to a new CL 2098743002 Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef COMPONENTS_AUTOFILL_CONTENT_RENDERER_AUTOFILL_AGENT_H_ 5 #ifndef COMPONENTS_AUTOFILL_CONTENT_RENDERER_AUTOFILL_AGENT_H_
6 #define COMPONENTS_AUTOFILL_CONTENT_RENDERER_AUTOFILL_AGENT_H_ 6 #define COMPONENTS_AUTOFILL_CONTENT_RENDERER_AUTOFILL_AGENT_H_
7 7
8 #include <set> 8 #include <set>
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/compiler_specific.h" 11 #include "base/compiler_specific.h"
12 #include "base/macros.h" 12 #include "base/macros.h"
13 #include "base/memory/weak_ptr.h" 13 #include "base/memory/weak_ptr.h"
14 #include "base/time/time.h" 14 #include "base/time/time.h"
15 #include "components/autofill/content/public/interfaces/autofill_agent.mojom.h" 15 #include "components/autofill/content/public/interfaces/autofill_agent.mojom.h"
16 #include "components/autofill/content/public/interfaces/autofill_driver.mojom.h" 16 #include "components/autofill/content/public/interfaces/autofill_driver.mojom.h"
17 #include "components/autofill/content/renderer/form_cache.h" 17 #include "components/autofill/content/renderer/form_cache.h"
18 #include "components/autofill/content/renderer/page_click_listener.h" 18 #include "components/autofill/content/renderer/page_click_listener.h"
19 #include "content/public/renderer/render_frame_observer.h" 19 #include "content/public/renderer/render_frame_observer.h"
20 #include "content/public/renderer/render_view_observer.h" 20 #include "content/public/renderer/render_view_observer.h"
21 #include "mojo/public/cpp/bindings/binding_set.h" 21 #include "mojo/public/cpp/bindings/binding.h"
22 #include "third_party/WebKit/public/web/WebAutofillClient.h" 22 #include "third_party/WebKit/public/web/WebAutofillClient.h"
23 #include "third_party/WebKit/public/web/WebFormControlElement.h" 23 #include "third_party/WebKit/public/web/WebFormControlElement.h"
24 #include "third_party/WebKit/public/web/WebFormElement.h" 24 #include "third_party/WebKit/public/web/WebFormElement.h"
25 #include "third_party/WebKit/public/web/WebInputElement.h" 25 #include "third_party/WebKit/public/web/WebInputElement.h"
26 26
27 namespace blink { 27 namespace blink {
28 class WebNode; 28 class WebNode;
29 class WebView; 29 class WebView;
30 } 30 }
31 31
(...skipping 20 matching lines...) Expand all
52 // PasswordAutofillAgent is guaranteed to outlive AutofillAgent. 52 // PasswordAutofillAgent is guaranteed to outlive AutofillAgent.
53 // PasswordGenerationAgent may be NULL. If it is not, then it is also 53 // PasswordGenerationAgent may be NULL. If it is not, then it is also
54 // guaranteed to outlive AutofillAgent. 54 // guaranteed to outlive AutofillAgent.
55 AutofillAgent(content::RenderFrame* render_frame, 55 AutofillAgent(content::RenderFrame* render_frame,
56 PasswordAutofillAgent* password_autofill_manager, 56 PasswordAutofillAgent* password_autofill_manager,
57 PasswordGenerationAgent* password_generation_agent); 57 PasswordGenerationAgent* password_generation_agent);
58 ~AutofillAgent() override; 58 ~AutofillAgent() override;
59 59
60 void BindRequest(mojom::AutofillAgentRequest request); 60 void BindRequest(mojom::AutofillAgentRequest request);
61 61
62 const mojom::AutofillDriverPtr& GetMojoAutofillDriver();
63
64 // mojom::AutofillAgent:
65 void FirstUserGestureObservedInTab() override;
66 void FillForm(int32_t id, const FormData& form) override;
67 void PreviewForm(int32_t id, const FormData& form) override;
68 void FieldTypePredictionsAvailable(
69 mojo::Array<FormDataPredictions> forms) override;
70 void ClearForm() override;
71 void ClearPreviewedForm() override;
72 void FillFieldWithValue(const mojo::String& value) override;
73 void PreviewFieldWithValue(const mojo::String& value) override;
74 void AcceptDataListSuggestion(const mojo::String& value) override;
75 void FillPasswordSuggestion(const mojo::String& username,
76 const mojo::String& password) override;
77 void PreviewPasswordSuggestion(const mojo::String& username,
78 const mojo::String& password) override;
79 void ShowInitialPasswordAccountSuggestions(
80 int32_t key,
81 const PasswordFormFillData& form_data) override;
82
62 private: 83 private:
63 // Functor used as a simplified comparison function for FormData. Only 84 // Functor used as a simplified comparison function for FormData. Only
64 // compares forms at a high level (notably name, origin, action). 85 // compares forms at a high level (notably name, origin, action).
65 struct FormDataCompare { 86 struct FormDataCompare {
66 bool operator()(const FormData& lhs, const FormData& rhs) const; 87 bool operator()(const FormData& lhs, const FormData& rhs) const;
67 }; 88 };
68 89
69 // Thunk class for RenderViewObserver methods that haven't yet been migrated 90 // Thunk class for RenderViewObserver methods that haven't yet been migrated
70 // to RenderFrameObserver. Should eventually be removed. 91 // to RenderFrameObserver. Should eventually be removed.
71 // http://crbug.com/433486 92 // http://crbug.com/433486
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 // be elided because of the current value of |element| (relevant for inline 132 // be elided because of the current value of |element| (relevant for inline
112 // autocomplete). 133 // autocomplete).
113 bool show_full_suggestion_list; 134 bool show_full_suggestion_list;
114 135
115 // Specifies that only show a suggestions box if |element| is part of a 136 // Specifies that only show a suggestions box if |element| is part of a
116 // password form, otherwise show no suggestions. 137 // password form, otherwise show no suggestions.
117 bool show_password_suggestions_only; 138 bool show_password_suggestions_only;
118 }; 139 };
119 140
120 // content::RenderFrameObserver: 141 // content::RenderFrameObserver:
121 bool OnMessageReceived(const IPC::Message& message) override;
122 void DidCommitProvisionalLoad(bool is_new_navigation, 142 void DidCommitProvisionalLoad(bool is_new_navigation,
123 bool is_same_page_navigation) override; 143 bool is_same_page_navigation) override;
124 void DidFinishDocumentLoad() override; 144 void DidFinishDocumentLoad() override;
125 void WillSendSubmitEvent(const blink::WebFormElement& form) override; 145 void WillSendSubmitEvent(const blink::WebFormElement& form) override;
126 void WillSubmitForm(const blink::WebFormElement& form) override; 146 void WillSubmitForm(const blink::WebFormElement& form) override;
127 void DidChangeScrollOffset() override; 147 void DidChangeScrollOffset() override;
128 void FocusedNodeChanged(const blink::WebNode& node) override; 148 void FocusedNodeChanged(const blink::WebNode& node) override;
129 void OnDestruct() override; 149 void OnDestruct() override;
130 150
131 // Fires IPC messages for a given form submission. Will always fire 151 // Fires IPC messages for a given form submission. Will always fire
(...skipping 24 matching lines...) Expand all
156 const blink::WebInputElement& element, 176 const blink::WebInputElement& element,
157 const blink::WebKeyboardEvent& event) override; 177 const blink::WebKeyboardEvent& event) override;
158 void setIgnoreTextChanges(bool ignore) override; 178 void setIgnoreTextChanges(bool ignore) override;
159 void didAssociateFormControls( 179 void didAssociateFormControls(
160 const blink::WebVector<blink::WebNode>& nodes) override; 180 const blink::WebVector<blink::WebNode>& nodes) override;
161 void openTextDataListChooser(const blink::WebInputElement& element) override; 181 void openTextDataListChooser(const blink::WebInputElement& element) override;
162 void dataListOptionsChanged(const blink::WebInputElement& element) override; 182 void dataListOptionsChanged(const blink::WebInputElement& element) override;
163 void firstUserGestureObserved() override; 183 void firstUserGestureObserved() override;
164 void ajaxSucceeded() override; 184 void ajaxSucceeded() override;
165 185
166 void OnFieldTypePredictionsAvailable(
167 const std::vector<FormDataPredictions>& forms);
168 void OnFillForm(int query_id, const FormData& form);
169 void OnPing(); 186 void OnPing();
170 void OnPreviewForm(int query_id, const FormData& form);
171
172 // mojom::AutofillAgent:
173 void FirstUserGestureObservedInTab() override;
174
175 // For external Autofill selection.
176 void OnClearForm();
177 void OnClearPreviewedForm();
178 void OnFillFieldWithValue(const base::string16& value);
179 void OnPreviewFieldWithValue(const base::string16& value);
180 void OnAcceptDataListSuggestion(const base::string16& value);
181 void OnFillPasswordSuggestion(const base::string16& username,
182 const base::string16& password);
183 void OnPreviewPasswordSuggestion(const base::string16& username,
184 const base::string16& password);
185 void OnShowInitialPasswordAccountSuggestions(
186 int key,
187 const PasswordFormFillData& form_data);
188 187
189 // Called when a same-page navigation is detected. 188 // Called when a same-page navigation is detected.
190 void OnSamePageNavigationCompleted(); 189 void OnSamePageNavigationCompleted();
191 190
192 // Called in a posted task by textFieldDidChange() to work-around a WebKit bug 191 // Called in a posted task by textFieldDidChange() to work-around a WebKit bug
193 // http://bugs.webkit.org/show_bug.cgi?id=16976 192 // http://bugs.webkit.org/show_bug.cgi?id=16976
194 void TextFieldDidChangeImpl(const blink::WebFormControlElement& element); 193 void TextFieldDidChangeImpl(const blink::WebFormControlElement& element);
195 194
196 // Shows the autofill suggestions for |element|. This call is asynchronous 195 // Shows the autofill suggestions for |element|. This call is asynchronous
197 // and may or may not lead to the showing of a suggestion popup (no popup is 196 // and may or may not lead to the showing of a suggestion popup (no popup is
198 // shown if there are no available suggestions). 197 // shown if there are no available suggestions).
199 void ShowSuggestions(const blink::WebFormControlElement& element, 198 void ShowSuggestions(const blink::WebFormControlElement& element,
200 const ShowSuggestionsOptions& options); 199 const ShowSuggestionsOptions& options);
201 200
202 // Queries the browser for Autocomplete and Autofill suggestions for the given 201 // Queries the browser for Autocomplete and Autofill suggestions for the given
203 // |element|. 202 // |element|.
204 void QueryAutofillSuggestions(const blink::WebFormControlElement& element); 203 void QueryAutofillSuggestions(const blink::WebFormControlElement& element);
205 204
206 // Sets the element value to reflect the selected |suggested_value|. 205 // Sets the element value to reflect the selected |suggested_value|.
207 void AcceptDataListSuggestion(const base::string16& suggested_value); 206 void DoAcceptDataListSuggestion(const base::string16& suggested_value);
208 207
209 // Fills |form| and |field| with the FormData and FormField corresponding to 208 // Fills |form| and |field| with the FormData and FormField corresponding to
210 // |node|. Returns true if the data was found; and false otherwise. 209 // |node|. Returns true if the data was found; and false otherwise.
211 bool FindFormAndFieldForNode( 210 bool FindFormAndFieldForNode(
212 const blink::WebNode& node, 211 const blink::WebNode& node,
213 FormData* form, 212 FormData* form,
214 FormFieldData* field) WARN_UNUSED_RESULT; 213 FormFieldData* field) WARN_UNUSED_RESULT;
215 214
216 // Set |node| to display the given |value|. 215 // Set |node| to display the given |value|.
217 void FillFieldWithValue(const base::string16& value, 216 void DoFillFieldWithValue(const base::string16& value,
218 blink::WebInputElement* node); 217 blink::WebInputElement* node);
219 218
220 // Set |node| to display the given |value| as a preview. The preview is 219 // Set |node| to display the given |value| as a preview. The preview is
221 // visible on screen to the user, but not visible to the page via the DOM or 220 // visible on screen to the user, but not visible to the page via the DOM or
222 // JavaScript. 221 // JavaScript.
223 void PreviewFieldWithValue(const base::string16& value, 222 void DoPreviewFieldWithValue(const base::string16& value,
224 blink::WebInputElement* node); 223 blink::WebInputElement* node);
225 224
226 // Notifies browser of new fillable forms in |render_frame|. 225 // Notifies browser of new fillable forms in |render_frame|.
227 void ProcessForms(); 226 void ProcessForms();
228 227
229 // Sends a message to the browser that the form is about to be submitted, 228 // Sends a message to the browser that the form is about to be submitted,
230 // only if the particular message has not been previously submitted for the 229 // only if the particular message has not been previously submitted for the
231 // form in the current frame. 230 // form in the current frame.
232 // Additionally, depending on |send_submitted_event| a message is sent to the 231 // Additionally, depending on |send_submitted_event| a message is sent to the
233 // browser that the form was submitted. 232 // browser that the form was submitted.
234 void SendFormEvents(const blink::WebFormElement& form, 233 void SendFormEvents(const blink::WebFormElement& form,
235 bool send_submitted_event); 234 bool send_submitted_event);
236 235
237 // Hides any currently showing Autofill popup. 236 // Hides any currently showing Autofill popup.
238 void HidePopup(); 237 void HidePopup();
239 238
240 // Returns true if the text field change is due to a user gesture. Can be 239 // Returns true if the text field change is due to a user gesture. Can be
241 // overriden in tests. 240 // overriden in tests.
242 virtual bool IsUserGesture() const; 241 virtual bool IsUserGesture() const;
243 242
244 void ConnectToMojoAutofillDriverIfNeeded();
245
246 // Formerly cached forms for all frames, now only caches forms for the current 243 // Formerly cached forms for all frames, now only caches forms for the current
247 // frame. 244 // frame.
248 FormCache form_cache_; 245 FormCache form_cache_;
249 246
250 // Keeps track of the forms for which a "will submit" message has been sent in 247 // Keeps track of the forms for which a "will submit" message has been sent in
251 // this frame's current load. We use a simplified comparison function. 248 // this frame's current load. We use a simplified comparison function.
252 std::set<FormData, FormDataCompare> submitted_forms_; 249 std::set<FormData, FormDataCompare> submitted_forms_;
253 250
254 PasswordAutofillAgent* password_autofill_agent_; // Weak reference. 251 PasswordAutofillAgent* password_autofill_agent_; // Weak reference.
255 PasswordGenerationAgent* password_generation_agent_; // Weak reference. 252 PasswordGenerationAgent* password_generation_agent_; // Weak reference.
(...skipping 26 matching lines...) Expand all
282 // performance improvement, so that the IPC channel isn't flooded with 279 // performance improvement, so that the IPC channel isn't flooded with
283 // messages to close the Autofill popup when it can't possibly be showing. 280 // messages to close the Autofill popup when it can't possibly be showing.
284 bool is_popup_possibly_visible_; 281 bool is_popup_possibly_visible_;
285 282
286 // If the generation popup is possibly visible. This is tracked to prevent 283 // If the generation popup is possibly visible. This is tracked to prevent
287 // generation UI from displaying at the same time as password manager UI. 284 // generation UI from displaying at the same time as password manager UI.
288 // This is needed because generation is shown on field focus vs. field click 285 // This is needed because generation is shown on field focus vs. field click
289 // for the password manager. TODO(gcasto): Have both UIs show on focus. 286 // for the password manager. TODO(gcasto): Have both UIs show on focus.
290 bool is_generation_popup_possibly_visible_; 287 bool is_generation_popup_possibly_visible_;
291 288
292 mojo::BindingSet<mojom::AutofillAgent> bindings_; 289 mojo::Binding<mojom::AutofillAgent> binding_;
293 290
294 mojom::AutofillDriverPtr mojo_autofill_driver_; 291 mojom::AutofillDriverPtr mojo_autofill_driver_;
295 292
296 base::WeakPtrFactory<AutofillAgent> weak_ptr_factory_; 293 base::WeakPtrFactory<AutofillAgent> weak_ptr_factory_;
297 294
298 DISALLOW_COPY_AND_ASSIGN(AutofillAgent); 295 DISALLOW_COPY_AND_ASSIGN(AutofillAgent);
299 }; 296 };
300 297
301 } // namespace autofill 298 } // namespace autofill
302 299
303 #endif // COMPONENTS_AUTOFILL_CONTENT_RENDERER_AUTOFILL_AGENT_H_ 300 #endif // COMPONENTS_AUTOFILL_CONTENT_RENDERER_AUTOFILL_AGENT_H_
OLDNEW
« no previous file with comments | « components/autofill/content/renderer/BUILD.gn ('k') | components/autofill/content/renderer/autofill_agent.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698