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

Side by Side Diff: third_party/WebKit/Source/core/html/HTMLInputElement.cpp

Issue 2384273007: reflow comments in core/html/*.{cpp,h},core/html/imports (Closed)
Patch Set: Created 4 years, 2 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 /* 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
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
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
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
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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698