Changeset 53248 in webkit
- Timestamp:
- Jan 14, 2010 1:31:44 AM (14 years ago)
- Location:
- trunk
- Files:
-
- 4 added
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r53247 r53248 1 2010-01-14 James Robinson <jamesr@chromium.org> 2 3 Reviewed by Alexey Proskuryakov. 4 5 Adds tests for the 'selected' attribute of <option>s 6 https://bugs.webkit.org/show_bug.cgi?id=32641 7 8 HTMLOptionElement_selected2 checks that the selected attribute is up to date immediately after the <select> 9 parsed. HTMLOptionElement_selected3 does the same, but checks immediately prior to the </select>. 10 11 Also changes the expectation for add-remove-option-modification-event to reflect that we now pass. 12 13 * fast/forms/HTMLOptionElement_selected-expected.txt: 14 * fast/forms/HTMLOptionElement_selected.html: 15 * fast/forms/HTMLOptionElement_selected2-expected.txt: Added. 16 * fast/forms/HTMLOptionElement_selected2.html: Added. 17 * fast/forms/HTMLOptionElement_selected3-expected.txt: Added. 18 * fast/forms/HTMLOptionElement_selected3.html: Added. 19 * fast/forms/add-remove-option-modification-event-expected.txt: 20 1 21 2010-01-14 Csaba Osztrogonác <ossy@webkit.org> 2 22 -
trunk/LayoutTests/fast/forms/HTMLOptionElement_selected-expected.txt
r26525 r53248 2 2 3 3 true 4 0 4 5 true 5 6 -
trunk/LayoutTests/fast/forms/HTMLOptionElement_selected.html
r26525 r53248 11 11 var theOption = document.getElementById('theOption'); 12 12 console.innerHTML += theOption.selected + "<br>"; 13 theOption.parentNode.selectedIndex;13 console.innerHTML += theOption.parentNode.selectedIndex + "<br>"; 14 14 console.innerHTML += theOption.selected + "<br>"; 15 15 } -
trunk/LayoutTests/fast/forms/add-remove-option-modification-event-expected.txt
r41772 r53248 3 3 4 4 5 Failed6 Expected: true7 Actual: false8 9 5 Passed 10 6 Passed 7 Passed -
trunk/WebCore/ChangeLog
r53246 r53248 1 2010-01-14 James Robinson <jamesr@chromium.org> 2 3 Reviewed by Alexey Proskuryakov. 4 5 Ensures that the 'selected' attribute of an <option> is correct 6 https://bugs.webkit.org/show_bug.cgi?id=32641 7 8 Adds a check in OptionElement::selected() that checks if list items need to be recalculated and does so if needed, 9 so the attribute is up to date more often. Also gets rid of most of the recalcStyle() side effects. 10 11 Our behavior now matches Firefox 3.5 and IE8 after the </select> is parsed. 12 13 Tests: fast/forms/HTMLOptionElement_selected2.html 14 fast/forms/HTMLOptionElement_selected3.html 15 16 * dom/SelectElement.cpp: 17 (WebCore::SelectElement::setOptionsChangedOnRenderer): 18 (WebCore::SelectElement::setRecalcListItems): 19 (WebCore::SelectElement::recalcListItems): 20 (WebCore::SelectElement::restoreFormControlState): 21 (WebCore::SelectElement::reset): 22 (WebCore::SelectElement::typeAheadFind): 23 * dom/SelectElement.h: 24 * html/HTMLOptionElement.cpp: 25 (WebCore::HTMLOptionElement::selected): 26 (WebCore::HTMLOptionElement::insertedIntoTree): 27 * html/HTMLSelectElement.cpp: 28 (WebCore::HTMLSelectElement::recalcStyle): 29 (WebCore::HTMLSelectElement::recalcListItemsIfNeeded): 30 * html/HTMLSelectElement.h: 31 * wml/WMLSelectElement.cpp: 32 (WebCore::WMLSelectElement::recalcStyle): 33 1 34 2010-01-14 Zoltan Horvath <zoltan@webkit.org> 2 35 -
trunk/WebCore/dom/SelectElement.cpp
r53151 r53248 223 223 } 224 224 225 void SelectElement::recalcStyle(SelectElementData& data, Element* element) 226 { 227 RenderObject* renderer = element->renderer(); 228 if (element->childNeedsStyleRecalc() && renderer) { 229 if (data.usesMenuList()) 230 toRenderMenuList(renderer)->setOptionsChanged(true); 231 else 232 toRenderListBox(renderer)->setOptionsChanged(true); 233 } else if (data.shouldRecalcListItems()) 234 recalcListItems(data, element); 235 } 236 237 void SelectElement::setRecalcListItems(SelectElementData& data, Element* element) 238 { 239 data.setShouldRecalcListItems(true); 240 data.setActiveSelectionAnchorIndex(-1); // Manual selection anchor is reset when manipulating the select programmatically. 225 void SelectElement::setOptionsChangedOnRenderer(SelectElementData& data, Element* element) 226 { 241 227 if (RenderObject* renderer = element->renderer()) { 242 228 if (data.usesMenuList()) … … 245 231 toRenderListBox(renderer)->setOptionsChanged(true); 246 232 } 233 } 234 235 void SelectElement::setRecalcListItems(SelectElementData& data, Element* element) 236 { 237 data.setShouldRecalcListItems(true); 238 data.setActiveSelectionAnchorIndex(-1); // Manual selection anchor is reset when manipulating the select programmatically. 239 setOptionsChangedOnRenderer(data, element); 247 240 element->setNeedsStyleRecalc(); 248 241 } … … 252 245 Vector<Element*>& listItems = data.rawListItems(); 253 246 listItems.clear(); 247 248 data.setShouldRecalcListItems(false); 254 249 255 250 OptionElement* foundSelected = 0; … … 298 293 currentNode = currentNode->traverseNextSibling(element); 299 294 } 300 301 data.setShouldRecalcListItems(false);302 295 } 303 296 … … 448 441 } 449 442 450 element->setNeedsStyleRecalc();443 setOptionsChangedOnRenderer(data, element); 451 444 } 452 445 … … 522 515 firstOption->setSelectedState(true); 523 516 524 element->setNeedsStyleRecalc();517 setOptionsChangedOnRenderer(data, element); 525 518 } 526 519 … … 896 889 if (!data.usesMenuList()) 897 890 listBoxOnChange(data, element); 898 element->setNeedsStyleRecalc(); 891 892 setOptionsChangedOnRenderer(data, element); 899 893 return; 900 894 } -
trunk/WebCore/dom/SelectElement.h
r45342 r53248 76 76 static void menuListOnChange(SelectElementData&, Element*); 77 77 static void scrollToSelection(SelectElementData&, Element*); 78 static void recalcStyle(SelectElementData&, Element*);79 78 static void setRecalcListItems(SelectElementData&, Element*); 80 79 static void recalcListItems(SelectElementData&, const Element*, bool updateSelectedStates = true); … … 101 100 static void menuListDefaultEventHandler(SelectElementData&, Element*, Event*, HTMLFormElement*); 102 101 static void listBoxDefaultEventHandler(SelectElementData&, Element*, Event*, HTMLFormElement*); 102 static void setOptionsChangedOnRenderer(SelectElementData&, Element*); 103 103 }; 104 104 -
trunk/WebCore/html/HTMLOptionElement.cpp
r48106 r53248 138 138 bool HTMLOptionElement::selected() const 139 139 { 140 if (HTMLSelectElement* select = ownerSelectElement()) 141 select->recalcListItemsIfNeeded(); 140 142 return m_data.selected(); 141 143 } … … 221 223 if (HTMLSelectElement* select = ownerSelectElement()) { 222 224 select->setRecalcListItems(); 223 if (selected()) 225 // Avoid our selected() getter since it will recalculate list items incorrectly for us. 226 if (m_data.selected()) 224 227 select->setSelectedIndex(index(), false); 225 228 select->scrollToSelection(); -
trunk/WebCore/html/HTMLSelectElement.cpp
r45342 r53248 5 5 * Copyright (C) 2004, 2005, 2006, 2007, 2009 Apple Inc. All rights reserved. 6 6 * (C) 2006 Alexey Proskuryakov (ap@nypop.com) 7 * Copyright (C) 2010 Google Inc. All rights reserved. 7 8 * 8 9 * This library is free software; you can redistribute it and/or … … 60 61 void HTMLSelectElement::recalcStyle(StyleChange change) 61 62 { 62 SelectElement::recalcStyle(m_data, this);63 63 HTMLFormControlElementWithState::recalcStyle(change); 64 64 } … … 262 262 } 263 263 264 void HTMLSelectElement::recalcListItemsIfNeeded() 265 { 266 if (m_data.shouldRecalcListItems()) 267 recalcListItems(); 268 } 269 264 270 void HTMLSelectElement::childrenChanged(bool changedByParser, Node* beforeChange, Node* afterChange, int childCountDelta) 265 271 { -
trunk/WebCore/html/HTMLSelectElement.h
r46062 r53248 4 4 * (C) 2000 Dirk Mueller (mueller@kde.org) 5 5 * Copyright (C) 2004, 2005, 2006, 2007, 2009 Apple Inc. All rights reserved. 6 * Copyright (C) 2010 Google Inc. All rights reserved. 6 7 * 7 8 * This library is free software; you can redistribute it and/or … … 59 60 60 61 void setRecalcListItems(); 62 void recalcListItemsIfNeeded(); 61 63 62 64 virtual const Vector<Element*>& listItems() const { return m_data.listItems(this); } -
trunk/WebCore/wml/WMLSelectElement.cpp
r47347 r53248 84 84 void WMLSelectElement::recalcStyle(StyleChange change) 85 85 { 86 SelectElement::recalcStyle(m_data, this);87 86 WMLFormControlElement::recalcStyle(change); 88 87 }
Note: See TracChangeset
for help on using the changeset viewer.