| OLD | NEW |
| 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 <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
| 11 #include "base/compiler_specific.h" | 11 #include "base/compiler_specific.h" |
| 12 #include "base/gtest_prod_util.h" | 12 #include "base/gtest_prod_util.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 "base/timer/timer.h" | 15 #include "base/timer/timer.h" |
| 16 #include "components/autofill/content/renderer/form_cache.h" | 16 #include "components/autofill/content/renderer/form_cache.h" |
| 17 #include "components/autofill/content/renderer/page_click_listener.h" | 17 #include "components/autofill/content/renderer/page_click_listener.h" |
| 18 #include "components/autofill/core/common/autocheckout_status.h" | |
| 19 #include "components/autofill/core/common/forms_seen_state.h" | 18 #include "components/autofill/core/common/forms_seen_state.h" |
| 20 #include "content/public/renderer/render_view_observer.h" | 19 #include "content/public/renderer/render_view_observer.h" |
| 21 #include "third_party/WebKit/public/web/WebAutofillClient.h" | 20 #include "third_party/WebKit/public/web/WebAutofillClient.h" |
| 22 #include "third_party/WebKit/public/web/WebFormElement.h" | 21 #include "third_party/WebKit/public/web/WebFormElement.h" |
| 23 #include "third_party/WebKit/public/web/WebInputElement.h" | 22 #include "third_party/WebKit/public/web/WebInputElement.h" |
| 24 | 23 |
| 25 namespace WebKit { | 24 namespace WebKit { |
| 26 class WebNode; | 25 class WebNode; |
| 27 class WebView; | 26 class WebView; |
| 28 } | 27 } |
| (...skipping 25 matching lines...) Expand all Loading... |
| 54 private: | 53 private: |
| 55 enum AutofillAction { | 54 enum AutofillAction { |
| 56 AUTOFILL_NONE, // No state set. | 55 AUTOFILL_NONE, // No state set. |
| 57 AUTOFILL_FILL, // Fill the Autofill form data. | 56 AUTOFILL_FILL, // Fill the Autofill form data. |
| 58 AUTOFILL_PREVIEW, // Preview the Autofill form data. | 57 AUTOFILL_PREVIEW, // Preview the Autofill form data. |
| 59 }; | 58 }; |
| 60 | 59 |
| 61 // RenderView::Observer: | 60 // RenderView::Observer: |
| 62 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; | 61 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; |
| 63 virtual void DidFinishDocumentLoad(WebKit::WebFrame* frame) OVERRIDE; | 62 virtual void DidFinishDocumentLoad(WebKit::WebFrame* frame) OVERRIDE; |
| 64 virtual void DidStartProvisionalLoad(WebKit::WebFrame* frame) OVERRIDE; | |
| 65 virtual void DidFailProvisionalLoad( | |
| 66 WebKit::WebFrame* frame, | |
| 67 const WebKit::WebURLError& error) OVERRIDE; | |
| 68 virtual void DidCommitProvisionalLoad(WebKit::WebFrame* frame, | 63 virtual void DidCommitProvisionalLoad(WebKit::WebFrame* frame, |
| 69 bool is_new_navigation) OVERRIDE; | 64 bool is_new_navigation) OVERRIDE; |
| 70 virtual void FrameDetached(WebKit::WebFrame* frame) OVERRIDE; | 65 virtual void FrameDetached(WebKit::WebFrame* frame) OVERRIDE; |
| 71 virtual void WillSubmitForm(WebKit::WebFrame* frame, | 66 virtual void WillSubmitForm(WebKit::WebFrame* frame, |
| 72 const WebKit::WebFormElement& form) OVERRIDE; | 67 const WebKit::WebFormElement& form) OVERRIDE; |
| 73 virtual void ZoomLevelChanged() OVERRIDE; | 68 virtual void ZoomLevelChanged() OVERRIDE; |
| 74 virtual void DidChangeScrollOffset(WebKit::WebFrame* frame) OVERRIDE; | 69 virtual void DidChangeScrollOffset(WebKit::WebFrame* frame) OVERRIDE; |
| 75 virtual void FocusedNodeChanged(const WebKit::WebNode& node) OVERRIDE; | 70 virtual void FocusedNodeChanged(const WebKit::WebNode& node) OVERRIDE; |
| 76 virtual void OrientationChangeEvent(int orientation) OVERRIDE; | 71 virtual void OrientationChangeEvent(int orientation) OVERRIDE; |
| 77 | 72 |
| (...skipping 24 matching lines...) Expand all Loading... |
| 102 const std::vector<FormDataPredictions>& forms); | 97 const std::vector<FormDataPredictions>& forms); |
| 103 | 98 |
| 104 // For external Autofill selection. | 99 // For external Autofill selection. |
| 105 void OnSetAutofillActionFill(); | 100 void OnSetAutofillActionFill(); |
| 106 void OnClearForm(); | 101 void OnClearForm(); |
| 107 void OnSetAutofillActionPreview(); | 102 void OnSetAutofillActionPreview(); |
| 108 void OnClearPreviewedForm(); | 103 void OnClearPreviewedForm(); |
| 109 void OnSetNodeText(const base::string16& value); | 104 void OnSetNodeText(const base::string16& value); |
| 110 void OnAcceptDataListSuggestion(const base::string16& value); | 105 void OnAcceptDataListSuggestion(const base::string16& value); |
| 111 void OnAcceptPasswordAutofillSuggestion(const base::string16& value); | 106 void OnAcceptPasswordAutofillSuggestion(const base::string16& value); |
| 112 void OnGetAllForms(); | |
| 113 | 107 |
| 114 // Called when interactive autocomplete finishes. | 108 // Called when interactive autocomplete finishes. |
| 115 void OnRequestAutocompleteResult( | 109 void OnRequestAutocompleteResult( |
| 116 WebKit::WebFormElement::AutocompleteResult result, | 110 WebKit::WebFormElement::AutocompleteResult result, |
| 117 const FormData& form_data); | 111 const FormData& form_data); |
| 118 | 112 |
| 119 // Called when an autocomplete request succeeds or fails with the |result|. | 113 // Called when an autocomplete request succeeds or fails with the |result|. |
| 120 void FinishAutocompleteRequest( | 114 void FinishAutocompleteRequest( |
| 121 WebKit::WebFormElement::AutocompleteResult result); | 115 WebKit::WebFormElement::AutocompleteResult result); |
| 122 | 116 |
| 123 // Called when the Autofill server hints that this page should be filled using | |
| 124 // Autocheckout. All the relevant form fields in |form_data| will be filled | |
| 125 // and then element specified by |element_descriptor| will be clicked to | |
| 126 // proceed to the next step of the form. | |
| 127 void OnFillFormsAndClick( | |
| 128 const std::vector<FormData>& form_data, | |
| 129 const std::vector<WebElementDescriptor>& click_elements_before_form_fill, | |
| 130 const std::vector<WebElementDescriptor>& click_elements_after_form_fill, | |
| 131 const WebElementDescriptor& element_descriptor); | |
| 132 | |
| 133 // Called when |topmost_frame_| is supported for Autocheckout. | |
| 134 void OnAutocheckoutSupported(); | |
| 135 | |
| 136 // Called when the page is actually shown in the browser, as opposed to simply | 117 // Called when the page is actually shown in the browser, as opposed to simply |
| 137 // being preloaded. | 118 // being preloaded. |
| 138 void OnPageShown(); | 119 void OnPageShown(); |
| 139 | 120 |
| 140 // Called when an Autocheckout page is completed by the renderer. | |
| 141 void CompleteAutocheckoutPage(autofill::AutocheckoutStatus status); | |
| 142 | |
| 143 // Called when clicking an Autocheckout proceed element fails to do anything. | |
| 144 void ClickFailed(); | |
| 145 | |
| 146 // Called in a posted task by textFieldDidChange() to work-around a WebKit bug | 121 // Called in a posted task by textFieldDidChange() to work-around a WebKit bug |
| 147 // http://bugs.webkit.org/show_bug.cgi?id=16976 | 122 // http://bugs.webkit.org/show_bug.cgi?id=16976 |
| 148 void TextFieldDidChangeImpl(const WebKit::WebInputElement& element); | 123 void TextFieldDidChangeImpl(const WebKit::WebInputElement& element); |
| 149 | 124 |
| 150 // Shows the autofill suggestions for |element|. | 125 // Shows the autofill suggestions for |element|. |
| 151 // This call is asynchronous and may or may not lead to the showing of a | 126 // This call is asynchronous and may or may not lead to the showing of a |
| 152 // suggestion popup (no popup is shown if there are no available suggestions). | 127 // suggestion popup (no popup is shown if there are no available suggestions). |
| 153 // |autofill_on_empty_values| specifies whether suggestions should be shown | 128 // |autofill_on_empty_values| specifies whether suggestions should be shown |
| 154 // when |element| contains no text. | 129 // when |element| contains no text. |
| 155 // |requires_caret_at_end| specifies whether suggestions should be shown when | 130 // |requires_caret_at_end| specifies whether suggestions should be shown when |
| (...skipping 29 matching lines...) Expand all Loading... |
| 185 const WebKit::WebNode& node, | 160 const WebKit::WebNode& node, |
| 186 FormData* form, | 161 FormData* form, |
| 187 FormFieldData* field) WARN_UNUSED_RESULT; | 162 FormFieldData* field) WARN_UNUSED_RESULT; |
| 188 | 163 |
| 189 // Set |node| to display the given |value|. | 164 // Set |node| to display the given |value|. |
| 190 void SetNodeText(const base::string16& value, WebKit::WebInputElement* node); | 165 void SetNodeText(const base::string16& value, WebKit::WebInputElement* node); |
| 191 | 166 |
| 192 // Hides any currently showing Autofill UI. | 167 // Hides any currently showing Autofill UI. |
| 193 void HideAutofillUI(); | 168 void HideAutofillUI(); |
| 194 | 169 |
| 195 void MaybeSendDynamicFormsSeen(); | |
| 196 | |
| 197 // Send |AutofillHostMsg_MaybeShowAutocheckoutBubble| to browser if needed. | |
| 198 void MaybeShowAutocheckoutBubble(); | |
| 199 | |
| 200 FormCache form_cache_; | 170 FormCache form_cache_; |
| 201 | 171 |
| 202 PasswordAutofillAgent* password_autofill_agent_; // WEAK reference. | 172 PasswordAutofillAgent* password_autofill_agent_; // WEAK reference. |
| 203 | 173 |
| 204 // The ID of the last request sent for form field Autofill. Used to ignore | 174 // The ID of the last request sent for form field Autofill. Used to ignore |
| 205 // out of date responses. | 175 // out of date responses. |
| 206 int autofill_query_id_; | 176 int autofill_query_id_; |
| 207 | 177 |
| 208 // The element corresponding to the last request sent for form field Autofill. | 178 // The element corresponding to the last request sent for form field Autofill. |
| 209 WebKit::WebInputElement element_; | 179 WebKit::WebInputElement element_; |
| 210 | 180 |
| 211 // The form element currently requesting an interactive autocomplete. | 181 // The form element currently requesting an interactive autocomplete. |
| 212 WebKit::WebFormElement in_flight_request_form_; | 182 WebKit::WebFormElement in_flight_request_form_; |
| 213 | 183 |
| 214 // All the form elements seen in the top frame. | 184 // All the form elements seen in the top frame. |
| 215 std::vector<WebKit::WebFormElement> form_elements_; | 185 std::vector<WebKit::WebFormElement> form_elements_; |
| 216 | 186 |
| 217 // The action to take when receiving Autofill data from the AutofillManager. | 187 // The action to take when receiving Autofill data from the AutofillManager. |
| 218 AutofillAction autofill_action_; | 188 AutofillAction autofill_action_; |
| 219 | 189 |
| 220 // Pointer to the current topmost frame. Used in autocheckout flows so | |
| 221 // elements can be clicked. | |
| 222 WebKit::WebFrame* topmost_frame_; | |
| 223 | |
| 224 // Pointer to the WebView. Used to access page scale factor. | 190 // Pointer to the WebView. Used to access page scale factor. |
| 225 WebKit::WebView* web_view_; | 191 WebKit::WebView* web_view_; |
| 226 | 192 |
| 227 // Should we display a warning if autofill is disabled? | 193 // Should we display a warning if autofill is disabled? |
| 228 bool display_warning_if_disabled_; | 194 bool display_warning_if_disabled_; |
| 229 | 195 |
| 230 // Was the query node autofilled prior to previewing the form? | 196 // Was the query node autofilled prior to previewing the form? |
| 231 bool was_query_node_autofilled_; | 197 bool was_query_node_autofilled_; |
| 232 | 198 |
| 233 // Have we already shown Autofill suggestions for the field the user is | 199 // Have we already shown Autofill suggestions for the field the user is |
| 234 // currently editing? Used to keep track of state for metrics logging. | 200 // currently editing? Used to keep track of state for metrics logging. |
| 235 bool has_shown_autofill_popup_for_current_edit_; | 201 bool has_shown_autofill_popup_for_current_edit_; |
| 236 | 202 |
| 237 // If true we just set the node text so we shouldn't show the popup. | 203 // If true we just set the node text so we shouldn't show the popup. |
| 238 bool did_set_node_text_; | 204 bool did_set_node_text_; |
| 239 | 205 |
| 240 // Watchdog timer for clicking in Autocheckout flows. | |
| 241 base::OneShotTimer<AutofillAgent> click_timer_; | |
| 242 | |
| 243 // Used to signal that we need to watch for loading failures in an | |
| 244 // Autocheckout flow. | |
| 245 bool autocheckout_click_in_progress_; | |
| 246 | |
| 247 // Whether or not |topmost_frame_| is whitelisted for Autocheckout. | |
| 248 bool is_autocheckout_supported_; | |
| 249 | |
| 250 // Whether or not new forms/fields have been dynamically added | 206 // Whether or not new forms/fields have been dynamically added |
| 251 // since the last loaded forms were sent to the browser process. | 207 // since the last loaded forms were sent to the browser process. |
| 252 bool has_new_forms_for_browser_; | 208 bool has_new_forms_for_browser_; |
| 253 | 209 |
| 254 // Whether or not to ignore text changes. Useful for when we're committing | 210 // Whether or not to ignore text changes. Useful for when we're committing |
| 255 // a composition when we are defocusing the WebView and we don't want to | 211 // a composition when we are defocusing the WebView and we don't want to |
| 256 // trigger an autofill popup to show. | 212 // trigger an autofill popup to show. |
| 257 bool ignore_text_changes_; | 213 bool ignore_text_changes_; |
| 258 | 214 |
| 259 // Timestamp of first time forms are seen. | 215 // Timestamp of first time forms are seen. |
| 260 base::TimeTicks forms_seen_timestamp_; | 216 base::TimeTicks forms_seen_timestamp_; |
| 261 | 217 |
| 262 base::WeakPtrFactory<AutofillAgent> weak_ptr_factory_; | 218 base::WeakPtrFactory<AutofillAgent> weak_ptr_factory_; |
| 263 | 219 |
| 264 friend class PasswordAutofillAgentTest; | 220 friend class PasswordAutofillAgentTest; |
| 265 FRIEND_TEST_ALL_PREFIXES(ChromeRenderViewTest, FillFormElement); | 221 FRIEND_TEST_ALL_PREFIXES(ChromeRenderViewTest, FillFormElement); |
| 266 FRIEND_TEST_ALL_PREFIXES(ChromeRenderViewTest, SendForms); | 222 FRIEND_TEST_ALL_PREFIXES(ChromeRenderViewTest, SendForms); |
| 267 FRIEND_TEST_ALL_PREFIXES(ChromeRenderViewTest, SendDynamicForms); | 223 FRIEND_TEST_ALL_PREFIXES(ChromeRenderViewTest, SendDynamicForms); |
| 268 FRIEND_TEST_ALL_PREFIXES(ChromeRenderViewTest, ShowAutofillWarning); | 224 FRIEND_TEST_ALL_PREFIXES(ChromeRenderViewTest, ShowAutofillWarning); |
| 269 FRIEND_TEST_ALL_PREFIXES(PasswordAutofillAgentTest, WaitUsername); | 225 FRIEND_TEST_ALL_PREFIXES(PasswordAutofillAgentTest, WaitUsername); |
| 270 FRIEND_TEST_ALL_PREFIXES(PasswordAutofillAgentTest, SuggestionAccept); | 226 FRIEND_TEST_ALL_PREFIXES(PasswordAutofillAgentTest, SuggestionAccept); |
| 271 FRIEND_TEST_ALL_PREFIXES(PasswordAutofillAgentTest, SuggestionSelect); | 227 FRIEND_TEST_ALL_PREFIXES(PasswordAutofillAgentTest, SuggestionSelect); |
| 272 | 228 |
| 273 DISALLOW_COPY_AND_ASSIGN(AutofillAgent); | 229 DISALLOW_COPY_AND_ASSIGN(AutofillAgent); |
| 274 }; | 230 }; |
| 275 | 231 |
| 276 } // namespace autofill | 232 } // namespace autofill |
| 277 | 233 |
| 278 #endif // COMPONENTS_AUTOFILL_CONTENT_RENDERER_AUTOFILL_AGENT_H_ | 234 #endif // COMPONENTS_AUTOFILL_CONTENT_RENDERER_AUTOFILL_AGENT_H_ |
| OLD | NEW |