Changeset 134239 in webkit
- Timestamp:
- Nov 12, 2012 7:38:31 AM (11 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r134227 r134239 1 2012-11-12 Kent Tamura <tkent@chromium.org> 2 3 Refactoring: set read-only values on layout in DateTimeEditElement 4 https://bugs.webkit.org/show_bug.cgi?id=101916 5 6 Reviewed by Kentaro Hara. 7 8 We have always updated read-only values when we set an empty value or 9 DateTimeFieldsState. It has wasted CPU time because such read-only 10 values are never updated after layout() essentially. So, we set 11 read-only values in DateTimeEditBuilder used by layout(), and remove 12 dateForReadOnlyField arguments of setEmptyValue and 13 setValueAsDateTimeFieldsState. 14 15 No new tests. This should not make behavior changes. 16 17 * html/BaseMultipleFieldsDateAndTimeInputType.cpp: 18 (WebCore::BaseMultipleFieldsDateAndTimeInputType::restoreFormControlState): 19 We removed dateForReadOnlyField argument because read-only values are 20 already set in DateTimeFieldElement::layout(). 21 * html/shadow/DateTimeEditElement.cpp: 22 (WebCore::DateTimeEditBuilder::visitField): 23 Set a value to a read-only minute/second/millisecond field while 24 building UI elements. 25 Also, changed variable types for millisecond and second fields to 26 RefPtr<DateTimeNumericFieldElement> because we'd like to call 27 setValueAsDate, which is private in DateTimeMillisecondFieldElement and 28 DateTimeSecondFieldElement 29 (WebCore::DateTimeEditElement::setValueAsDateTimeFieldsState): 30 We removed dateForReadOnlyField argument because read-only values are 31 already set in DateTimeFieldElement::layout(). 32 (WebCore::DateTimeEditElement::setEmptyValue): Ditto. 33 * html/shadow/DateTimeEditElement.h: 34 (DateTimeEditElement): 35 Removed dateForReadOnlyField argument for setValueAsDateTimeFieldsState. 36 37 * html/shadow/DateTimeFieldElement.cpp: 38 (WebCore::DateTimeFieldElement::defaultKeyboardEventHandler): 39 We removed dateForReadOnlyField argument because read-only values are 40 already set in DateTimeFieldElement::layout(). 41 * html/shadow/DateTimeFieldElement.h: 42 (DateTimeFieldElement): Ditto. 43 44 * html/shadow/DateTimeFieldElements.cpp: Ditto. 45 * html/shadow/DateTimeFieldElements.h: Ditto. 46 * html/shadow/DateTimeNumericFieldElement.cpp: 47 (WebCore::DateTimeNumericFieldElement::setEmptyValue): 48 It should do nothing if it is read-only because a read-only value was 49 already set just after construction. 50 * html/shadow/DateTimeNumericFieldElement.h: 51 (DateTimeNumericFieldElement): 52 Removed dateForReadOnlyField argument of setEmptyValue. 53 * html/shadow/DateTimeSymbolicFieldElement.cpp: 54 (WebCore::DateTimeSymbolicFieldElement::setEmptyValue): Ditto. 55 * html/shadow/DateTimeSymbolicFieldElement.h: 56 (DateTimeSymbolicFieldElement): Ditto. 57 1 58 2012-11-12 Tiancheng Jiang <tijiang@rim.com> 2 59 -
trunk/Source/WebCore/html/BaseMultipleFieldsDateAndTimeInputType.cpp
r134206 r134239 300 300 if (!m_dateTimeEditElement) 301 301 return; 302 DateComponents date;303 setMillisecondToDateComponents(createStepRange(AnyIsDefaultStep).minimum().toDouble(), &date);304 302 DateTimeFieldsState dateTimeFieldsState = DateTimeFieldsState::restoreFormControlState(state); 305 m_dateTimeEditElement->setValueAsDateTimeFieldsState(dateTimeFieldsState , date);303 m_dateTimeEditElement->setValueAsDateTimeFieldsState(dateTimeFieldsState); 306 304 element()->setValueInternal(sanitizeValue(m_dateTimeEditElement->value()), DispatchNoEvent); 307 305 } -
trunk/Source/WebCore/html/shadow/DateTimeEditElement.cpp
r133848 r134239 122 122 RefPtr<DateTimeNumericFieldElement> field = DateTimeMinuteFieldElement::create(document, m_editElement); 123 123 m_editElement.addField(field); 124 if (shouldMinuteFieldReadOnly()) 124 if (shouldMinuteFieldReadOnly()) { 125 field->setValueAsDate(m_dateValue); 125 126 field->setReadOnly(); 127 } 126 128 return; 127 129 } … … 162 164 163 165 case DateTimeFormat::FieldTypeSecond: { 164 RefPtr<DateTime SecondFieldElement> field = DateTimeSecondFieldElement::create(document, m_editElement);166 RefPtr<DateTimeNumericFieldElement> field = DateTimeSecondFieldElement::create(document, m_editElement); 165 167 m_editElement.addField(field); 166 if (shouldSecondFieldReadOnly()) 168 if (shouldSecondFieldReadOnly()) { 169 field->setValueAsDate(m_dateValue); 167 170 field->setReadOnly(); 171 } 168 172 169 173 if (needMillisecondField()) { … … 175 179 176 180 case DateTimeFormat::FieldTypeFractionalSecond: { 177 RefPtr<DateTime MillisecondFieldElement> field = DateTimeMillisecondFieldElement::create(document, m_editElement);181 RefPtr<DateTimeNumericFieldElement> field = DateTimeMillisecondFieldElement::create(document, m_editElement); 178 182 m_editElement.addField(field); 179 if (shouldMillisecondFieldReadOnly()) 183 if (shouldMillisecondFieldReadOnly()) { 184 field->setValueAsDate(m_dateValue); 180 185 field->setReadOnly(); 186 } 181 187 return; 182 188 } … … 463 469 } 464 470 465 void DateTimeEditElement::setValueAsDateTimeFieldsState(const DateTimeFieldsState& dateTimeFieldsState , const DateComponents& dateForReadOnlyField)471 void DateTimeEditElement::setValueAsDateTimeFieldsState(const DateTimeFieldsState& dateTimeFieldsState) 466 472 { 467 473 for (size_t fieldIndex = 0; fieldIndex < m_fields.size(); ++fieldIndex) 468 m_fields[fieldIndex]->setValueAsDateTimeFieldsState(dateTimeFieldsState , dateForReadOnlyField);474 m_fields[fieldIndex]->setValueAsDateTimeFieldsState(dateTimeFieldsState); 469 475 } 470 476 … … 473 479 layout(layoutParameters, dateForReadOnlyField); 474 480 for (size_t fieldIndex = 0; fieldIndex < m_fields.size(); ++fieldIndex) 475 m_fields[fieldIndex]->setEmptyValue( dateForReadOnlyField,DateTimeFieldElement::DispatchNoEvent);481 m_fields[fieldIndex]->setEmptyValue(DateTimeFieldElement::DispatchNoEvent); 476 482 } 477 483 -
trunk/Source/WebCore/html/shadow/DateTimeEditElement.h
r132774 r134239 98 98 void setEmptyValue(const LayoutParameters&, const DateComponents& dateForReadOnlyField); 99 99 void setValueAsDate(const LayoutParameters&, const DateComponents&); 100 void setValueAsDateTimeFieldsState(const DateTimeFieldsState& , const DateComponents& dateForReadOnlyField);100 void setValueAsDateTimeFieldsState(const DateTimeFieldsState&); 101 101 void stepDown(); 102 102 void stepUp(); -
trunk/Source/WebCore/html/shadow/DateTimeFieldElement.cpp
r133848 r134239 112 112 if (keyIdentifier == "U+0008" || keyIdentifier == "U+007F") { 113 113 keyboardEvent->setDefaultHandled(); 114 setEmptyValue(D ateComponents(), DispatchEvent);114 setEmptyValue(DispatchEvent); 115 115 return; 116 116 } -
trunk/Source/WebCore/html/shadow/DateTimeFieldElement.h
r133848 r134239 66 66 void removeEventHandler() { m_fieldOwner = 0; } 67 67 void setReadOnly(); 68 virtual void setEmptyValue( const DateComponents& dateForReadOnlyField,EventBehavior = DispatchNoEvent) = 0;68 virtual void setEmptyValue(EventBehavior = DispatchNoEvent) = 0; 69 69 virtual void setValueAsDate(const DateComponents&) = 0; 70 virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState& , const DateComponents& dateForReadOnlyField) = 0;70 virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState&) = 0; 71 71 virtual void setValueAsInteger(int, EventBehavior = DispatchNoEvent) = 0; 72 72 virtual void stepDown() = 0; -
trunk/Source/WebCore/html/shadow/DateTimeFieldElements.cpp
r133976 r134239 62 62 } 63 63 64 void DateTimeAMPMFieldElement::setValueAsDateTimeFieldsState(const DateTimeFieldsState& dateTimeFieldsState , const DateComponents& dateForReadOnlyField)64 void DateTimeAMPMFieldElement::setValueAsDateTimeFieldsState(const DateTimeFieldsState& dateTimeFieldsState) 65 65 { 66 66 if (dateTimeFieldsState.hasAMPM()) 67 67 setValueAsInteger(dateTimeFieldsState.ampm()); 68 68 else 69 setEmptyValue( dateForReadOnlyField);69 setEmptyValue(); 70 70 } 71 71 … … 95 95 } 96 96 97 void DateTimeDayFieldElement::setValueAsDateTimeFieldsState(const DateTimeFieldsState& dateTimeFieldsState , const DateComponents& dateForReadOnlyField)97 void DateTimeDayFieldElement::setValueAsDateTimeFieldsState(const DateTimeFieldsState& dateTimeFieldsState) 98 98 { 99 99 if (!dateTimeFieldsState.hasDayOfMonth()) { 100 setEmptyValue( dateForReadOnlyField);100 setEmptyValue(); 101 101 return; 102 102 } … … 108 108 } 109 109 110 setEmptyValue( dateForReadOnlyField);110 setEmptyValue(); 111 111 } 112 112 … … 167 167 } 168 168 169 void DateTimeHourFieldElement::setValueAsDateTimeFieldsState(const DateTimeFieldsState& dateTimeFieldsState , const DateComponents& dateForReadOnlyField)169 void DateTimeHourFieldElement::setValueAsDateTimeFieldsState(const DateTimeFieldsState& dateTimeFieldsState) 170 170 { 171 171 if (!dateTimeFieldsState.hasHour()) { 172 setEmptyValue( dateForReadOnlyField);172 setEmptyValue(); 173 173 return; 174 174 } … … 177 177 178 178 if (hour12 < 1 || hour12 > 12) { 179 setEmptyValue( dateForReadOnlyField);179 setEmptyValue(); 180 180 return; 181 181 } … … 241 241 } 242 242 243 void DateTimeMillisecondFieldElement::setValueAsDateTimeFieldsState(const DateTimeFieldsState& dateTimeFieldsState , const DateComponents& dateForReadOnlyField)243 void DateTimeMillisecondFieldElement::setValueAsDateTimeFieldsState(const DateTimeFieldsState& dateTimeFieldsState) 244 244 { 245 245 if (!dateTimeFieldsState.hasMillisecond()) { 246 setEmptyValue( dateForReadOnlyField);246 setEmptyValue(); 247 247 return; 248 248 } … … 250 250 const unsigned value = dateTimeFieldsState.millisecond(); 251 251 if (value > static_cast<unsigned>(maximum())) { 252 setEmptyValue( dateForReadOnlyField);252 setEmptyValue(); 253 253 return; 254 254 } … … 282 282 } 283 283 284 void DateTimeMinuteFieldElement::setValueAsDateTimeFieldsState(const DateTimeFieldsState& dateTimeFieldsState , const DateComponents& dateForReadOnlyField)284 void DateTimeMinuteFieldElement::setValueAsDateTimeFieldsState(const DateTimeFieldsState& dateTimeFieldsState) 285 285 { 286 286 if (!dateTimeFieldsState.hasMinute()) { 287 setEmptyValue( dateForReadOnlyField);287 setEmptyValue(); 288 288 return; 289 289 } … … 291 291 const unsigned value = dateTimeFieldsState.minute(); 292 292 if (value > static_cast<unsigned>(maximum())) { 293 setEmptyValue( dateForReadOnlyField);293 setEmptyValue(); 294 294 return; 295 295 } … … 323 323 } 324 324 325 void DateTimeMonthFieldElement::setValueAsDateTimeFieldsState(const DateTimeFieldsState& dateTimeFieldsState , const DateComponents& dateForReadOnlyField)325 void DateTimeMonthFieldElement::setValueAsDateTimeFieldsState(const DateTimeFieldsState& dateTimeFieldsState) 326 326 { 327 327 if (!dateTimeFieldsState.hasMonth()) { 328 setEmptyValue( dateForReadOnlyField);328 setEmptyValue(); 329 329 return; 330 330 } … … 336 336 } 337 337 338 setEmptyValue( dateForReadOnlyField);338 setEmptyValue(); 339 339 } 340 340 … … 364 364 } 365 365 366 void DateTimeSecondFieldElement::setValueAsDateTimeFieldsState(const DateTimeFieldsState& dateTimeFieldsState , const DateComponents& dateForReadOnlyField)366 void DateTimeSecondFieldElement::setValueAsDateTimeFieldsState(const DateTimeFieldsState& dateTimeFieldsState) 367 367 { 368 368 if (!dateTimeFieldsState.hasSecond()) { 369 setEmptyValue( dateForReadOnlyField);369 setEmptyValue(); 370 370 return; 371 371 } … … 373 373 const unsigned value = dateTimeFieldsState.second(); 374 374 if (value > static_cast<unsigned>(maximum())) { 375 setEmptyValue( dateForReadOnlyField);375 setEmptyValue(); 376 376 return; 377 377 } … … 408 408 } 409 409 410 void DateTimeSymbolicMonthFieldElement::setValueAsDateTimeFieldsState(const DateTimeFieldsState& dateTimeFieldsState , const DateComponents& dateForReadOnlyField)410 void DateTimeSymbolicMonthFieldElement::setValueAsDateTimeFieldsState(const DateTimeFieldsState& dateTimeFieldsState) 411 411 { 412 412 if (!dateTimeFieldsState.hasMonth()) { 413 setEmptyValue( dateForReadOnlyField);413 setEmptyValue(); 414 414 return; 415 415 } … … 417 417 const unsigned value = dateTimeFieldsState.month() - 1; 418 418 if (value >= symbolsSize()) { 419 setEmptyValue( dateForReadOnlyField);419 setEmptyValue(); 420 420 return; 421 421 } … … 449 449 } 450 450 451 void DateTimeWeekFieldElement::setValueAsDateTimeFieldsState(const DateTimeFieldsState& dateTimeFieldsState , const DateComponents& dateForReadOnlyField)451 void DateTimeWeekFieldElement::setValueAsDateTimeFieldsState(const DateTimeFieldsState& dateTimeFieldsState) 452 452 { 453 453 if (!dateTimeFieldsState.hasWeekOfYear()) { 454 setEmptyValue( dateForReadOnlyField);454 setEmptyValue(); 455 455 return; 456 456 } … … 462 462 } 463 463 464 setEmptyValue( dateForReadOnlyField);464 setEmptyValue(); 465 465 } 466 466 … … 522 522 } 523 523 524 void DateTimeYearFieldElement::setValueAsDateTimeFieldsState(const DateTimeFieldsState& dateTimeFieldsState , const DateComponents& dateForReadOnlyField)524 void DateTimeYearFieldElement::setValueAsDateTimeFieldsState(const DateTimeFieldsState& dateTimeFieldsState) 525 525 { 526 526 if (!dateTimeFieldsState.hasYear()) { 527 setEmptyValue( dateForReadOnlyField);527 setEmptyValue(); 528 528 return; 529 529 } … … 535 535 } 536 536 537 setEmptyValue( dateForReadOnlyField);537 setEmptyValue(); 538 538 } 539 539 -
trunk/Source/WebCore/html/shadow/DateTimeFieldElements.h
r131898 r134239 45 45 virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE FINAL; 46 46 virtual void setValueAsDate(const DateComponents&) OVERRIDE FINAL; 47 virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState& , const DateComponents& dateForReadOnlyField) OVERRIDE FINAL;47 virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState&) OVERRIDE FINAL; 48 48 }; 49 49 … … 60 60 virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE FINAL; 61 61 virtual void setValueAsDate(const DateComponents&) OVERRIDE FINAL; 62 virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState& , const DateComponents& dateForReadOnlyField) OVERRIDE FINAL;62 virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState&) OVERRIDE FINAL; 63 63 }; 64 64 … … 81 81 virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE FINAL; 82 82 virtual void setValueAsDate(const DateComponents&) OVERRIDE FINAL; 83 virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState& , const DateComponents& dateForReadOnlyField) OVERRIDE FINAL;83 virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState&) OVERRIDE FINAL; 84 84 virtual void setValueAsInteger(int, EventBehavior = DispatchNoEvent) OVERRIDE FINAL; 85 85 virtual int valueAsInteger() const OVERRIDE FINAL; … … 100 100 virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE FINAL; 101 101 virtual void setValueAsDate(const DateComponents&) OVERRIDE FINAL; 102 virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState& , const DateComponents& dateForReadOnlyField) OVERRIDE FINAL;102 virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState&) OVERRIDE FINAL; 103 103 }; 104 104 … … 115 115 virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE FINAL; 116 116 virtual void setValueAsDate(const DateComponents&) OVERRIDE FINAL; 117 virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState& , const DateComponents& dateForReadOnlyField) OVERRIDE FINAL;117 virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState&) OVERRIDE FINAL; 118 118 }; 119 119 … … 130 130 virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE FINAL; 131 131 virtual void setValueAsDate(const DateComponents&) OVERRIDE FINAL; 132 virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState& , const DateComponents& dateForReadOnlyField) OVERRIDE FINAL;132 virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState&) OVERRIDE FINAL; 133 133 }; 134 134 … … 145 145 virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE FINAL; 146 146 virtual void setValueAsDate(const DateComponents&) OVERRIDE FINAL; 147 virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState& , const DateComponents& dateForReadOnlyField) OVERRIDE FINAL;147 virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState&) OVERRIDE FINAL; 148 148 }; 149 149 … … 160 160 virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE FINAL; 161 161 virtual void setValueAsDate(const DateComponents&) OVERRIDE FINAL; 162 virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState& , const DateComponents& dateForReadOnlyField) OVERRIDE FINAL;162 virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState&) OVERRIDE FINAL; 163 163 }; 164 164 … … 175 175 virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE FINAL; 176 176 virtual void setValueAsDate(const DateComponents&) OVERRIDE FINAL; 177 virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState& , const DateComponents& dateForReadOnlyField) OVERRIDE FINAL;177 virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState&) OVERRIDE FINAL; 178 178 }; 179 179 … … 206 206 virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE FINAL; 207 207 virtual void setValueAsDate(const DateComponents&) OVERRIDE FINAL; 208 virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState& , const DateComponents& dateForReadOnlyField) OVERRIDE FINAL;208 virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState&) OVERRIDE FINAL; 209 209 210 210 // DateTimeNumericFieldElement functions. -
trunk/Source/WebCore/html/shadow/DateTimeNumericFieldElement.cpp
r132774 r134239 161 161 } 162 162 163 void DateTimeNumericFieldElement::setEmptyValue(const DateComponents& dateForReadOnlyField, EventBehavior eventBehavior) 164 { 165 m_lastDigitCharTime = 0; 166 167 if (isReadOnly()) { 168 setValueAsDate(dateForReadOnlyField); 169 return; 170 } 163 void DateTimeNumericFieldElement::setEmptyValue(EventBehavior eventBehavior) 164 { 165 m_lastDigitCharTime = 0; 166 167 if (isReadOnly()) 168 return; 171 169 172 170 m_hasValue = false; -
trunk/Source/WebCore/html/shadow/DateTimeNumericFieldElement.h
r132774 r134239 63 63 virtual bool hasValue() const OVERRIDE FINAL; 64 64 virtual int maximum() const OVERRIDE FINAL; 65 virtual void setEmptyValue( const DateComponents& dateForReadOnlyField,EventBehavior = DispatchNoEvent) OVERRIDE FINAL;65 virtual void setEmptyValue(EventBehavior = DispatchNoEvent) OVERRIDE FINAL; 66 66 virtual void setValueAsInteger(int, EventBehavior = DispatchNoEvent) OVERRIDE; 67 67 virtual int valueAsInteger() const OVERRIDE; -
trunk/Source/WebCore/html/shadow/DateTimeSymbolicFieldElement.cpp
r131710 r134239 106 106 } 107 107 108 void DateTimeSymbolicFieldElement::setEmptyValue( const DateComponents&,EventBehavior eventBehavior)108 void DateTimeSymbolicFieldElement::setEmptyValue(EventBehavior eventBehavior) 109 109 { 110 110 m_selectedIndex = invalidIndex; -
trunk/Source/WebCore/html/shadow/DateTimeSymbolicFieldElement.h
r131898 r134239 41 41 size_t symbolsSize() const { return m_symbols.size(); } 42 42 virtual bool hasValue() const OVERRIDE FINAL; 43 virtual void setEmptyValue( const DateComponents& dateForReadOnlyField,EventBehavior = DispatchNoEvent) OVERRIDE FINAL;43 virtual void setEmptyValue(EventBehavior = DispatchNoEvent) OVERRIDE FINAL; 44 44 virtual void setValueAsInteger(int, EventBehavior = DispatchNoEvent) OVERRIDE FINAL; 45 45 virtual int valueAsInteger() const OVERRIDE FINAL;
Note: See TracChangeset
for help on using the changeset viewer.