OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2009 Google Inc. All rights reserved. | 2 * Copyright (C) 2009 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 14 matching lines...) Expand all Loading... |
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
29 */ | 29 */ |
30 | 30 |
31 #include "config.h" | 31 #include "config.h" |
32 #include "public/web/WebSearchableFormData.h" | 32 #include "public/web/WebSearchableFormData.h" |
33 | 33 |
34 #include "core/HTMLNames.h" | 34 #include "core/HTMLNames.h" |
| 35 #include "core/InputTypeNames.h" |
35 #include "core/dom/Document.h" | 36 #include "core/dom/Document.h" |
36 #include "core/html/FormDataList.h" | 37 #include "core/html/FormDataList.h" |
37 #include "core/html/HTMLFormControlElement.h" | 38 #include "core/html/HTMLFormControlElement.h" |
38 #include "core/html/HTMLFormElement.h" | 39 #include "core/html/HTMLFormElement.h" |
39 #include "core/html/HTMLInputElement.h" | 40 #include "core/html/HTMLInputElement.h" |
40 #include "core/html/HTMLOptionElement.h" | 41 #include "core/html/HTMLOptionElement.h" |
41 #include "core/html/HTMLSelectElement.h" | 42 #include "core/html/HTMLSelectElement.h" |
42 #include "platform/network/FormDataBuilder.h" | 43 #include "platform/network/FormDataBuilder.h" |
43 #include "public/web/WebFormElement.h" | 44 #include "public/web/WebFormElement.h" |
44 #include "public/web/WebInputElement.h" | 45 #include "public/web/WebInputElement.h" |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
132 | 133 |
133 // Returns true if the form element is in its default state, false otherwise. | 134 // Returns true if the form element is in its default state, false otherwise. |
134 // The default state is the state of the form element on initial load of the | 135 // The default state is the state of the form element on initial load of the |
135 // page, and varies depending upon the form element. For example, a checkbox is | 136 // page, and varies depending upon the form element. For example, a checkbox is |
136 // in its default state if the checked state matches the state of the checked at
tribute. | 137 // in its default state if the checked state matches the state of the checked at
tribute. |
137 bool IsInDefaultState(HTMLFormControlElement* formElement) | 138 bool IsInDefaultState(HTMLFormControlElement* formElement) |
138 { | 139 { |
139 ASSERT(formElement); | 140 ASSERT(formElement); |
140 if (isHTMLInputElement(*formElement)) { | 141 if (isHTMLInputElement(*formElement)) { |
141 const HTMLInputElement& inputElement = toHTMLInputElement(*formElement); | 142 const HTMLInputElement& inputElement = toHTMLInputElement(*formElement); |
142 if (inputElement.isCheckbox() || inputElement.isRadioButton()) | 143 if (inputElement.type() == InputTypeNames::checkbox || inputElement.type
() == InputTypeNames::radio) |
143 return inputElement.checked() == inputElement.hasAttribute(checkedAt
tr); | 144 return inputElement.checked() == inputElement.hasAttribute(checkedAt
tr); |
144 } else if (isHTMLSelectElement(*formElement)) { | 145 } else if (isHTMLSelectElement(*formElement)) { |
145 return IsSelectInDefaultState(toHTMLSelectElement(formElement)); | 146 return IsSelectInDefaultState(toHTMLSelectElement(formElement)); |
146 } | 147 } |
147 return true; | 148 return true; |
148 } | 149 } |
149 | 150 |
150 // Look for a suitable search text field in a given HTMLFormElement | 151 // Look for a suitable search text field in a given HTMLFormElement |
151 // Return nothing if one of those items are found: | 152 // Return nothing if one of those items are found: |
152 // - A text area field | 153 // - A text area field |
(...skipping 13 matching lines...) Expand all Loading... |
166 if (control->isDisabledFormControl() || control->name().isNull()) | 167 if (control->isDisabledFormControl() || control->name().isNull()) |
167 continue; | 168 continue; |
168 | 169 |
169 if (!IsInDefaultState(control) || isHTMLTextAreaElement(*control)) | 170 if (!IsInDefaultState(control) || isHTMLTextAreaElement(*control)) |
170 return 0; | 171 return 0; |
171 | 172 |
172 if (isHTMLInputElement(*control) && control->willValidate()) { | 173 if (isHTMLInputElement(*control) && control->willValidate()) { |
173 const HTMLInputElement& input = toHTMLInputElement(*control); | 174 const HTMLInputElement& input = toHTMLInputElement(*control); |
174 | 175 |
175 // Return nothing if a file upload field or a password field are fou
nd. | 176 // Return nothing if a file upload field or a password field are fou
nd. |
176 if (input.isFileUpload() || input.isPasswordField()) | 177 if (input.type() == InputTypeNames::file || input.type() == InputTyp
eNames::password) |
177 return 0; | 178 return 0; |
178 | 179 |
179 if (input.isTextField()) { | 180 if (input.isTextField()) { |
180 if (textElement) { | 181 if (textElement) { |
181 // The auto-complete bar only knows how to fill in one value
. | 182 // The auto-complete bar only knows how to fill in one value
. |
182 // This form has multiple fields; don't treat it as searchab
le. | 183 // This form has multiple fields; don't treat it as searchab
le. |
183 return 0; | 184 return 0; |
184 } | 185 } |
185 textElement = toHTMLInputElement(control); | 186 textElement = toHTMLInputElement(control); |
186 } | 187 } |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
283 | 284 |
284 String action(formElement->action()); | 285 String action(formElement->action()); |
285 KURL url(formElement->document().completeURL(action.isNull() ? "" : action))
; | 286 KURL url(formElement->document().completeURL(action.isNull() ? "" : action))
; |
286 RefPtr<FormData> formData = FormData::create(encodedString); | 287 RefPtr<FormData> formData = FormData::create(encodedString); |
287 url.setQuery(formData->flattenToString()); | 288 url.setQuery(formData->flattenToString()); |
288 m_url = url; | 289 m_url = url; |
289 m_encoding = String(encoding.name()); | 290 m_encoding = String(encoding.name()); |
290 } | 291 } |
291 | 292 |
292 } // namespace blink | 293 } // namespace blink |
OLD | NEW |