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 #include "components/autofill/content/renderer/autofill_agent.h" | 5 #include "components/autofill/content/renderer/autofill_agent.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
10 #include "base/strings/string_split.h" | 10 #include "base/strings/string_split.h" |
(...skipping 24 matching lines...) Expand all Loading... |
35 #include "third_party/WebKit/public/web/WebFormElement.h" | 35 #include "third_party/WebKit/public/web/WebFormElement.h" |
36 #include "third_party/WebKit/public/web/WebFrame.h" | 36 #include "third_party/WebKit/public/web/WebFrame.h" |
37 #include "third_party/WebKit/public/web/WebInputEvent.h" | 37 #include "third_party/WebKit/public/web/WebInputEvent.h" |
38 #include "third_party/WebKit/public/web/WebNode.h" | 38 #include "third_party/WebKit/public/web/WebNode.h" |
39 #include "third_party/WebKit/public/web/WebNodeCollection.h" | 39 #include "third_party/WebKit/public/web/WebNodeCollection.h" |
40 #include "third_party/WebKit/public/web/WebOptionElement.h" | 40 #include "third_party/WebKit/public/web/WebOptionElement.h" |
41 #include "third_party/WebKit/public/web/WebView.h" | 41 #include "third_party/WebKit/public/web/WebView.h" |
42 #include "ui/base/l10n/l10n_util.h" | 42 #include "ui/base/l10n/l10n_util.h" |
43 #include "ui/events/keycodes/keyboard_codes.h" | 43 #include "ui/events/keycodes/keyboard_codes.h" |
44 | 44 |
45 using WebKit::WebAutofillClient; | 45 using blink::WebAutofillClient; |
46 using WebKit::WebFormControlElement; | 46 using blink::WebFormControlElement; |
47 using WebKit::WebFormElement; | 47 using blink::WebFormElement; |
48 using WebKit::WebFrame; | 48 using blink::WebFrame; |
49 using WebKit::WebInputElement; | 49 using blink::WebInputElement; |
50 using WebKit::WebKeyboardEvent; | 50 using blink::WebKeyboardEvent; |
51 using WebKit::WebNode; | 51 using blink::WebNode; |
52 using WebKit::WebNodeCollection; | 52 using blink::WebNodeCollection; |
53 using WebKit::WebOptionElement; | 53 using blink::WebOptionElement; |
54 using WebKit::WebString; | 54 using blink::WebString; |
55 | 55 |
56 namespace { | 56 namespace { |
57 | 57 |
58 // The size above which we stop triggering autofill for an input text field | 58 // The size above which we stop triggering autofill for an input text field |
59 // (so to avoid sending long strings through IPC). | 59 // (so to avoid sending long strings through IPC). |
60 const size_t kMaximumTextSizeForAutofill = 1000; | 60 const size_t kMaximumTextSizeForAutofill = 1000; |
61 | 61 |
62 // The maximum number of data list elements to send to the browser process | 62 // The maximum number of data list elements to send to the browser process |
63 // via IPC (to prevent long IPC messages). | 63 // via IPC (to prevent long IPC messages). |
64 const size_t kMaximumDataListSizeForAutofill = 30; | 64 const size_t kMaximumDataListSizeForAutofill = 30; |
65 | 65 |
66 | 66 |
67 // Gets all the data list values (with corresponding label) for the given | 67 // Gets all the data list values (with corresponding label) for the given |
68 // element. | 68 // element. |
69 void GetDataListSuggestions(const WebKit::WebInputElement& element, | 69 void GetDataListSuggestions(const blink::WebInputElement& element, |
70 std::vector<base::string16>* values, | 70 std::vector<base::string16>* values, |
71 std::vector<base::string16>* labels) { | 71 std::vector<base::string16>* labels) { |
72 WebNodeCollection options = element.dataListOptions(); | 72 WebNodeCollection options = element.dataListOptions(); |
73 if (options.isNull()) | 73 if (options.isNull()) |
74 return; | 74 return; |
75 | 75 |
76 base::string16 prefix = element.editingValue(); | 76 base::string16 prefix = element.editingValue(); |
77 if (element.isMultiple() && | 77 if (element.isMultiple() && |
78 element.formControlType() == WebString::fromUTF8("email")) { | 78 element.formControlType() == WebString::fromUTF8("email")) { |
79 std::vector<base::string16> parts; | 79 std::vector<base::string16> parts; |
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
226 } | 226 } |
227 } | 227 } |
228 | 228 |
229 void AutofillAgent::ZoomLevelChanged() { | 229 void AutofillAgent::ZoomLevelChanged() { |
230 // Any time the zoom level changes, the page's content moves, so any Autofill | 230 // Any time the zoom level changes, the page's content moves, so any Autofill |
231 // popups should be hidden. This is only needed for the new Autofill UI | 231 // popups should be hidden. This is only needed for the new Autofill UI |
232 // because WebKit already knows to hide the old UI when this occurs. | 232 // because WebKit already knows to hide the old UI when this occurs. |
233 HideAutofillUI(); | 233 HideAutofillUI(); |
234 } | 234 } |
235 | 235 |
236 void AutofillAgent::FocusedNodeChanged(const WebKit::WebNode& node) { | 236 void AutofillAgent::FocusedNodeChanged(const blink::WebNode& node) { |
237 if (node.isNull() || !node.isElementNode()) | 237 if (node.isNull() || !node.isElementNode()) |
238 return; | 238 return; |
239 | 239 |
240 WebKit::WebElement web_element = node.toConst<WebKit::WebElement>(); | 240 blink::WebElement web_element = node.toConst<blink::WebElement>(); |
241 | 241 |
242 if (!web_element.document().frame()) | 242 if (!web_element.document().frame()) |
243 return; | 243 return; |
244 | 244 |
245 const WebInputElement* element = toWebInputElement(&web_element); | 245 const WebInputElement* element = toWebInputElement(&web_element); |
246 | 246 |
247 if (!element || !element->isEnabled() || element->isReadOnly() || | 247 if (!element || !element->isEnabled() || element->isReadOnly() || |
248 !element->isTextField() || element->isPasswordField()) | 248 !element->isTextField() || element->isPasswordField()) |
249 return; | 249 return; |
250 | 250 |
251 element_ = *element; | 251 element_ = *element; |
252 } | 252 } |
253 | 253 |
254 void AutofillAgent::OrientationChangeEvent(int orientation) { | 254 void AutofillAgent::OrientationChangeEvent(int orientation) { |
255 HideAutofillUI(); | 255 HideAutofillUI(); |
256 } | 256 } |
257 | 257 |
258 void AutofillAgent::DidChangeScrollOffset(WebKit::WebFrame*) { | 258 void AutofillAgent::DidChangeScrollOffset(blink::WebFrame*) { |
259 HideAutofillUI(); | 259 HideAutofillUI(); |
260 } | 260 } |
261 | 261 |
262 void AutofillAgent::didRequestAutocomplete(WebKit::WebFrame* frame, | 262 void AutofillAgent::didRequestAutocomplete(blink::WebFrame* frame, |
263 const WebFormElement& form) { | 263 const WebFormElement& form) { |
264 GURL url(frame->document().url()); | 264 GURL url(frame->document().url()); |
265 content::SSLStatus ssl_status = render_view()->GetSSLStatusOfFrame(frame); | 265 content::SSLStatus ssl_status = render_view()->GetSSLStatusOfFrame(frame); |
266 FormData form_data; | 266 FormData form_data; |
267 if (!in_flight_request_form_.isNull() || | 267 if (!in_flight_request_form_.isNull() || |
268 (url.SchemeIs(content::kHttpsScheme) && | 268 (url.SchemeIs(content::kHttpsScheme) && |
269 (net::IsCertStatusError(ssl_status.cert_status) || | 269 (net::IsCertStatusError(ssl_status.cert_status) || |
270 net::IsCertStatusMinorError(ssl_status.cert_status))) || | 270 net::IsCertStatusMinorError(ssl_status.cert_status))) || |
271 !WebFormElementToFormData(form, | 271 !WebFormElementToFormData(form, |
272 WebFormControlElement(), | 272 WebFormControlElement(), |
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
588 &field, REQUIRE_AUTOCOMPLETE)) { | 588 &field, REQUIRE_AUTOCOMPLETE)) { |
589 return; | 589 return; |
590 } | 590 } |
591 | 591 |
592 autofill_action_ = action; | 592 autofill_action_ = action; |
593 Send(new AutofillHostMsg_FillAutofillFormData( | 593 Send(new AutofillHostMsg_FillAutofillFormData( |
594 routing_id(), autofill_query_id_, form, field, unique_id)); | 594 routing_id(), autofill_query_id_, form, field, unique_id)); |
595 } | 595 } |
596 | 596 |
597 void AutofillAgent::SetNodeText(const base::string16& value, | 597 void AutofillAgent::SetNodeText(const base::string16& value, |
598 WebKit::WebInputElement* node) { | 598 blink::WebInputElement* node) { |
599 did_set_node_text_ = true; | 599 did_set_node_text_ = true; |
600 base::string16 substring = value; | 600 base::string16 substring = value; |
601 substring = substring.substr(0, node->maxLength()); | 601 substring = substring.substr(0, node->maxLength()); |
602 | 602 |
603 node->setEditingValue(substring); | 603 node->setEditingValue(substring); |
604 } | 604 } |
605 | 605 |
606 void AutofillAgent::HideAutofillUI() { | 606 void AutofillAgent::HideAutofillUI() { |
607 Send(new AutofillHostMsg_HideAutofillUI(routing_id())); | 607 Send(new AutofillHostMsg_HideAutofillUI(routing_id())); |
608 } | 608 } |
609 | 609 |
610 // TODO(isherman): Decide if we want to support non-password autofill with AJAX. | 610 // TODO(isherman): Decide if we want to support non-password autofill with AJAX. |
611 void AutofillAgent::didAssociateFormControls( | 611 void AutofillAgent::didAssociateFormControls( |
612 const WebKit::WebVector<WebKit::WebNode>& nodes) { | 612 const blink::WebVector<blink::WebNode>& nodes) { |
613 for (size_t i = 0; i < nodes.size(); ++i) { | 613 for (size_t i = 0; i < nodes.size(); ++i) { |
614 WebKit::WebFrame* frame = nodes[i].document().frame(); | 614 blink::WebFrame* frame = nodes[i].document().frame(); |
615 // Only monitors dynamic forms created in the top frame. Dynamic forms | 615 // Only monitors dynamic forms created in the top frame. Dynamic forms |
616 // inserted in iframes are not captured yet. | 616 // inserted in iframes are not captured yet. |
617 if (!frame->parent()) { | 617 if (!frame->parent()) { |
618 password_autofill_agent_->OnDynamicFormsSeen(frame); | 618 password_autofill_agent_->OnDynamicFormsSeen(frame); |
619 return; | 619 return; |
620 } | 620 } |
621 } | 621 } |
622 } | 622 } |
623 | 623 |
624 } // namespace autofill | 624 } // namespace autofill |
OLD | NEW |