Changeset 140655 in webkit
- Timestamp:
- Jan 23, 2013, 10:08:03 PM (12 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 21 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r140649 r140655 1 2013-01-23 Kent Tamura <tkent@chromium.org> 2 3 Add form-related instrumentations, and support 33+ features in FeatureObserver 4 https://bugs.webkit.org/show_bug.cgi?id=107770 5 6 Reviewed by Kentaro Hara. 7 8 No new tests. This doesn't make behavior changes. 9 10 * page/FeatureObserver.h: 11 - Add form-related features. 12 - Add a Document* version of observe(). 13 - Use BitVector to represent features to support 33+ features. 14 (WebCore::FeatureObserver::didObserve): 15 (FeatureObserver): 16 * page/FeatureObserver.cpp: 17 (WebCore::FeatureObserver::FeatureObserver): 18 (WebCore::FeatureObserver::~FeatureObserver): 19 (WebCore::FeatureObserver::observe): 20 21 * html/ColorInputType.cpp: 22 (WebCore::ColorInputType::create): Calls FeatureObserver::observe. 23 * html/DateInputType.cpp: 24 (WebCore::DateInputType::create): Ditto. 25 * html/DateTimeInputType.cpp: 26 (WebCore::DateTimeInputType::create): Ditto. 27 * html/DateTimeLocalInputType.cpp: 28 (WebCore::DateTimeLocalInputType::create): Ditto. 29 * html/EmailInputType.cpp: 30 (WebCore::EmailInputType::create): Ditto. 31 * html/HTMLDataListElement.cpp: 32 (WebCore::HTMLDataListElement::create): Ditto. 33 * html/HTMLFormControlElement.cpp: 34 (WebCore::HTMLFormControlElement::parseAttribute): Ditto. 35 * html/HTMLInputElement.cpp: 36 (WebCore::HTMLInputElement::parseAttribute): Ditto. 37 * html/HTMLTextFormControlElement.cpp: 38 (WebCore::HTMLTextFormControlElement::parseAttribute): Ditto. 39 * html/InputType.cpp: 40 (WebCore::InputType::create): 41 Record type=datetime and type=week even if these types are not enabled. 42 * html/MonthInputType.cpp: 43 (WebCore::MonthInputType::create): Calls FeatureObserver::observe. 44 * html/NumberInputType.cpp: 45 (WebCore::NumberInputType::create): Ditto. 46 * html/RangeInputType.cpp: 47 (WebCore::RangeInputType::create): Ditto. 48 * html/SearchInputType.cpp: 49 (WebCore::SearchInputType::create): Ditto. 50 * html/TelephoneInputType.cpp: 51 (WebCore::TelephoneInputType::create): Ditto. 52 * html/TimeInputType.cpp: 53 (WebCore::TimeInputType::create): Ditto. 54 * html/URLInputType.cpp: 55 (WebCore::URLInputType::create): Ditto. 56 * html/WeekInputType.cpp: 57 (WebCore::WeekInputType::create): Ditto. 58 1 59 2013-01-23 Ken Kania <kkania@chromium.org> 2 60 -
trunk/Source/WebCore/html/ColorInputType.cpp
r137124 r140655 36 36 #include "Color.h" 37 37 #include "ElementShadow.h" 38 #include "FeatureObserver.h" 38 39 #include "HTMLDataListElement.h" 39 40 #include "HTMLDivElement.h" … … 72 73 PassOwnPtr<InputType> ColorInputType::create(HTMLInputElement* element) 73 74 { 75 FeatureObserver::observe(element->document(), FeatureObserver::InputTypeColor); 74 76 return adoptPtr(new ColorInputType(element)); 75 77 } -
trunk/Source/WebCore/html/DateInputType.cpp
r138254 r140655 35 35 #include "DateComponents.h" 36 36 #include "DateTimeFieldsState.h" 37 #include "FeatureObserver.h" 37 38 #include "HTMLInputElement.h" 38 39 #include "HTMLNames.h" … … 59 60 PassOwnPtr<InputType> DateInputType::create(HTMLInputElement* element) 60 61 { 62 FeatureObserver::observe(element->document(), FeatureObserver::InputTypeDate); 61 63 return adoptPtr(new DateInputType(element)); 62 64 } -
trunk/Source/WebCore/html/DateTimeInputType.cpp
r140308 r140655 33 33 34 34 #include "DateComponents.h" 35 #include "FeatureObserver.h" 35 36 #include "HTMLInputElement.h" 36 37 #include "HTMLNames.h" … … 59 60 PassOwnPtr<InputType> DateTimeInputType::create(HTMLInputElement* element) 60 61 { 62 FeatureObserver::observe(element->document(), FeatureObserver::InputTypeDateTime); 61 63 return adoptPtr(new DateTimeInputType(element)); 62 64 } -
trunk/Source/WebCore/html/DateTimeLocalInputType.cpp
r140308 r140655 33 33 34 34 #include "DateComponents.h" 35 #include "FeatureObserver.h" 35 36 #include "HTMLInputElement.h" 36 37 #include "HTMLNames.h" … … 58 59 PassOwnPtr<InputType> DateTimeLocalInputType::create(HTMLInputElement* element) 59 60 { 61 FeatureObserver::observe(element->document(), FeatureObserver::InputTypeDateTimeLocal); 60 62 return adoptPtr(new DateTimeLocalInputType(element)); 61 63 } -
trunk/Source/WebCore/html/EmailInputType.cpp
r131969 r140655 25 25 #include "EmailInputType.h" 26 26 27 #include "FeatureObserver.h" 27 28 #include "HTMLInputElement.h" 28 29 #include "HTMLParserIdioms.h" … … 56 57 PassOwnPtr<InputType> EmailInputType::create(HTMLInputElement* element) 57 58 { 59 FeatureObserver::observe(element->document(), FeatureObserver::InputTypeEmail); 58 60 return adoptPtr(new EmailInputType(element)); 59 61 } -
trunk/Source/WebCore/html/HTMLDataListElement.cpp
r123283 r140655 34 34 35 35 #if ENABLE(DATALIST_ELEMENT) 36 #include "FeatureObserver.h" 36 37 #include "HTMLNames.h" 37 38 #include "IdTargetObserverRegistry.h" … … 46 47 PassRefPtr<HTMLDataListElement> HTMLDataListElement::create(const QualifiedName& tagName, Document* document) 47 48 { 49 FeatureObserver::observe(document, FeatureObserver::DataListElement); 48 50 return adoptRef(new HTMLDataListElement(tagName, document)); 49 51 } -
trunk/Source/WebCore/html/HTMLFormControlElement.cpp
r139064 r140655 31 31 #include "EventHandler.h" 32 32 #include "EventNames.h" 33 #include "FeatureObserver.h" 33 34 #include "Frame.h" 34 35 #include "HTMLFieldSetElement.h" … … 123 124 void HTMLFormControlElement::parseAttribute(const QualifiedName& name, const AtomicString& value) 124 125 { 125 if (name == formAttr) 126 if (name == formAttr) { 126 127 formAttributeChanged(); 127 else if (name == disabledAttr) { 128 FeatureObserver::observe(document(), FeatureObserver::FormAttribute); 129 } else if (name == disabledAttr) { 128 130 bool oldDisabled = m_disabled; 129 131 m_disabled = !value.isNull(); … … 144 146 if (wasRequired != m_isRequired) 145 147 requiredAttributeChanged(); 148 FeatureObserver::observe(document(), FeatureObserver::RequiredAttribute); 149 } else if (name == autofocusAttr) { 150 HTMLElement::parseAttribute(name, value); 151 FeatureObserver::observe(document(), FeatureObserver::AutoFocusAttribute); 146 152 } else 147 153 HTMLElement::parseAttribute(name, value); -
trunk/Source/WebCore/html/HTMLInputElement.cpp
r139663 r140655 39 39 #include "EventNames.h" 40 40 #include "ExceptionCode.h" 41 #include "FeatureObserver.h" 41 42 #include "FileInputType.h" 42 43 #include "FileList.h" … … 698 699 reattachIfAttached(); 699 700 setNeedsStyleRecalc(); 700 } else if (name == autosaveAttr || name == incrementalAttr) 701 FeatureObserver::observe(document(), FeatureObserver::ResultsAttribute); 702 } else if (name == autosaveAttr) { 701 703 setNeedsStyleRecalc(); 702 else if (name == minAttr || name == maxAttr) { 704 FeatureObserver::observe(document(), FeatureObserver::AutoSaveAttribute); 705 } else if (name == incrementalAttr) { 706 setNeedsStyleRecalc(); 707 FeatureObserver::observe(document(), FeatureObserver::IncrementalAttribute); 708 } else if (name == minAttr) { 703 709 m_inputType->minOrMaxAttributeChanged(); 704 710 setNeedsValidityCheck(); 711 FeatureObserver::observe(document(), FeatureObserver::MinAttribute); 712 } else if (name == maxAttr) { 713 m_inputType->minOrMaxAttributeChanged(); 714 setNeedsValidityCheck(); 715 FeatureObserver::observe(document(), FeatureObserver::MaxAttribute); 705 716 } else if (name == multipleAttr) { 706 717 m_inputType->multipleAttributeChanged(); … … 709 720 m_inputType->stepAttributeChanged(); 710 721 setNeedsValidityCheck(); 711 } else if (name == patternAttr || name == precisionAttr) 722 FeatureObserver::observe(document(), FeatureObserver::StepAttribute); 723 } else if (name == patternAttr) { 712 724 setNeedsValidityCheck(); 713 else if (name == disabledAttr) { 725 FeatureObserver::observe(document(), FeatureObserver::PatternAttribute); 726 } else if (name == precisionAttr) { 727 setNeedsValidityCheck(); 728 FeatureObserver::observe(document(), FeatureObserver::PrecisionAttribute); 729 } else if (name == disabledAttr) { 714 730 HTMLTextFormControlElement::parseAttribute(name, value); 715 731 m_inputType->disabledAttributeChanged(); … … 725 741 listAttributeTargetChanged(); 726 742 } 743 FeatureObserver::observe(document(), FeatureObserver::ListAttribute); 727 744 } 728 745 #endif … … 743 760 setFormControlValueMatchesRenderer(false); 744 761 setNeedsStyleRecalc(); 762 FeatureObserver::observe(document(), FeatureObserver::PrefixedSpeechAttribute); 745 763 } else if (name == onwebkitspeechchangeAttr) 746 764 setAttributeEventListener(eventNames().webkitspeechchangeEvent, createAttributeEventListener(this, name, value)); 765 #endif 766 #if ENABLE(DIRECTORY_UPLOAD) 767 else if (name == webkitdirectoryAttr) { 768 HTMLTextFormControlElement::parseAttribute(name, value); 769 FeatureObserver::observe(document(), FeatureObserver::PrefixedDirectoryAttribute); 770 } 747 771 #endif 748 772 else -
trunk/Source/WebCore/html/HTMLTextFormControlElement.cpp
r140215 r140655 32 32 #include "Event.h" 33 33 #include "EventNames.h" 34 #include "FeatureObserver.h" 34 35 #include "Frame.h" 35 36 #include "HTMLBRElement.h" … … 511 512 void HTMLTextFormControlElement::parseAttribute(const QualifiedName& name, const AtomicString& value) 512 513 { 513 if (name == placeholderAttr) 514 if (name == placeholderAttr) { 514 515 updatePlaceholderVisibility(true); 515 else if (name == onselectAttr) 516 FeatureObserver::observe(document(), FeatureObserver::PlaceholderAttribute); 517 } else if (name == onselectAttr) 516 518 setAttributeEventListener(eventNames().selectEvent, createAttributeEventListener(this, name, value)); 517 519 else if (name == onchangeAttr) -
trunk/Source/WebCore/html/InputType.cpp
r140385 r140655 141 141 static const InputTypeFactoryMap* factoryMap = createInputTypeFactoryMap().leakPtr(); 142 142 PassOwnPtr<InputType> (*factory)(HTMLInputElement*) = typeName.isEmpty() ? 0 : factoryMap->get(typeName); 143 if (!factory) 143 if (!factory) { 144 144 factory = TextInputType::create; 145 if (typeName == InputTypeNames::datetime()) 146 FeatureObserver::observe(element->document(), FeatureObserver::InputTypeDateTimeFallback); 147 else if (typeName == InputTypeNames::week()) 148 FeatureObserver::observe(element->document(), FeatureObserver::InputTypeWeekFallback); 149 } 145 150 return factory(element); 146 151 } -
trunk/Source/WebCore/html/MonthInputType.cpp
r140308 r140655 33 33 34 34 #include "DateComponents.h" 35 #include "FeatureObserver.h" 35 36 #include "HTMLInputElement.h" 36 37 #include "HTMLNames.h" … … 60 61 PassOwnPtr<InputType> MonthInputType::create(HTMLInputElement* element) 61 62 { 63 FeatureObserver::observe(element->document(), FeatureObserver::InputTypeMonth); 62 64 return adoptPtr(new MonthInputType(element)); 63 65 } -
trunk/Source/WebCore/html/NumberInputType.cpp
r139151 r140655 35 35 #include "BeforeTextInsertedEvent.h" 36 36 #include "ExceptionCode.h" 37 #include "FeatureObserver.h" 37 38 #include "HTMLInputElement.h" 38 39 #include "HTMLNames.h" … … 99 100 PassOwnPtr<InputType> NumberInputType::create(HTMLInputElement* element) 100 101 { 102 FeatureObserver::observe(element->document(), FeatureObserver::InputTypeNumber); 101 103 return adoptPtr(new NumberInputType(element)); 102 104 } -
trunk/Source/WebCore/html/RangeInputType.cpp
r137124 r140655 35 35 #include "AXObjectCache.h" 36 36 #include "ElementShadow.h" 37 #include "FeatureObserver.h" 37 38 #include "HTMLDivElement.h" 38 39 #include "HTMLInputElement.h" … … 82 83 PassOwnPtr<InputType> RangeInputType::create(HTMLInputElement* element) 83 84 { 85 FeatureObserver::observe(element->document(), FeatureObserver::InputTypeRange); 84 86 return adoptPtr(new RangeInputType(element)); 85 87 } -
trunk/Source/WebCore/html/SearchInputType.cpp
r137124 r140655 32 32 #include "SearchInputType.h" 33 33 34 #include "FeatureObserver.h" 34 35 #include "HTMLInputElement.h" 35 36 #include "HTMLNames.h" … … 55 56 PassOwnPtr<InputType> SearchInputType::create(HTMLInputElement* element) 56 57 { 58 FeatureObserver::observe(element->document(), FeatureObserver::InputTypeSearch); 57 59 return adoptPtr(new SearchInputType(element)); 58 60 } -
trunk/Source/WebCore/html/TelephoneInputType.cpp
r128149 r140655 32 32 #include "TelephoneInputType.h" 33 33 34 #include "FeatureObserver.h" 35 #include "HTMLInputElement.h" 34 36 #include "InputTypeNames.h" 35 37 #include <wtf/PassOwnPtr.h> … … 39 41 PassOwnPtr<InputType> TelephoneInputType::create(HTMLInputElement* element) 40 42 { 43 FeatureObserver::observe(element->document(), FeatureObserver::InputTypeTel); 41 44 return adoptPtr(new TelephoneInputType(element)); 42 45 } -
trunk/Source/WebCore/html/TimeInputType.cpp
r132774 r140655 33 33 34 34 #include "DateComponents.h" 35 #include "FeatureObserver.h" 35 36 #include "HTMLInputElement.h" 36 37 #include "HTMLNames.h" … … 64 65 PassOwnPtr<InputType> TimeInputType::create(HTMLInputElement* element) 65 66 { 67 FeatureObserver::observe(element->document(), FeatureObserver::InputTypeTime); 66 68 return adoptPtr(new TimeInputType(element)); 67 69 } -
trunk/Source/WebCore/html/URLInputType.cpp
r128149 r140655 32 32 #include "URLInputType.h" 33 33 34 #include "FeatureObserver.h" 34 35 #include "HTMLInputElement.h" 35 36 #include "InputTypeNames.h" … … 42 43 PassOwnPtr<InputType> URLInputType::create(HTMLInputElement* element) 43 44 { 45 FeatureObserver::observe(element->document(), FeatureObserver::InputTypeURL); 44 46 return adoptPtr(new URLInputType(element)); 45 47 } -
trunk/Source/WebCore/html/WeekInputType.cpp
r140308 r140655 33 33 34 34 #include "DateComponents.h" 35 #include "FeatureObserver.h" 35 36 #include "HTMLInputElement.h" 36 37 #include "HTMLNames.h" … … 56 57 PassOwnPtr<InputType> WeekInputType::create(HTMLInputElement* element) 57 58 { 59 FeatureObserver::observe(element->document(), FeatureObserver::InputTypeWeek); 58 60 return adoptPtr(new WeekInputType(element)); 59 61 } -
trunk/Source/WebCore/page/FeatureObserver.cpp
r130657 r140655 35 35 36 36 FeatureObserver::FeatureObserver() 37 : m_featureMask(0)38 37 { 39 38 } … … 44 43 HistogramSupport::histogramEnumeration("WebCore.FeatureObserver", PageDestruction, NumberOfFeatures); 45 44 46 if (!m_feature Mask)45 if (!m_featureBits) 47 46 return; 48 47 49 for ( inti = 0; i < NumberOfFeatures; ++i) {50 if (m_feature Mask & (1 <<i))48 for (unsigned i = 0; i < NumberOfFeatures; ++i) { 49 if (m_featureBits->quickGet(i)) 51 50 HistogramSupport::histogramEnumeration("WebCore.FeatureObserver", i, NumberOfFeatures); 52 51 } 53 52 } 54 53 55 void FeatureObserver::observe(D OMWindow* domWindow, Feature feature)54 void FeatureObserver::observe(Document* document, Feature feature) 56 55 { 57 ASSERT(domWindow);58 59 Document* document = domWindow->document();60 56 if (!document) 61 57 return; … … 68 64 } 69 65 66 void FeatureObserver::observe(DOMWindow* domWindow, Feature feature) 67 { 68 ASSERT(domWindow); 69 observe(domWindow->document(), feature); 70 } 71 70 72 } // namespace WebCore -
trunk/Source/WebCore/page/FeatureObserver.h
r139922 r140655 27 27 #define FeatureObserver_h 28 28 29 #include <wtf/BitVector.h> 29 30 #include <wtf/Noncopyable.h> 31 #include <wtf/OwnPtr.h> 32 #include <wtf/PassOwnPtr.h> 30 33 31 34 namespace WebCore { 32 35 33 36 class DOMWindow; 37 class Document; 34 38 35 39 class FeatureObserver { … … 61 65 UnprefixedTransitionEndEvent, 62 66 PrefixedAndUnprefixedTransitionEndEvent, 63 // Add new features above this line. 67 AutoFocusAttribute, 68 AutoSaveAttribute, 69 DataListElement, 70 FormAttribute, 71 IncrementalAttribute, 72 InputTypeColor, 73 InputTypeDate, 74 InputTypeDateTime, 75 InputTypeDateTimeFallback, 76 InputTypeDateTimeLocal, 77 InputTypeEmail, 78 InputTypeMonth, 79 InputTypeNumber, 80 InputTypeRange, 81 InputTypeSearch, 82 InputTypeTel, 83 InputTypeTime, 84 InputTypeURL, 85 InputTypeWeek, 86 InputTypeWeekFallback, 87 ListAttribute, 88 MaxAttribute, 89 MinAttribute, 90 PatternAttribute, 91 PlaceholderAttribute, 92 PrecisionAttribute, 93 PrefixedDirectoryAttribute, 94 PrefixedSpeechAttribute, 95 RequiredAttribute, 96 ResultsAttribute, 97 StepAttribute, 98 // Add new features above this line. Don't change assigned numbers of each items. 64 99 NumberOfFeatures, // This enum value must be last. 65 100 }; 66 101 102 static void observe(Document*, Feature); 67 103 static void observe(DOMWindow*, Feature); 68 104 … … 70 106 void didObserve(Feature feature) 71 107 { 72 COMPILE_ASSERT(sizeof(m_featureMask) * 8 >= NumberOfFeatures, FeaturesMustNotOverflowBitmask);73 108 ASSERT(feature != PageDestruction); // PageDestruction is reserved as a scaling factor. 74 109 ASSERT(feature < NumberOfFeatures); 75 m_featureMask |= 1 << static_cast<int>(feature); 110 if (!m_featureBits) { 111 m_featureBits = adoptPtr(new BitVector(NumberOfFeatures)); 112 m_featureBits->clearAll(); 113 } 114 m_featureBits->quickSet(feature); 76 115 } 77 116 78 int m_featureMask;117 OwnPtr<BitVector> m_featureBits; 79 118 }; 80 119
Note:
See TracChangeset
for help on using the changeset viewer.