| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
| 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
| 4 * (C) 2001 Dirk Mueller (mueller@kde.org) | 4 * (C) 2001 Dirk Mueller (mueller@kde.org) |
| 5 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All r
ights reserved. | 5 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All |
| 6 * rights reserved. |
| 6 * (C) 2006 Alexey Proskuryakov (ap@nypop.com) | 7 * (C) 2006 Alexey Proskuryakov (ap@nypop.com) |
| 7 * Copyright (C) 2007 Samuel Weinig (sam@webkit.org) | 8 * Copyright (C) 2007 Samuel Weinig (sam@webkit.org) |
| 8 * Copyright (C) 2010 Google Inc. All rights reserved. | 9 * Copyright (C) 2010 Google Inc. All rights reserved. |
| 9 * Copyright (C) 2008 Torch Mobile Inc. All rights reserved. (http://www.torchmo
bile.com/) | 10 * Copyright (C) 2008 Torch Mobile Inc. All rights reserved. |
| 11 * (http://www.torchmobile.com/) |
| 10 * Copyright (C) 2012 Samsung Electronics. All rights reserved. | 12 * Copyright (C) 2012 Samsung Electronics. All rights reserved. |
| 11 * | 13 * |
| 12 * This library is free software; you can redistribute it and/or | 14 * This library is free software; you can redistribute it and/or |
| 13 * modify it under the terms of the GNU Library General Public | 15 * modify it under the terms of the GNU Library General Public |
| 14 * License as published by the Free Software Foundation; either | 16 * License as published by the Free Software Foundation; either |
| 15 * version 2 of the License, or (at your option) any later version. | 17 * version 2 of the License, or (at your option) any later version. |
| 16 * | 18 * |
| 17 * This library is distributed in the hope that it will be useful, | 19 * This library is distributed in the hope that it will be useful, |
| 18 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 20 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | 21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 111 m_isIndeterminate(false), | 113 m_isIndeterminate(false), |
| 112 m_isActivatedSubmit(false), | 114 m_isActivatedSubmit(false), |
| 113 m_autocomplete(Uninitialized), | 115 m_autocomplete(Uninitialized), |
| 114 m_hasNonEmptyList(false), | 116 m_hasNonEmptyList(false), |
| 115 m_stateRestored(false), | 117 m_stateRestored(false), |
| 116 m_parsingInProgress(createdByParser), | 118 m_parsingInProgress(createdByParser), |
| 117 m_valueAttributeWasUpdatedAfterParsing(false), | 119 m_valueAttributeWasUpdatedAfterParsing(false), |
| 118 m_canReceiveDroppedFiles(false), | 120 m_canReceiveDroppedFiles(false), |
| 119 m_shouldRevealPassword(false), | 121 m_shouldRevealPassword(false), |
| 120 m_needsToUpdateViewValue(true), | 122 m_needsToUpdateViewValue(true), |
| 121 m_isPlaceholderVisible(false) | 123 m_isPlaceholderVisible(false), |
| 122 // |m_inputType| is lazily created when constructed by the parser to avoid | 124 // |m_inputType| is lazily created when constructed by the parser to avoid |
| 123 // constructing unnecessarily a text inputType and its shadow subtree, jus
t | 125 // constructing unnecessarily a text inputType and its shadow subtree, |
| 124 // to destroy them when the |type| attribute gets set by the parser to | 126 // just to destroy them when the |type| attribute gets set by the parser |
| 125 // something else than 'text'. | 127 // to something else than 'text'. |
| 126 , | |
| 127 m_inputType(createdByParser ? nullptr : InputType::createText(*this)), | 128 m_inputType(createdByParser ? nullptr : InputType::createText(*this)), |
| 128 m_inputTypeView(m_inputType ? m_inputType->createView() : nullptr) { | 129 m_inputTypeView(m_inputType ? m_inputType->createView() : nullptr) { |
| 129 setHasCustomStyleCallbacks(); | 130 setHasCustomStyleCallbacks(); |
| 130 } | 131 } |
| 131 | 132 |
| 132 HTMLInputElement* HTMLInputElement::create(Document& document, | 133 HTMLInputElement* HTMLInputElement::create(Document& document, |
| 133 HTMLFormElement* form, | 134 HTMLFormElement* form, |
| 134 bool createdByParser) { | 135 bool createdByParser) { |
| 135 HTMLInputElement* inputElement = | 136 HTMLInputElement* inputElement = |
| 136 new HTMLInputElement(document, form, createdByParser); | 137 new HTMLInputElement(document, form, createdByParser); |
| (...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 313 break; | 314 break; |
| 314 case SelectionBehaviorOnFocus::None: | 315 case SelectionBehaviorOnFocus::None: |
| 315 return; | 316 return; |
| 316 } | 317 } |
| 317 // TODO(tkent): scrollRectToVisible is a workaround of a bug of | 318 // TODO(tkent): scrollRectToVisible is a workaround of a bug of |
| 318 // FrameSelection::revealSelection(). It doesn't scroll correctly in a | 319 // FrameSelection::revealSelection(). It doesn't scroll correctly in a |
| 319 // case of RangeSelection. crbug.com/443061. | 320 // case of RangeSelection. crbug.com/443061. |
| 320 if (layoutObject()) | 321 if (layoutObject()) |
| 321 layoutObject()->scrollRectToVisible(boundingBox()); | 322 layoutObject()->scrollRectToVisible(boundingBox()); |
| 322 if (document().frame()) { | 323 if (document().frame()) { |
| 323 // TODO(xiaochengh): The use of updateStyleAndLayoutIgnorePendingStyleshee
ts | 324 // TODO(xiaochengh): The use of |
| 324 // needs to be audited. See http://crbug.com/590369 for more details. | 325 // updateStyleAndLayoutIgnorePendingStylesheets needs to be audited. See |
| 326 // http://crbug.com/590369 for more details. |
| 325 document().updateStyleAndLayoutIgnorePendingStylesheets(); | 327 document().updateStyleAndLayoutIgnorePendingStylesheets(); |
| 326 | 328 |
| 327 document().frame()->selection().revealSelection(); | 329 document().frame()->selection().revealSelection(); |
| 328 } | 330 } |
| 329 } else { | 331 } else { |
| 330 HTMLTextFormControlElement::updateFocusAppearance(selectionBehavior); | 332 HTMLTextFormControlElement::updateFocusAppearance(selectionBehavior); |
| 331 } | 333 } |
| 332 } | 334 } |
| 333 | 335 |
| 334 void HTMLInputElement::beginEditing() { | 336 void HTMLInputElement::beginEditing() { |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 474 | 476 |
| 475 setNeedsValidityCheck(); | 477 setNeedsValidityCheck(); |
| 476 if ((couldBeSuccessfulSubmitButton || canBeSuccessfulSubmitButton()) && | 478 if ((couldBeSuccessfulSubmitButton || canBeSuccessfulSubmitButton()) && |
| 477 formOwner() && isConnected()) | 479 formOwner() && isConnected()) |
| 478 formOwner()->invalidateDefaultButtonStyle(); | 480 formOwner()->invalidateDefaultButtonStyle(); |
| 479 notifyFormStateChanged(); | 481 notifyFormStateChanged(); |
| 480 } | 482 } |
| 481 | 483 |
| 482 void HTMLInputElement::subtreeHasChanged() { | 484 void HTMLInputElement::subtreeHasChanged() { |
| 483 m_inputTypeView->subtreeHasChanged(); | 485 m_inputTypeView->subtreeHasChanged(); |
| 484 // When typing in an input field, childrenChanged is not called, so we need to
force the directionality check. | 486 // When typing in an input field, childrenChanged is not called, so we need to |
| 487 // force the directionality check. |
| 485 calculateAndAdjustDirectionality(); | 488 calculateAndAdjustDirectionality(); |
| 486 } | 489 } |
| 487 | 490 |
| 488 const AtomicString& HTMLInputElement::formControlType() const { | 491 const AtomicString& HTMLInputElement::formControlType() const { |
| 489 return m_inputType->formControlType(); | 492 return m_inputType->formControlType(); |
| 490 } | 493 } |
| 491 | 494 |
| 492 bool HTMLInputElement::shouldSaveAndRestoreFormControlState() const { | 495 bool HTMLInputElement::shouldSaveAndRestoreFormControlState() const { |
| 493 if (!m_inputType->shouldSaveAndRestoreFormControlState()) | 496 if (!m_inputType->shouldSaveAndRestoreFormControlState()) |
| 494 return false; | 497 return false; |
| (...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 676 m_autocomplete = Off; | 679 m_autocomplete = Off; |
| 677 } else { | 680 } else { |
| 678 if (value.isEmpty()) | 681 if (value.isEmpty()) |
| 679 m_autocomplete = Uninitialized; | 682 m_autocomplete = Uninitialized; |
| 680 else | 683 else |
| 681 m_autocomplete = On; | 684 m_autocomplete = On; |
| 682 } | 685 } |
| 683 } else if (name == typeAttr) { | 686 } else if (name == typeAttr) { |
| 684 updateType(); | 687 updateType(); |
| 685 } else if (name == valueAttr) { | 688 } else if (name == valueAttr) { |
| 686 // We only need to setChanged if the form is looking at the default value ri
ght now. | 689 // We only need to setChanged if the form is looking at the default value |
| 690 // right now. |
| 687 if (!hasDirtyValue()) { | 691 if (!hasDirtyValue()) { |
| 688 updatePlaceholderVisibility(); | 692 updatePlaceholderVisibility(); |
| 689 setNeedsStyleRecalc( | 693 setNeedsStyleRecalc( |
| 690 SubtreeStyleChange, | 694 SubtreeStyleChange, |
| 691 StyleChangeReasonForTracing::fromAttribute(valueAttr)); | 695 StyleChangeReasonForTracing::fromAttribute(valueAttr)); |
| 692 } | 696 } |
| 693 m_needsToUpdateViewValue = true; | 697 m_needsToUpdateViewValue = true; |
| 694 setNeedsValidityCheck(); | 698 setNeedsValidityCheck(); |
| 695 m_valueAttributeWasUpdatedAfterParsing = !m_parsingInProgress; | 699 m_valueAttributeWasUpdatedAfterParsing = !m_parsingInProgress; |
| 696 m_inputType->warnIfValueIsInvalidAndElementIsVisible(value); | 700 m_inputType->warnIfValueIsInvalidAndElementIsVisible(value); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 721 if (m_size != oldSize && layoutObject()) | 725 if (m_size != oldSize && layoutObject()) |
| 722 layoutObject()->setNeedsLayoutAndPrefWidthsRecalcAndFullPaintInvalidation( | 726 layoutObject()->setNeedsLayoutAndPrefWidthsRecalcAndFullPaintInvalidation( |
| 723 LayoutInvalidationReason::AttributeChanged); | 727 LayoutInvalidationReason::AttributeChanged); |
| 724 } else if (name == altAttr) { | 728 } else if (name == altAttr) { |
| 725 m_inputTypeView->altAttributeChanged(); | 729 m_inputTypeView->altAttributeChanged(); |
| 726 } else if (name == srcAttr) { | 730 } else if (name == srcAttr) { |
| 727 m_inputTypeView->srcAttributeChanged(); | 731 m_inputTypeView->srcAttributeChanged(); |
| 728 } else if (name == usemapAttr || name == accesskeyAttr) { | 732 } else if (name == usemapAttr || name == accesskeyAttr) { |
| 729 // FIXME: ignore for the moment | 733 // FIXME: ignore for the moment |
| 730 } else if (name == onsearchAttr) { | 734 } else if (name == onsearchAttr) { |
| 731 // Search field and slider attributes all just cause updateFromElement to be
called through style recalcing. | 735 // Search field and slider attributes all just cause updateFromElement to be |
| 736 // called through style recalcing. |
| 732 setAttributeEventListener( | 737 setAttributeEventListener( |
| 733 EventTypeNames::search, | 738 EventTypeNames::search, |
| 734 createAttributeEventListener(this, name, value, eventParameterName())); | 739 createAttributeEventListener(this, name, value, eventParameterName())); |
| 735 } else if (name == incrementalAttr) { | 740 } else if (name == incrementalAttr) { |
| 736 UseCounter::count(document(), UseCounter::IncrementalAttribute); | 741 UseCounter::count(document(), UseCounter::IncrementalAttribute); |
| 737 } else if (name == minAttr) { | 742 } else if (name == minAttr) { |
| 738 m_inputTypeView->minOrMaxAttributeChanged(); | 743 m_inputTypeView->minOrMaxAttributeChanged(); |
| 739 m_inputType->sanitizeValueInResponseToMinOrMaxAttributeChange(); | 744 m_inputType->sanitizeValueInResponseToMinOrMaxAttributeChange(); |
| 740 setNeedsValidityCheck(); | 745 setNeedsValidityCheck(); |
| 741 UseCounter::count(document(), UseCounter::MinAttribute); | 746 UseCounter::count(document(), UseCounter::MinAttribute); |
| (...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1036 m_inputType->warnIfValueIsInvalidAndElementIsVisible(value); | 1041 m_inputType->warnIfValueIsInvalidAndElementIsVisible(value); |
| 1037 if (!m_inputType->canSetValue(value)) | 1042 if (!m_inputType->canSetValue(value)) |
| 1038 return; | 1043 return; |
| 1039 | 1044 |
| 1040 EventQueueScope scope; | 1045 EventQueueScope scope; |
| 1041 String sanitizedValue = sanitizeValue(value); | 1046 String sanitizedValue = sanitizeValue(value); |
| 1042 bool valueChanged = sanitizedValue != this->value(); | 1047 bool valueChanged = sanitizedValue != this->value(); |
| 1043 | 1048 |
| 1044 setLastChangeWasNotUserEdit(); | 1049 setLastChangeWasNotUserEdit(); |
| 1045 m_needsToUpdateViewValue = true; | 1050 m_needsToUpdateViewValue = true; |
| 1046 m_suggestedValue = | 1051 // Prevent TextFieldInputType::setValue from using the suggested value. |
| 1047 String(); // Prevent TextFieldInputType::setValue from using the suggeste
d value. | 1052 m_suggestedValue = String(); |
| 1048 | 1053 |
| 1049 m_inputType->setValue(sanitizedValue, valueChanged, eventBehavior); | 1054 m_inputType->setValue(sanitizedValue, valueChanged, eventBehavior); |
| 1050 m_inputTypeView->didSetValue(sanitizedValue, valueChanged); | 1055 m_inputTypeView->didSetValue(sanitizedValue, valueChanged); |
| 1051 | 1056 |
| 1052 if (valueChanged && eventBehavior == DispatchNoEvent) | 1057 if (valueChanged && eventBehavior == DispatchNoEvent) |
| 1053 setTextAsOfLastFormControlChangeEvent( | 1058 setTextAsOfLastFormControlChangeEvent( |
| 1054 sanitizedValue.isNull() ? defaultValue() : sanitizedValue); | 1059 sanitizedValue.isNull() ? defaultValue() : sanitizedValue); |
| 1055 | 1060 |
| 1056 if (!valueChanged) | 1061 if (!valueChanged) |
| 1057 return; | 1062 return; |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1120 | 1125 |
| 1121 // Renderer and our event handler are responsible for sanitizing values. | 1126 // Renderer and our event handler are responsible for sanitizing values. |
| 1122 DCHECK(value == m_inputType->sanitizeUserInputValue(value) || | 1127 DCHECK(value == m_inputType->sanitizeUserInputValue(value) || |
| 1123 m_inputType->sanitizeUserInputValue(value).isEmpty()); | 1128 m_inputType->sanitizeUserInputValue(value).isEmpty()); |
| 1124 | 1129 |
| 1125 DCHECK(!value.isNull()); | 1130 DCHECK(!value.isNull()); |
| 1126 m_valueIfDirty = value; | 1131 m_valueIfDirty = value; |
| 1127 m_hasDirtyValue = true; | 1132 m_hasDirtyValue = true; |
| 1128 m_needsToUpdateViewValue = false; | 1133 m_needsToUpdateViewValue = false; |
| 1129 | 1134 |
| 1130 // Input event is fired by the Node::defaultEventHandler for editable controls
. | 1135 // Input event is fired by the Node::defaultEventHandler for editable |
| 1136 // controls. |
| 1131 if (!isTextField()) | 1137 if (!isTextField()) |
| 1132 dispatchInputEvent(); | 1138 dispatchInputEvent(); |
| 1133 notifyFormStateChanged(); | 1139 notifyFormStateChanged(); |
| 1134 | 1140 |
| 1135 setNeedsValidityCheck(); | 1141 setNeedsValidityCheck(); |
| 1136 | 1142 |
| 1137 // Clear autofill flag (and yellow background) on user edit. | 1143 // Clear autofill flag (and yellow background) on user edit. |
| 1138 setAutofilled(false); | 1144 setAutofilled(false); |
| 1139 } | 1145 } |
| 1140 | 1146 |
| (...skipping 30 matching lines...) Expand all Loading... |
| 1171 if (evt->defaultHandled()) | 1177 if (evt->defaultHandled()) |
| 1172 return; | 1178 return; |
| 1173 } | 1179 } |
| 1174 | 1180 |
| 1175 if (evt->isKeyboardEvent() && evt->type() == EventTypeNames::keydown) { | 1181 if (evt->isKeyboardEvent() && evt->type() == EventTypeNames::keydown) { |
| 1176 m_inputTypeView->handleKeydownEvent(toKeyboardEvent(evt)); | 1182 m_inputTypeView->handleKeydownEvent(toKeyboardEvent(evt)); |
| 1177 if (evt->defaultHandled()) | 1183 if (evt->defaultHandled()) |
| 1178 return; | 1184 return; |
| 1179 } | 1185 } |
| 1180 | 1186 |
| 1181 // Call the base event handler before any of our own event handling for almost
all events in text fields. | 1187 // Call the base event handler before any of our own event handling for almost |
| 1182 // Makes editing keyboard handling take precedence over the keydown and keypre
ss handling in this function. | 1188 // all events in text fields. Makes editing keyboard handling take precedence |
| 1189 // over the keydown and keypress handling in this function. |
| 1183 bool callBaseClassEarly = | 1190 bool callBaseClassEarly = |
| 1184 isTextField() && (evt->type() == EventTypeNames::keydown || | 1191 isTextField() && (evt->type() == EventTypeNames::keydown || |
| 1185 evt->type() == EventTypeNames::keypress); | 1192 evt->type() == EventTypeNames::keypress); |
| 1186 if (callBaseClassEarly) { | 1193 if (callBaseClassEarly) { |
| 1187 HTMLTextFormControlElement::defaultEventHandler(evt); | 1194 HTMLTextFormControlElement::defaultEventHandler(evt); |
| 1188 if (evt->defaultHandled()) | 1195 if (evt->defaultHandled()) |
| 1189 return; | 1196 return; |
| 1190 } | 1197 } |
| 1191 | 1198 |
| 1192 // DOMActivate events cause the input to be "activated" - in the case of image
and submit inputs, this means | 1199 // DOMActivate events cause the input to be "activated" - in the case of image |
| 1193 // actually submitting the form. For reset inputs, the form is reset. These ev
ents are sent when the user clicks | 1200 // and submit inputs, this means actually submitting the form. For reset |
| 1194 // on the element, or presses enter while it is the active element. JavaScript
code wishing to activate the element | 1201 // inputs, the form is reset. These events are sent when the user clicks on |
| 1195 // must dispatch a DOMActivate event - a click event will not do the job. | 1202 // the element, or presses enter while it is the active element. JavaScript |
| 1203 // code wishing to activate the element must dispatch a DOMActivate event - a |
| 1204 // click event will not do the job. |
| 1196 if (evt->type() == EventTypeNames::DOMActivate) { | 1205 if (evt->type() == EventTypeNames::DOMActivate) { |
| 1197 m_inputTypeView->handleDOMActivateEvent(evt); | 1206 m_inputTypeView->handleDOMActivateEvent(evt); |
| 1198 if (evt->defaultHandled()) | 1207 if (evt->defaultHandled()) |
| 1199 return; | 1208 return; |
| 1200 } | 1209 } |
| 1201 | 1210 |
| 1202 // Use key press event here since sending simulated mouse events | 1211 // Use key press event here since sending simulated mouse events |
| 1203 // on key down blocks the proper sending of the key press event. | 1212 // on key down blocks the proper sending of the key press event. |
| 1204 if (evt->isKeyboardEvent() && evt->type() == EventTypeNames::keypress) { | 1213 if (evt->isKeyboardEvent() && evt->type() == EventTypeNames::keypress) { |
| 1205 m_inputTypeView->handleKeypressEvent(toKeyboardEvent(evt)); | 1214 m_inputTypeView->handleKeypressEvent(toKeyboardEvent(evt)); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1218 if (type() == InputTypeNames::search) | 1227 if (type() == InputTypeNames::search) |
| 1219 document().postTask(BLINK_FROM_HERE, | 1228 document().postTask(BLINK_FROM_HERE, |
| 1220 createSameThreadTask(&HTMLInputElement::onSearch, | 1229 createSameThreadTask(&HTMLInputElement::onSearch, |
| 1221 wrapPersistent(this))); | 1230 wrapPersistent(this))); |
| 1222 // Form submission finishes editing, just as loss of focus does. | 1231 // Form submission finishes editing, just as loss of focus does. |
| 1223 // If there was a change, send the event now. | 1232 // If there was a change, send the event now. |
| 1224 if (wasChangedSinceLastFormControlChangeEvent()) | 1233 if (wasChangedSinceLastFormControlChangeEvent()) |
| 1225 dispatchFormControlChangeEvent(); | 1234 dispatchFormControlChangeEvent(); |
| 1226 | 1235 |
| 1227 HTMLFormElement* formForSubmission = m_inputTypeView->formForSubmission(); | 1236 HTMLFormElement* formForSubmission = m_inputTypeView->formForSubmission(); |
| 1228 // Form may never have been present, or may have been destroyed by code resp
onding to the change event. | 1237 // Form may never have been present, or may have been destroyed by code |
| 1238 // responding to the change event. |
| 1229 if (formForSubmission) | 1239 if (formForSubmission) |
| 1230 formForSubmission->submitImplicitly(evt, canTriggerImplicitSubmission()); | 1240 formForSubmission->submitImplicitly(evt, canTriggerImplicitSubmission()); |
| 1231 | 1241 |
| 1232 evt->setDefaultHandled(); | 1242 evt->setDefaultHandled(); |
| 1233 return; | 1243 return; |
| 1234 } | 1244 } |
| 1235 | 1245 |
| 1236 if (evt->isBeforeTextInsertedEvent()) | 1246 if (evt->isBeforeTextInsertedEvent()) |
| 1237 m_inputTypeView->handleBeforeTextInsertedEvent( | 1247 m_inputTypeView->handleBeforeTextInsertedEvent( |
| 1238 static_cast<BeforeTextInsertedEvent*>(evt)); | 1248 static_cast<BeforeTextInsertedEvent*>(evt)); |
| 1239 | 1249 |
| 1240 if (evt->isMouseEvent() && evt->type() == EventTypeNames::mousedown) { | 1250 if (evt->isMouseEvent() && evt->type() == EventTypeNames::mousedown) { |
| 1241 m_inputTypeView->handleMouseDownEvent(toMouseEvent(evt)); | 1251 m_inputTypeView->handleMouseDownEvent(toMouseEvent(evt)); |
| 1242 if (evt->defaultHandled()) | 1252 if (evt->defaultHandled()) |
| 1243 return; | 1253 return; |
| 1244 } | 1254 } |
| 1245 | 1255 |
| 1246 m_inputTypeView->forwardEvent(evt); | 1256 m_inputTypeView->forwardEvent(evt); |
| 1247 | 1257 |
| 1248 if (!callBaseClassEarly && !evt->defaultHandled()) | 1258 if (!callBaseClassEarly && !evt->defaultHandled()) |
| 1249 HTMLTextFormControlElement::defaultEventHandler(evt); | 1259 HTMLTextFormControlElement::defaultEventHandler(evt); |
| 1250 } | 1260 } |
| 1251 | 1261 |
| 1252 bool HTMLInputElement::willRespondToMouseClickEvents() { | 1262 bool HTMLInputElement::willRespondToMouseClickEvents() { |
| 1253 // FIXME: Consider implementing willRespondToMouseClickEvents() in InputType i
f more accurate results are necessary. | 1263 // FIXME: Consider implementing willRespondToMouseClickEvents() in InputType |
| 1264 // if more accurate results are necessary. |
| 1254 if (!isDisabledFormControl()) | 1265 if (!isDisabledFormControl()) |
| 1255 return true; | 1266 return true; |
| 1256 | 1267 |
| 1257 return HTMLTextFormControlElement::willRespondToMouseClickEvents(); | 1268 return HTMLTextFormControlElement::willRespondToMouseClickEvents(); |
| 1258 } | 1269 } |
| 1259 | 1270 |
| 1260 bool HTMLInputElement::isURLAttribute(const Attribute& attribute) const { | 1271 bool HTMLInputElement::isURLAttribute(const Attribute& attribute) const { |
| 1261 return attribute.name() == srcAttr || attribute.name() == formactionAttr || | 1272 return attribute.name() == srcAttr || attribute.name() == formactionAttr || |
| 1262 HTMLTextFormControlElement::isURLAttribute(attribute); | 1273 HTMLTextFormControlElement::isURLAttribute(attribute); |
| 1263 } | 1274 } |
| (...skipping 638 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1902 | 1913 |
| 1903 bool HTMLInputElement::hasFallbackContent() const { | 1914 bool HTMLInputElement::hasFallbackContent() const { |
| 1904 return m_inputTypeView->hasFallbackContent(); | 1915 return m_inputTypeView->hasFallbackContent(); |
| 1905 } | 1916 } |
| 1906 | 1917 |
| 1907 void HTMLInputElement::setFilesFromPaths(const Vector<String>& paths) { | 1918 void HTMLInputElement::setFilesFromPaths(const Vector<String>& paths) { |
| 1908 return m_inputType->setFilesFromPaths(paths); | 1919 return m_inputType->setFilesFromPaths(paths); |
| 1909 } | 1920 } |
| 1910 | 1921 |
| 1911 } // namespace blink | 1922 } // namespace blink |
| OLD | NEW |