| 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 r
ights reserved. |
| 6 * (C) 2006 Alexey Proskuryakov (ap@nypop.com) | 6 * (C) 2006 Alexey Proskuryakov (ap@nypop.com) |
| 7 * Copyright (C) 2007 Samuel Weinig (sam@webkit.org) | 7 * Copyright (C) 2007 Samuel Weinig (sam@webkit.org) |
| 8 * Copyright (C) 2010 Google Inc. All rights reserved. | 8 * Copyright (C) 2010 Google Inc. All rights reserved. |
| 9 * Copyright (C) 2008 Torch Mobile Inc. All rights reserved. (http://www.torchmo
bile.com/) | 9 * Copyright (C) 2008 Torch Mobile Inc. All rights reserved. (http://www.torchmo
bile.com/) |
| 10 * Copyright (C) 2012 Samsung Electronics. All rights reserved. | 10 * Copyright (C) 2012 Samsung Electronics. All rights reserved. |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 147 } | 147 } |
| 148 | 148 |
| 149 HTMLInputElement::~HTMLInputElement() | 149 HTMLInputElement::~HTMLInputElement() |
| 150 { | 150 { |
| 151 // Need to remove form association while this is still an HTMLInputElement | 151 // Need to remove form association while this is still an HTMLInputElement |
| 152 // so that virtual functions are called correctly. | 152 // so that virtual functions are called correctly. |
| 153 setForm(0); | 153 setForm(0); |
| 154 // setForm(0) may register this to a document-level radio button group. | 154 // setForm(0) may register this to a document-level radio button group. |
| 155 // We should unregister it to avoid accessing a deleted object. | 155 // We should unregister it to avoid accessing a deleted object. |
| 156 if (isRadioButton()) | 156 if (isRadioButton()) |
| 157 document()->formController()->checkedRadioButtons().removeButton(this); | 157 document().formController()->checkedRadioButtons().removeButton(this); |
| 158 if (m_hasTouchEventHandler) | 158 if (m_hasTouchEventHandler) |
| 159 document()->didRemoveEventTargetNode(this); | 159 document().didRemoveEventTargetNode(this); |
| 160 } | 160 } |
| 161 | 161 |
| 162 const AtomicString& HTMLInputElement::name() const | 162 const AtomicString& HTMLInputElement::name() const |
| 163 { | 163 { |
| 164 return m_name.isNull() ? emptyAtom : m_name; | 164 return m_name.isNull() ? emptyAtom : m_name; |
| 165 } | 165 } |
| 166 | 166 |
| 167 Vector<FileChooserFileInfo> HTMLInputElement::filesFromFileInputFormControlState
(const FormControlState& state) | 167 Vector<FileChooserFileInfo> HTMLInputElement::filesFromFileInputFormControlState
(const FormControlState& state) |
| 168 { | 168 { |
| 169 return FileInputType::filesFromFormControlState(state); | 169 return FileInputType::filesFromFormControlState(state); |
| (...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 345 return m_inputType->shouldShowFocusRingOnMouseFocus(); | 345 return m_inputType->shouldShowFocusRingOnMouseFocus(); |
| 346 } | 346 } |
| 347 | 347 |
| 348 void HTMLInputElement::updateFocusAppearance(bool restorePreviousSelection) | 348 void HTMLInputElement::updateFocusAppearance(bool restorePreviousSelection) |
| 349 { | 349 { |
| 350 if (isTextField()) { | 350 if (isTextField()) { |
| 351 if (!restorePreviousSelection || !hasCachedSelection()) | 351 if (!restorePreviousSelection || !hasCachedSelection()) |
| 352 select(); | 352 select(); |
| 353 else | 353 else |
| 354 restoreCachedSelection(); | 354 restoreCachedSelection(); |
| 355 if (document()->frame()) | 355 if (document().frame()) |
| 356 document()->frame()->selection()->revealSelection(); | 356 document().frame()->selection()->revealSelection(); |
| 357 } else | 357 } else |
| 358 HTMLTextFormControlElement::updateFocusAppearance(restorePreviousSelecti
on); | 358 HTMLTextFormControlElement::updateFocusAppearance(restorePreviousSelecti
on); |
| 359 } | 359 } |
| 360 | 360 |
| 361 void HTMLInputElement::beginEditing() | 361 void HTMLInputElement::beginEditing() |
| 362 { | 362 { |
| 363 if (!isTextField()) | 363 if (!isTextField()) |
| 364 return; | 364 return; |
| 365 | 365 |
| 366 if (Frame* frame = document()->frame()) | 366 if (Frame* frame = document().frame()) |
| 367 frame->editor().textAreaOrTextFieldDidBeginEditing(this); | 367 frame->editor().textAreaOrTextFieldDidBeginEditing(this); |
| 368 } | 368 } |
| 369 | 369 |
| 370 void HTMLInputElement::endEditing() | 370 void HTMLInputElement::endEditing() |
| 371 { | 371 { |
| 372 if (!isTextField()) | 372 if (!isTextField()) |
| 373 return; | 373 return; |
| 374 | 374 |
| 375 if (Frame* frame = document()->frame()) | 375 if (Frame* frame = document().frame()) |
| 376 frame->editor().textFieldDidEndEditing(this); | 376 frame->editor().textFieldDidEndEditing(this); |
| 377 } | 377 } |
| 378 | 378 |
| 379 bool HTMLInputElement::shouldUseInputMethod() | 379 bool HTMLInputElement::shouldUseInputMethod() |
| 380 { | 380 { |
| 381 return m_inputType->shouldUseInputMethod(); | 381 return m_inputType->shouldUseInputMethod(); |
| 382 } | 382 } |
| 383 | 383 |
| 384 void HTMLInputElement::handleFocusEvent(Element* oldFocusedElement, FocusDirecti
on direction) | 384 void HTMLInputElement::handleFocusEvent(Element* oldFocusedElement, FocusDirecti
on direction) |
| 385 { | 385 { |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 431 if (wasAttached) | 431 if (wasAttached) |
| 432 detach(); | 432 detach(); |
| 433 | 433 |
| 434 m_inputType = newType.release(); | 434 m_inputType = newType.release(); |
| 435 m_inputTypeView = m_inputType; | 435 m_inputTypeView = m_inputType; |
| 436 m_inputType->createShadowSubtree(); | 436 m_inputType->createShadowSubtree(); |
| 437 | 437 |
| 438 bool hasTouchEventHandler = m_inputTypeView->hasTouchEventHandler(); | 438 bool hasTouchEventHandler = m_inputTypeView->hasTouchEventHandler(); |
| 439 if (hasTouchEventHandler != m_hasTouchEventHandler) { | 439 if (hasTouchEventHandler != m_hasTouchEventHandler) { |
| 440 if (hasTouchEventHandler) | 440 if (hasTouchEventHandler) |
| 441 document()->didAddTouchEventHandler(this); | 441 document().didAddTouchEventHandler(this); |
| 442 else | 442 else |
| 443 document()->didRemoveTouchEventHandler(this); | 443 document().didRemoveTouchEventHandler(this); |
| 444 m_hasTouchEventHandler = hasTouchEventHandler; | 444 m_hasTouchEventHandler = hasTouchEventHandler; |
| 445 } | 445 } |
| 446 | 446 |
| 447 setNeedsWillValidateCheck(); | 447 setNeedsWillValidateCheck(); |
| 448 | 448 |
| 449 bool willStoreValue = m_inputType->storesValueSeparateFromAttribute(); | 449 bool willStoreValue = m_inputType->storesValueSeparateFromAttribute(); |
| 450 | 450 |
| 451 if (didStoreValue && !willStoreValue && hasDirtyValue()) { | 451 if (didStoreValue && !willStoreValue && hasDirtyValue()) { |
| 452 setAttribute(valueAttr, m_valueIfDirty); | 452 setAttribute(valueAttr, m_valueIfDirty); |
| 453 m_valueIfDirty = String(); | 453 m_valueIfDirty = String(); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 468 if (const Attribute* height = getAttributeItem(heightAttr)) | 468 if (const Attribute* height = getAttributeItem(heightAttr)) |
| 469 attributeChanged(heightAttr, height->value()); | 469 attributeChanged(heightAttr, height->value()); |
| 470 if (const Attribute* width = getAttributeItem(widthAttr)) | 470 if (const Attribute* width = getAttributeItem(widthAttr)) |
| 471 attributeChanged(widthAttr, width->value()); | 471 attributeChanged(widthAttr, width->value()); |
| 472 if (const Attribute* align = getAttributeItem(alignAttr)) | 472 if (const Attribute* align = getAttributeItem(alignAttr)) |
| 473 attributeChanged(alignAttr, align->value()); | 473 attributeChanged(alignAttr, align->value()); |
| 474 } | 474 } |
| 475 | 475 |
| 476 if (wasAttached) { | 476 if (wasAttached) { |
| 477 lazyAttach(); | 477 lazyAttach(); |
| 478 if (document()->focusedElement() == this) | 478 if (document().focusedElement() == this) |
| 479 document()->updateFocusAppearanceSoon(true /* restore selection */); | 479 document().updateFocusAppearanceSoon(true /* restore selection */); |
| 480 } | 480 } |
| 481 | 481 |
| 482 setChangedSinceLastFormControlChangeEvent(false); | 482 setChangedSinceLastFormControlChangeEvent(false); |
| 483 | 483 |
| 484 addToRadioButtonGroup(); | 484 addToRadioButtonGroup(); |
| 485 | 485 |
| 486 setNeedsValidityCheck(); | 486 setNeedsValidityCheck(); |
| 487 notifyFormStateChanged(); | 487 notifyFormStateChanged(); |
| 488 } | 488 } |
| 489 | 489 |
| (...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 691 // Search field and slider attributes all just cause updateFromElement t
o be called through style recalcing. | 691 // Search field and slider attributes all just cause updateFromElement t
o be called through style recalcing. |
| 692 setAttributeEventListener(eventNames().searchEvent, createAttributeEvent
Listener(this, name, value)); | 692 setAttributeEventListener(eventNames().searchEvent, createAttributeEvent
Listener(this, name, value)); |
| 693 } else if (name == resultsAttr) { | 693 } else if (name == resultsAttr) { |
| 694 int oldResults = m_maxResults; | 694 int oldResults = m_maxResults; |
| 695 m_maxResults = !value.isNull() ? std::min(value.toInt(), maxSavedResults
) : -1; | 695 m_maxResults = !value.isNull() ? std::min(value.toInt(), maxSavedResults
) : -1; |
| 696 // FIXME: Detaching just for maxResults change is not ideal. We should
figure out the right | 696 // FIXME: Detaching just for maxResults change is not ideal. We should
figure out the right |
| 697 // time to relayout for this change. | 697 // time to relayout for this change. |
| 698 if (m_maxResults != oldResults && (m_maxResults <= 0 || oldResults <= 0)
) | 698 if (m_maxResults != oldResults && (m_maxResults <= 0 || oldResults <= 0)
) |
| 699 lazyReattachIfAttached(); | 699 lazyReattachIfAttached(); |
| 700 setNeedsStyleRecalc(); | 700 setNeedsStyleRecalc(); |
| 701 UseCounter::count(document(), UseCounter::ResultsAttribute); | 701 UseCounter::count(&document(), UseCounter::ResultsAttribute); |
| 702 } else if (name == incrementalAttr) { | 702 } else if (name == incrementalAttr) { |
| 703 setNeedsStyleRecalc(); | 703 setNeedsStyleRecalc(); |
| 704 UseCounter::count(document(), UseCounter::IncrementalAttribute); | 704 UseCounter::count(&document(), UseCounter::IncrementalAttribute); |
| 705 } else if (name == minAttr) { | 705 } else if (name == minAttr) { |
| 706 m_inputTypeView->minOrMaxAttributeChanged(); | 706 m_inputTypeView->minOrMaxAttributeChanged(); |
| 707 m_inputType->sanitizeValueInResponseToMinOrMaxAttributeChange(); | 707 m_inputType->sanitizeValueInResponseToMinOrMaxAttributeChange(); |
| 708 setNeedsValidityCheck(); | 708 setNeedsValidityCheck(); |
| 709 UseCounter::count(document(), UseCounter::MinAttribute); | 709 UseCounter::count(&document(), UseCounter::MinAttribute); |
| 710 } else if (name == maxAttr) { | 710 } else if (name == maxAttr) { |
| 711 m_inputTypeView->minOrMaxAttributeChanged(); | 711 m_inputTypeView->minOrMaxAttributeChanged(); |
| 712 setNeedsValidityCheck(); | 712 setNeedsValidityCheck(); |
| 713 UseCounter::count(document(), UseCounter::MaxAttribute); | 713 UseCounter::count(&document(), UseCounter::MaxAttribute); |
| 714 } else if (name == multipleAttr) { | 714 } else if (name == multipleAttr) { |
| 715 m_inputTypeView->multipleAttributeChanged(); | 715 m_inputTypeView->multipleAttributeChanged(); |
| 716 setNeedsValidityCheck(); | 716 setNeedsValidityCheck(); |
| 717 } else if (name == stepAttr) { | 717 } else if (name == stepAttr) { |
| 718 m_inputTypeView->stepAttributeChanged(); | 718 m_inputTypeView->stepAttributeChanged(); |
| 719 setNeedsValidityCheck(); | 719 setNeedsValidityCheck(); |
| 720 UseCounter::count(document(), UseCounter::StepAttribute); | 720 UseCounter::count(&document(), UseCounter::StepAttribute); |
| 721 } else if (name == patternAttr) { | 721 } else if (name == patternAttr) { |
| 722 setNeedsValidityCheck(); | 722 setNeedsValidityCheck(); |
| 723 UseCounter::count(document(), UseCounter::PatternAttribute); | 723 UseCounter::count(&document(), UseCounter::PatternAttribute); |
| 724 } else if (name == precisionAttr) { | 724 } else if (name == precisionAttr) { |
| 725 setNeedsValidityCheck(); | 725 setNeedsValidityCheck(); |
| 726 UseCounter::count(document(), UseCounter::PrecisionAttribute); | 726 UseCounter::count(&document(), UseCounter::PrecisionAttribute); |
| 727 } else if (name == disabledAttr) { | 727 } else if (name == disabledAttr) { |
| 728 HTMLTextFormControlElement::parseAttribute(name, value); | 728 HTMLTextFormControlElement::parseAttribute(name, value); |
| 729 m_inputTypeView->disabledAttributeChanged(); | 729 m_inputTypeView->disabledAttributeChanged(); |
| 730 } else if (name == readonlyAttr) { | 730 } else if (name == readonlyAttr) { |
| 731 HTMLTextFormControlElement::parseAttribute(name, value); | 731 HTMLTextFormControlElement::parseAttribute(name, value); |
| 732 m_inputTypeView->readonlyAttributeChanged(); | 732 m_inputTypeView->readonlyAttributeChanged(); |
| 733 } else if (name == listAttr) { | 733 } else if (name == listAttr) { |
| 734 m_hasNonEmptyList = !value.isEmpty(); | 734 m_hasNonEmptyList = !value.isEmpty(); |
| 735 if (m_hasNonEmptyList) { | 735 if (m_hasNonEmptyList) { |
| 736 resetListAttributeTargetObserver(); | 736 resetListAttributeTargetObserver(); |
| 737 listAttributeTargetChanged(); | 737 listAttributeTargetChanged(); |
| 738 } | 738 } |
| 739 UseCounter::count(document(), UseCounter::ListAttribute); | 739 UseCounter::count(&document(), UseCounter::ListAttribute); |
| 740 } | 740 } |
| 741 #if ENABLE(INPUT_SPEECH) | 741 #if ENABLE(INPUT_SPEECH) |
| 742 else if (name == webkitspeechAttr) { | 742 else if (name == webkitspeechAttr) { |
| 743 if (RuntimeEnabledFeatures::speechInputEnabled() && m_inputType->shouldR
espectSpeechAttribute()) { | 743 if (RuntimeEnabledFeatures::speechInputEnabled() && m_inputType->shouldR
espectSpeechAttribute()) { |
| 744 // This renderer and its children have quite different layouts and | 744 // This renderer and its children have quite different layouts and |
| 745 // styles depending on whether the speech button is visible or | 745 // styles depending on whether the speech button is visible or |
| 746 // not. So we reset the whole thing and recreate to get the right | 746 // not. So we reset the whole thing and recreate to get the right |
| 747 // styles and layout. | 747 // styles and layout. |
| 748 m_inputType->destroyShadowSubtree(); | 748 m_inputType->destroyShadowSubtree(); |
| 749 lazyReattachIfAttached(); | 749 lazyReattachIfAttached(); |
| 750 m_inputType->createShadowSubtree(); | 750 m_inputType->createShadowSubtree(); |
| 751 setFormControlValueMatchesRenderer(false); | 751 setFormControlValueMatchesRenderer(false); |
| 752 } | 752 } |
| 753 UseCounter::count(document(), UseCounter::PrefixedSpeechAttribute); | 753 UseCounter::count(&document(), UseCounter::PrefixedSpeechAttribute); |
| 754 } else if (name == onwebkitspeechchangeAttr) | 754 } else if (name == onwebkitspeechchangeAttr) |
| 755 setAttributeEventListener(eventNames().webkitspeechchangeEvent, createAt
tributeEventListener(this, name, value)); | 755 setAttributeEventListener(eventNames().webkitspeechchangeEvent, createAt
tributeEventListener(this, name, value)); |
| 756 #endif | 756 #endif |
| 757 else if (name == webkitdirectoryAttr) { | 757 else if (name == webkitdirectoryAttr) { |
| 758 HTMLTextFormControlElement::parseAttribute(name, value); | 758 HTMLTextFormControlElement::parseAttribute(name, value); |
| 759 UseCounter::count(document(), UseCounter::PrefixedDirectoryAttribute); | 759 UseCounter::count(&document(), UseCounter::PrefixedDirectoryAttribute); |
| 760 } | 760 } |
| 761 else | 761 else |
| 762 HTMLTextFormControlElement::parseAttribute(name, value); | 762 HTMLTextFormControlElement::parseAttribute(name, value); |
| 763 m_inputTypeView->attributeChanged(); | 763 m_inputTypeView->attributeChanged(); |
| 764 } | 764 } |
| 765 | 765 |
| 766 void HTMLInputElement::finishParsingChildren() | 766 void HTMLInputElement::finishParsingChildren() |
| 767 { | 767 { |
| 768 m_parsingInProgress = false; | 768 m_parsingInProgress = false; |
| 769 HTMLTextFormControlElement::finishParsingChildren(); | 769 HTMLTextFormControlElement::finishParsingChildren(); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 790 PostAttachCallbackDisabler disabler(this); | 790 PostAttachCallbackDisabler disabler(this); |
| 791 | 791 |
| 792 if (!m_hasType) | 792 if (!m_hasType) |
| 793 updateType(); | 793 updateType(); |
| 794 | 794 |
| 795 HTMLTextFormControlElement::attach(context); | 795 HTMLTextFormControlElement::attach(context); |
| 796 | 796 |
| 797 m_inputTypeView->attach(); | 797 m_inputTypeView->attach(); |
| 798 m_inputType->countUsage(); | 798 m_inputType->countUsage(); |
| 799 | 799 |
| 800 if (document()->focusedElement() == this) | 800 if (document().focusedElement() == this) |
| 801 document()->updateFocusAppearanceSoon(true /* restore selection */); | 801 document().updateFocusAppearanceSoon(true /* restore selection */); |
| 802 } | 802 } |
| 803 | 803 |
| 804 void HTMLInputElement::detach(const AttachContext& context) | 804 void HTMLInputElement::detach(const AttachContext& context) |
| 805 { | 805 { |
| 806 HTMLTextFormControlElement::detach(context); | 806 HTMLTextFormControlElement::detach(context); |
| 807 setFormControlValueMatchesRenderer(false); | 807 setFormControlValueMatchesRenderer(false); |
| 808 m_inputType->detach(); | 808 m_inputType->detach(); |
| 809 } | 809 } |
| 810 | 810 |
| 811 String HTMLInputElement::altText() const | 811 String HTMLInputElement::altText() const |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 879 buttons->updateCheckedState(this); | 879 buttons->updateCheckedState(this); |
| 880 if (renderer() && renderer()->style()->hasAppearance()) | 880 if (renderer() && renderer()->style()->hasAppearance()) |
| 881 RenderTheme::theme().stateChanged(renderer(), CheckedState); | 881 RenderTheme::theme().stateChanged(renderer(), CheckedState); |
| 882 | 882 |
| 883 setNeedsValidityCheck(); | 883 setNeedsValidityCheck(); |
| 884 | 884 |
| 885 // Ideally we'd do this from the render tree (matching | 885 // Ideally we'd do this from the render tree (matching |
| 886 // RenderTextView), but it's not possible to do it at the moment | 886 // RenderTextView), but it's not possible to do it at the moment |
| 887 // because of the way the code is structured. | 887 // because of the way the code is structured. |
| 888 if (renderer()) { | 888 if (renderer()) { |
| 889 if (AXObjectCache* cache = renderer()->document()->existingAXObjectCache
()) | 889 if (AXObjectCache* cache = renderer()->document().existingAXObjectCache(
)) |
| 890 cache->checkedStateChanged(this); | 890 cache->checkedStateChanged(this); |
| 891 } | 891 } |
| 892 | 892 |
| 893 // Only send a change event for items in the document (avoid firing during | 893 // Only send a change event for items in the document (avoid firing during |
| 894 // parsing) and don't send a change event for a radio button that's getting | 894 // parsing) and don't send a change event for a radio button that's getting |
| 895 // unchecked to match other browsers. DOM is not a useful standard for this | 895 // unchecked to match other browsers. DOM is not a useful standard for this |
| 896 // because it says only to fire change events at "lose focus" time, which is | 896 // because it says only to fire change events at "lose focus" time, which is |
| 897 // definitely wrong in practice for these types of elements. | 897 // definitely wrong in practice for these types of elements. |
| 898 if (eventBehavior != DispatchNoEvent && inDocument() && m_inputType->shouldS
endChangeEventAfterCheckedChanged()) { | 898 if (eventBehavior != DispatchNoEvent && inDocument() && m_inputType->shouldS
endChangeEventAfterCheckedChanged()) { |
| 899 setTextAsOfLastFormControlChangeEvent(String()); | 899 setTextAsOfLastFormControlChangeEvent(String()); |
| (...skipping 414 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1314 void HTMLInputElement::setSize(unsigned size, ExceptionState& es) | 1314 void HTMLInputElement::setSize(unsigned size, ExceptionState& es) |
| 1315 { | 1315 { |
| 1316 if (!size) | 1316 if (!size) |
| 1317 es.throwDOMException(IndexSizeError); | 1317 es.throwDOMException(IndexSizeError); |
| 1318 else | 1318 else |
| 1319 setSize(size); | 1319 setSize(size); |
| 1320 } | 1320 } |
| 1321 | 1321 |
| 1322 KURL HTMLInputElement::src() const | 1322 KURL HTMLInputElement::src() const |
| 1323 { | 1323 { |
| 1324 return document()->completeURL(fastGetAttribute(srcAttr)); | 1324 return document().completeURL(fastGetAttribute(srcAttr)); |
| 1325 } | 1325 } |
| 1326 | 1326 |
| 1327 void HTMLInputElement::setAutofilled(bool autofilled) | 1327 void HTMLInputElement::setAutofilled(bool autofilled) |
| 1328 { | 1328 { |
| 1329 if (autofilled == m_isAutofilled) | 1329 if (autofilled == m_isAutofilled) |
| 1330 return; | 1330 return; |
| 1331 | 1331 |
| 1332 m_isAutofilled = autofilled; | 1332 m_isAutofilled = autofilled; |
| 1333 setNeedsStyleRecalc(); | 1333 setNeedsStyleRecalc(); |
| 1334 } | 1334 } |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1460 imageLoader()->elementDidMoveToNewDocument(); | 1460 imageLoader()->elementDidMoveToNewDocument(); |
| 1461 | 1461 |
| 1462 if (oldDocument) { | 1462 if (oldDocument) { |
| 1463 if (isRadioButton()) | 1463 if (isRadioButton()) |
| 1464 oldDocument->formController()->checkedRadioButtons().removeButton(th
is); | 1464 oldDocument->formController()->checkedRadioButtons().removeButton(th
is); |
| 1465 if (m_hasTouchEventHandler) | 1465 if (m_hasTouchEventHandler) |
| 1466 oldDocument->didRemoveEventTargetNode(this); | 1466 oldDocument->didRemoveEventTargetNode(this); |
| 1467 } | 1467 } |
| 1468 | 1468 |
| 1469 if (m_hasTouchEventHandler) | 1469 if (m_hasTouchEventHandler) |
| 1470 document()->didAddTouchEventHandler(this); | 1470 document().didAddTouchEventHandler(this); |
| 1471 | 1471 |
| 1472 HTMLTextFormControlElement::didMoveToNewDocument(oldDocument); | 1472 HTMLTextFormControlElement::didMoveToNewDocument(oldDocument); |
| 1473 } | 1473 } |
| 1474 | 1474 |
| 1475 void HTMLInputElement::addSubresourceAttributeURLs(ListHashSet<KURL>& urls) cons
t | 1475 void HTMLInputElement::addSubresourceAttributeURLs(ListHashSet<KURL>& urls) cons
t |
| 1476 { | 1476 { |
| 1477 HTMLTextFormControlElement::addSubresourceAttributeURLs(urls); | 1477 HTMLTextFormControlElement::addSubresourceAttributeURLs(urls); |
| 1478 | 1478 |
| 1479 addSubresourceURL(urls, src()); | 1479 addSubresourceURL(urls, src()); |
| 1480 } | 1480 } |
| (...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1716 bool HTMLInputElement::capture() const | 1716 bool HTMLInputElement::capture() const |
| 1717 { | 1717 { |
| 1718 if (!isFileUpload() || !fastHasAttribute(captureAttr)) | 1718 if (!isFileUpload() || !fastHasAttribute(captureAttr)) |
| 1719 return false; | 1719 return false; |
| 1720 | 1720 |
| 1721 // As per crbug.com/240252, emit a deprecation warning when the "capture" | 1721 // As per crbug.com/240252, emit a deprecation warning when the "capture" |
| 1722 // attribute is used as an enum. The spec has been updated and "capture" is | 1722 // attribute is used as an enum. The spec has been updated and "capture" is |
| 1723 // supposed to be used as a boolean. | 1723 // supposed to be used as a boolean. |
| 1724 bool hasDeprecatedUsage = !fastGetAttribute(captureAttr).isNull(); | 1724 bool hasDeprecatedUsage = !fastGetAttribute(captureAttr).isNull(); |
| 1725 if (hasDeprecatedUsage) | 1725 if (hasDeprecatedUsage) |
| 1726 UseCounter::countDeprecation(document(), UseCounter::CaptureAttributeAsE
num); | 1726 UseCounter::countDeprecation(&document(), UseCounter::CaptureAttributeAs
Enum); |
| 1727 else | 1727 else |
| 1728 UseCounter::count(document(), UseCounter::CaptureAttributeAsEnum); | 1728 UseCounter::count(&document(), UseCounter::CaptureAttributeAsEnum); |
| 1729 | 1729 |
| 1730 return true; | 1730 return true; |
| 1731 } | 1731 } |
| 1732 #endif | 1732 #endif |
| 1733 | 1733 |
| 1734 bool HTMLInputElement::isInRequiredRadioButtonGroup() | 1734 bool HTMLInputElement::isInRequiredRadioButtonGroup() |
| 1735 { | 1735 { |
| 1736 ASSERT(isRadioButton()); | 1736 ASSERT(isRadioButton()); |
| 1737 if (CheckedRadioButtons* buttons = checkedRadioButtons()) | 1737 if (CheckedRadioButtons* buttons = checkedRadioButtons()) |
| 1738 return buttons->isInRequiredGroup(this); | 1738 return buttons->isInRequiredGroup(this); |
| 1739 return false; | 1739 return false; |
| 1740 } | 1740 } |
| 1741 | 1741 |
| 1742 HTMLInputElement* HTMLInputElement::checkedRadioButtonForGroup() const | 1742 HTMLInputElement* HTMLInputElement::checkedRadioButtonForGroup() const |
| 1743 { | 1743 { |
| 1744 if (CheckedRadioButtons* buttons = checkedRadioButtons()) | 1744 if (CheckedRadioButtons* buttons = checkedRadioButtons()) |
| 1745 return buttons->checkedButtonForGroup(name()); | 1745 return buttons->checkedButtonForGroup(name()); |
| 1746 return 0; | 1746 return 0; |
| 1747 } | 1747 } |
| 1748 | 1748 |
| 1749 CheckedRadioButtons* HTMLInputElement::checkedRadioButtons() const | 1749 CheckedRadioButtons* HTMLInputElement::checkedRadioButtons() const |
| 1750 { | 1750 { |
| 1751 if (!isRadioButton()) | 1751 if (!isRadioButton()) |
| 1752 return 0; | 1752 return 0; |
| 1753 if (HTMLFormElement* formElement = form()) | 1753 if (HTMLFormElement* formElement = form()) |
| 1754 return &formElement->checkedRadioButtons(); | 1754 return &formElement->checkedRadioButtons(); |
| 1755 if (inDocument()) | 1755 if (inDocument()) |
| 1756 return &document()->formController()->checkedRadioButtons(); | 1756 return &document().formController()->checkedRadioButtons(); |
| 1757 return 0; | 1757 return 0; |
| 1758 } | 1758 } |
| 1759 | 1759 |
| 1760 inline void HTMLInputElement::addToRadioButtonGroup() | 1760 inline void HTMLInputElement::addToRadioButtonGroup() |
| 1761 { | 1761 { |
| 1762 if (CheckedRadioButtons* buttons = checkedRadioButtons()) | 1762 if (CheckedRadioButtons* buttons = checkedRadioButtons()) |
| 1763 buttons->addButton(this); | 1763 buttons->addButton(this); |
| 1764 } | 1764 } |
| 1765 | 1765 |
| 1766 inline void HTMLInputElement::removeFromRadioButtonGroup() | 1766 inline void HTMLInputElement::removeFromRadioButtonGroup() |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1820 if (!m_inputType->supportsSelectionAPI()) { | 1820 if (!m_inputType->supportsSelectionAPI()) { |
| 1821 es.throwDOMException(InvalidStateError); | 1821 es.throwDOMException(InvalidStateError); |
| 1822 return; | 1822 return; |
| 1823 } | 1823 } |
| 1824 | 1824 |
| 1825 HTMLTextFormControlElement::setRangeText(replacement, start, end, selectionM
ode, es); | 1825 HTMLTextFormControlElement::setRangeText(replacement, start, end, selectionM
ode, es); |
| 1826 } | 1826 } |
| 1827 | 1827 |
| 1828 bool HTMLInputElement::setupDateTimeChooserParameters(DateTimeChooserParameters&
parameters) | 1828 bool HTMLInputElement::setupDateTimeChooserParameters(DateTimeChooserParameters&
parameters) |
| 1829 { | 1829 { |
| 1830 if (!document()->view()) | 1830 if (!document().view()) |
| 1831 return false; | 1831 return false; |
| 1832 | 1832 |
| 1833 parameters.type = type(); | 1833 parameters.type = type(); |
| 1834 parameters.minimum = minimum(); | 1834 parameters.minimum = minimum(); |
| 1835 parameters.maximum = maximum(); | 1835 parameters.maximum = maximum(); |
| 1836 parameters.required = isRequired(); | 1836 parameters.required = isRequired(); |
| 1837 if (!RuntimeEnabledFeatures::langAttributeAwareFormControlUIEnabled()) | 1837 if (!RuntimeEnabledFeatures::langAttributeAwareFormControlUIEnabled()) |
| 1838 parameters.locale = defaultLanguage(); | 1838 parameters.locale = defaultLanguage(); |
| 1839 else { | 1839 else { |
| 1840 AtomicString computedLocale = computeInheritedLanguage(); | 1840 AtomicString computedLocale = computeInheritedLanguage(); |
| 1841 parameters.locale = computedLocale.isEmpty() ? AtomicString(defaultLangu
age()) : computedLocale; | 1841 parameters.locale = computedLocale.isEmpty() ? AtomicString(defaultLangu
age()) : computedLocale; |
| 1842 } | 1842 } |
| 1843 | 1843 |
| 1844 StepRange stepRange = createStepRange(RejectAny); | 1844 StepRange stepRange = createStepRange(RejectAny); |
| 1845 if (stepRange.hasStep()) { | 1845 if (stepRange.hasStep()) { |
| 1846 parameters.step = stepRange.step().toDouble(); | 1846 parameters.step = stepRange.step().toDouble(); |
| 1847 parameters.stepBase = stepRange.stepBase().toDouble(); | 1847 parameters.stepBase = stepRange.stepBase().toDouble(); |
| 1848 } else { | 1848 } else { |
| 1849 parameters.step = 1.0; | 1849 parameters.step = 1.0; |
| 1850 parameters.stepBase = 0; | 1850 parameters.stepBase = 0; |
| 1851 } | 1851 } |
| 1852 | 1852 |
| 1853 parameters.anchorRectInRootView = document()->view()->contentsToRootView(pix
elSnappedBoundingBox()); | 1853 parameters.anchorRectInRootView = document().view()->contentsToRootView(pixe
lSnappedBoundingBox()); |
| 1854 parameters.currentValue = value(); | 1854 parameters.currentValue = value(); |
| 1855 parameters.isAnchorElementRTL = computedStyle()->direction() == RTL; | 1855 parameters.isAnchorElementRTL = computedStyle()->direction() == RTL; |
| 1856 if (RuntimeEnabledFeatures::dataListElementEnabled()) { | 1856 if (RuntimeEnabledFeatures::dataListElementEnabled()) { |
| 1857 if (HTMLDataListElement* dataList = this->dataList()) { | 1857 if (HTMLDataListElement* dataList = this->dataList()) { |
| 1858 RefPtr<HTMLCollection> options = dataList->options(); | 1858 RefPtr<HTMLCollection> options = dataList->options(); |
| 1859 for (unsigned i = 0; HTMLOptionElement* option = toHTMLOptionElement
(options->item(i)); ++i) { | 1859 for (unsigned i = 0; HTMLOptionElement* option = toHTMLOptionElement
(options->item(i)); ++i) { |
| 1860 if (!isValidValue(option->value())) | 1860 if (!isValidValue(option->value())) |
| 1861 continue; | 1861 continue; |
| 1862 parameters.suggestionValues.append(sanitizeValue(option->value()
)); | 1862 parameters.suggestionValues.append(sanitizeValue(option->value()
)); |
| 1863 parameters.localizedSuggestionValues.append(localizeValue(option
->value())); | 1863 parameters.localizedSuggestionValues.append(localizeValue(option
->value())); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1874 } | 1874 } |
| 1875 | 1875 |
| 1876 #if ENABLE(INPUT_MULTIPLE_FIELDS_UI) | 1876 #if ENABLE(INPUT_MULTIPLE_FIELDS_UI) |
| 1877 PassRefPtr<RenderStyle> HTMLInputElement::customStyleForRenderer() | 1877 PassRefPtr<RenderStyle> HTMLInputElement::customStyleForRenderer() |
| 1878 { | 1878 { |
| 1879 return m_inputTypeView->customStyleForRenderer(originalStyleForRenderer()); | 1879 return m_inputTypeView->customStyleForRenderer(originalStyleForRenderer()); |
| 1880 } | 1880 } |
| 1881 #endif | 1881 #endif |
| 1882 | 1882 |
| 1883 } // namespace | 1883 } // namespace |
| OLD | NEW |