Diff
Modified: trunk/Source/WebCore/ChangeLog (140654 => 140655)
--- trunk/Source/WebCore/ChangeLog 2013-01-24 06:05:28 UTC (rev 140654)
+++ trunk/Source/WebCore/ChangeLog 2013-01-24 06:08:03 UTC (rev 140655)
@@ -1,3 +1,61 @@
+2013-01-23 Kent Tamura <[email protected]>
+
+ Add form-related instrumentations, and support 33+ features in FeatureObserver
+ https://bugs.webkit.org/show_bug.cgi?id=107770
+
+ Reviewed by Kentaro Hara.
+
+ No new tests. This doesn't make behavior changes.
+
+ * page/FeatureObserver.h:
+ - Add form-related features.
+ - Add a Document* version of observe().
+ - Use BitVector to represent features to support 33+ features.
+ (WebCore::FeatureObserver::didObserve):
+ (FeatureObserver):
+ * page/FeatureObserver.cpp:
+ (WebCore::FeatureObserver::FeatureObserver):
+ (WebCore::FeatureObserver::~FeatureObserver):
+ (WebCore::FeatureObserver::observe):
+
+ * html/ColorInputType.cpp:
+ (WebCore::ColorInputType::create): Calls FeatureObserver::observe.
+ * html/DateInputType.cpp:
+ (WebCore::DateInputType::create): Ditto.
+ * html/DateTimeInputType.cpp:
+ (WebCore::DateTimeInputType::create): Ditto.
+ * html/DateTimeLocalInputType.cpp:
+ (WebCore::DateTimeLocalInputType::create): Ditto.
+ * html/EmailInputType.cpp:
+ (WebCore::EmailInputType::create): Ditto.
+ * html/HTMLDataListElement.cpp:
+ (WebCore::HTMLDataListElement::create): Ditto.
+ * html/HTMLFormControlElement.cpp:
+ (WebCore::HTMLFormControlElement::parseAttribute): Ditto.
+ * html/HTMLInputElement.cpp:
+ (WebCore::HTMLInputElement::parseAttribute): Ditto.
+ * html/HTMLTextFormControlElement.cpp:
+ (WebCore::HTMLTextFormControlElement::parseAttribute): Ditto.
+ * html/InputType.cpp:
+ (WebCore::InputType::create):
+ Record type=datetime and type=week even if these types are not enabled.
+ * html/MonthInputType.cpp:
+ (WebCore::MonthInputType::create): Calls FeatureObserver::observe.
+ * html/NumberInputType.cpp:
+ (WebCore::NumberInputType::create): Ditto.
+ * html/RangeInputType.cpp:
+ (WebCore::RangeInputType::create): Ditto.
+ * html/SearchInputType.cpp:
+ (WebCore::SearchInputType::create): Ditto.
+ * html/TelephoneInputType.cpp:
+ (WebCore::TelephoneInputType::create): Ditto.
+ * html/TimeInputType.cpp:
+ (WebCore::TimeInputType::create): Ditto.
+ * html/URLInputType.cpp:
+ (WebCore::URLInputType::create): Ditto.
+ * html/WeekInputType.cpp:
+ (WebCore::WeekInputType::create): Ditto.
+
2013-01-23 Ken Kania <[email protected]>
[Inspector] Add events for tracking page loads and scheduled navigations.
Modified: trunk/Source/WebCore/html/ColorInputType.cpp (140654 => 140655)
--- trunk/Source/WebCore/html/ColorInputType.cpp 2013-01-24 06:05:28 UTC (rev 140654)
+++ trunk/Source/WebCore/html/ColorInputType.cpp 2013-01-24 06:08:03 UTC (rev 140655)
@@ -35,6 +35,7 @@
#include "Chrome.h"
#include "Color.h"
#include "ElementShadow.h"
+#include "FeatureObserver.h"
#include "HTMLDataListElement.h"
#include "HTMLDivElement.h"
#include "HTMLInputElement.h"
@@ -71,6 +72,7 @@
PassOwnPtr<InputType> ColorInputType::create(HTMLInputElement* element)
{
+ FeatureObserver::observe(element->document(), FeatureObserver::InputTypeColor);
return adoptPtr(new ColorInputType(element));
}
Modified: trunk/Source/WebCore/html/DateInputType.cpp (140654 => 140655)
--- trunk/Source/WebCore/html/DateInputType.cpp 2013-01-24 06:05:28 UTC (rev 140654)
+++ trunk/Source/WebCore/html/DateInputType.cpp 2013-01-24 06:08:03 UTC (rev 140655)
@@ -34,6 +34,7 @@
#if ENABLE(INPUT_TYPE_DATE)
#include "DateComponents.h"
#include "DateTimeFieldsState.h"
+#include "FeatureObserver.h"
#include "HTMLInputElement.h"
#include "HTMLNames.h"
#include "InputTypeNames.h"
@@ -58,6 +59,7 @@
PassOwnPtr<InputType> DateInputType::create(HTMLInputElement* element)
{
+ FeatureObserver::observe(element->document(), FeatureObserver::InputTypeDate);
return adoptPtr(new DateInputType(element));
}
Modified: trunk/Source/WebCore/html/DateTimeInputType.cpp (140654 => 140655)
--- trunk/Source/WebCore/html/DateTimeInputType.cpp 2013-01-24 06:05:28 UTC (rev 140654)
+++ trunk/Source/WebCore/html/DateTimeInputType.cpp 2013-01-24 06:08:03 UTC (rev 140655)
@@ -32,6 +32,7 @@
#include "DateTimeInputType.h"
#include "DateComponents.h"
+#include "FeatureObserver.h"
#include "HTMLInputElement.h"
#include "HTMLNames.h"
#include "InputTypeNames.h"
@@ -58,6 +59,7 @@
PassOwnPtr<InputType> DateTimeInputType::create(HTMLInputElement* element)
{
+ FeatureObserver::observe(element->document(), FeatureObserver::InputTypeDateTime);
return adoptPtr(new DateTimeInputType(element));
}
Modified: trunk/Source/WebCore/html/DateTimeLocalInputType.cpp (140654 => 140655)
--- trunk/Source/WebCore/html/DateTimeLocalInputType.cpp 2013-01-24 06:05:28 UTC (rev 140654)
+++ trunk/Source/WebCore/html/DateTimeLocalInputType.cpp 2013-01-24 06:08:03 UTC (rev 140655)
@@ -32,6 +32,7 @@
#include "DateTimeLocalInputType.h"
#include "DateComponents.h"
+#include "FeatureObserver.h"
#include "HTMLInputElement.h"
#include "HTMLNames.h"
#include "InputTypeNames.h"
@@ -57,6 +58,7 @@
PassOwnPtr<InputType> DateTimeLocalInputType::create(HTMLInputElement* element)
{
+ FeatureObserver::observe(element->document(), FeatureObserver::InputTypeDateTimeLocal);
return adoptPtr(new DateTimeLocalInputType(element));
}
Modified: trunk/Source/WebCore/html/EmailInputType.cpp (140654 => 140655)
--- trunk/Source/WebCore/html/EmailInputType.cpp 2013-01-24 06:05:28 UTC (rev 140654)
+++ trunk/Source/WebCore/html/EmailInputType.cpp 2013-01-24 06:08:03 UTC (rev 140655)
@@ -24,6 +24,7 @@
#include "config.h"
#include "EmailInputType.h"
+#include "FeatureObserver.h"
#include "HTMLInputElement.h"
#include "HTMLParserIdioms.h"
#include "InputTypeNames.h"
@@ -55,6 +56,7 @@
PassOwnPtr<InputType> EmailInputType::create(HTMLInputElement* element)
{
+ FeatureObserver::observe(element->document(), FeatureObserver::InputTypeEmail);
return adoptPtr(new EmailInputType(element));
}
Modified: trunk/Source/WebCore/html/HTMLDataListElement.cpp (140654 => 140655)
--- trunk/Source/WebCore/html/HTMLDataListElement.cpp 2013-01-24 06:05:28 UTC (rev 140654)
+++ trunk/Source/WebCore/html/HTMLDataListElement.cpp 2013-01-24 06:08:03 UTC (rev 140655)
@@ -33,6 +33,7 @@
#include "HTMLDataListElement.h"
#if ENABLE(DATALIST_ELEMENT)
+#include "FeatureObserver.h"
#include "HTMLNames.h"
#include "IdTargetObserverRegistry.h"
@@ -45,6 +46,7 @@
PassRefPtr<HTMLDataListElement> HTMLDataListElement::create(const QualifiedName& tagName, Document* document)
{
+ FeatureObserver::observe(document, FeatureObserver::DataListElement);
return adoptRef(new HTMLDataListElement(tagName, document));
}
Modified: trunk/Source/WebCore/html/HTMLFormControlElement.cpp (140654 => 140655)
--- trunk/Source/WebCore/html/HTMLFormControlElement.cpp 2013-01-24 06:05:28 UTC (rev 140654)
+++ trunk/Source/WebCore/html/HTMLFormControlElement.cpp 2013-01-24 06:08:03 UTC (rev 140655)
@@ -30,6 +30,7 @@
#include "Event.h"
#include "EventHandler.h"
#include "EventNames.h"
+#include "FeatureObserver.h"
#include "Frame.h"
#include "HTMLFieldSetElement.h"
#include "HTMLFormElement.h"
@@ -122,9 +123,10 @@
void HTMLFormControlElement::parseAttribute(const QualifiedName& name, const AtomicString& value)
{
- if (name == formAttr)
+ if (name == formAttr) {
formAttributeChanged();
- else if (name == disabledAttr) {
+ FeatureObserver::observe(document(), FeatureObserver::FormAttribute);
+ } else if (name == disabledAttr) {
bool oldDisabled = m_disabled;
m_disabled = !value.isNull();
if (oldDisabled != m_disabled)
@@ -143,6 +145,10 @@
m_isRequired = !value.isNull();
if (wasRequired != m_isRequired)
requiredAttributeChanged();
+ FeatureObserver::observe(document(), FeatureObserver::RequiredAttribute);
+ } else if (name == autofocusAttr) {
+ HTMLElement::parseAttribute(name, value);
+ FeatureObserver::observe(document(), FeatureObserver::AutoFocusAttribute);
} else
HTMLElement::parseAttribute(name, value);
}
Modified: trunk/Source/WebCore/html/HTMLInputElement.cpp (140654 => 140655)
--- trunk/Source/WebCore/html/HTMLInputElement.cpp 2013-01-24 06:05:28 UTC (rev 140654)
+++ trunk/Source/WebCore/html/HTMLInputElement.cpp 2013-01-24 06:08:03 UTC (rev 140655)
@@ -38,6 +38,7 @@
#include "ElementShadow.h"
#include "EventNames.h"
#include "ExceptionCode.h"
+#include "FeatureObserver.h"
#include "FileInputType.h"
#include "FileList.h"
#include "FormController.h"
@@ -697,20 +698,35 @@
if (m_maxResults != oldResults && (m_maxResults <= 0 || oldResults <= 0))
reattachIfAttached();
setNeedsStyleRecalc();
- } else if (name == autosaveAttr || name == incrementalAttr)
+ FeatureObserver::observe(document(), FeatureObserver::ResultsAttribute);
+ } else if (name == autosaveAttr) {
setNeedsStyleRecalc();
- else if (name == minAttr || name == maxAttr) {
+ FeatureObserver::observe(document(), FeatureObserver::AutoSaveAttribute);
+ } else if (name == incrementalAttr) {
+ setNeedsStyleRecalc();
+ FeatureObserver::observe(document(), FeatureObserver::IncrementalAttribute);
+ } else if (name == minAttr) {
m_inputType->minOrMaxAttributeChanged();
setNeedsValidityCheck();
+ FeatureObserver::observe(document(), FeatureObserver::MinAttribute);
+ } else if (name == maxAttr) {
+ m_inputType->minOrMaxAttributeChanged();
+ setNeedsValidityCheck();
+ FeatureObserver::observe(document(), FeatureObserver::MaxAttribute);
} else if (name == multipleAttr) {
m_inputType->multipleAttributeChanged();
setNeedsValidityCheck();
} else if (name == stepAttr) {
m_inputType->stepAttributeChanged();
setNeedsValidityCheck();
- } else if (name == patternAttr || name == precisionAttr)
+ FeatureObserver::observe(document(), FeatureObserver::StepAttribute);
+ } else if (name == patternAttr) {
setNeedsValidityCheck();
- else if (name == disabledAttr) {
+ FeatureObserver::observe(document(), FeatureObserver::PatternAttribute);
+ } else if (name == precisionAttr) {
+ setNeedsValidityCheck();
+ FeatureObserver::observe(document(), FeatureObserver::PrecisionAttribute);
+ } else if (name == disabledAttr) {
HTMLTextFormControlElement::parseAttribute(name, value);
m_inputType->disabledAttributeChanged();
} else if (name == readonlyAttr) {
@@ -724,6 +740,7 @@
resetListAttributeTargetObserver();
listAttributeTargetChanged();
}
+ FeatureObserver::observe(document(), FeatureObserver::ListAttribute);
}
#endif
#if ENABLE(INPUT_SPEECH)
@@ -742,9 +759,16 @@
}
setFormControlValueMatchesRenderer(false);
setNeedsStyleRecalc();
+ FeatureObserver::observe(document(), FeatureObserver::PrefixedSpeechAttribute);
} else if (name == onwebkitspeechchangeAttr)
setAttributeEventListener(eventNames().webkitspeechchangeEvent, createAttributeEventListener(this, name, value));
#endif
+#if ENABLE(DIRECTORY_UPLOAD)
+ else if (name == webkitdirectoryAttr) {
+ HTMLTextFormControlElement::parseAttribute(name, value);
+ FeatureObserver::observe(document(), FeatureObserver::PrefixedDirectoryAttribute);
+ }
+#endif
else
HTMLTextFormControlElement::parseAttribute(name, value);
m_inputType->updateInnerTextValue();
Modified: trunk/Source/WebCore/html/HTMLTextFormControlElement.cpp (140654 => 140655)
--- trunk/Source/WebCore/html/HTMLTextFormControlElement.cpp 2013-01-24 06:05:28 UTC (rev 140654)
+++ trunk/Source/WebCore/html/HTMLTextFormControlElement.cpp 2013-01-24 06:08:03 UTC (rev 140655)
@@ -31,6 +31,7 @@
#include "Document.h"
#include "Event.h"
#include "EventNames.h"
+#include "FeatureObserver.h"
#include "Frame.h"
#include "HTMLBRElement.h"
#include "HTMLFormElement.h"
@@ -510,9 +511,10 @@
void HTMLTextFormControlElement::parseAttribute(const QualifiedName& name, const AtomicString& value)
{
- if (name == placeholderAttr)
+ if (name == placeholderAttr) {
updatePlaceholderVisibility(true);
- else if (name == onselectAttr)
+ FeatureObserver::observe(document(), FeatureObserver::PlaceholderAttribute);
+ } else if (name == onselectAttr)
setAttributeEventListener(eventNames().selectEvent, createAttributeEventListener(this, name, value));
else if (name == onchangeAttr)
setAttributeEventListener(eventNames().changeEvent, createAttributeEventListener(this, name, value));
Modified: trunk/Source/WebCore/html/InputType.cpp (140654 => 140655)
--- trunk/Source/WebCore/html/InputType.cpp 2013-01-24 06:05:28 UTC (rev 140654)
+++ trunk/Source/WebCore/html/InputType.cpp 2013-01-24 06:08:03 UTC (rev 140655)
@@ -140,8 +140,13 @@
{
static const InputTypeFactoryMap* factoryMap = createInputTypeFactoryMap().leakPtr();
PassOwnPtr<InputType> (*factory)(HTMLInputElement*) = typeName.isEmpty() ? 0 : factoryMap->get(typeName);
- if (!factory)
+ if (!factory) {
factory = TextInputType::create;
+ if (typeName == InputTypeNames::datetime())
+ FeatureObserver::observe(element->document(), FeatureObserver::InputTypeDateTimeFallback);
+ else if (typeName == InputTypeNames::week())
+ FeatureObserver::observe(element->document(), FeatureObserver::InputTypeWeekFallback);
+ }
return factory(element);
}
Modified: trunk/Source/WebCore/html/MonthInputType.cpp (140654 => 140655)
--- trunk/Source/WebCore/html/MonthInputType.cpp 2013-01-24 06:05:28 UTC (rev 140654)
+++ trunk/Source/WebCore/html/MonthInputType.cpp 2013-01-24 06:08:03 UTC (rev 140655)
@@ -32,6 +32,7 @@
#include "MonthInputType.h"
#include "DateComponents.h"
+#include "FeatureObserver.h"
#include "HTMLInputElement.h"
#include "HTMLNames.h"
#include "InputTypeNames.h"
@@ -59,6 +60,7 @@
PassOwnPtr<InputType> MonthInputType::create(HTMLInputElement* element)
{
+ FeatureObserver::observe(element->document(), FeatureObserver::InputTypeMonth);
return adoptPtr(new MonthInputType(element));
}
Modified: trunk/Source/WebCore/html/NumberInputType.cpp (140654 => 140655)
--- trunk/Source/WebCore/html/NumberInputType.cpp 2013-01-24 06:05:28 UTC (rev 140654)
+++ trunk/Source/WebCore/html/NumberInputType.cpp 2013-01-24 06:08:03 UTC (rev 140655)
@@ -34,6 +34,7 @@
#include "BeforeTextInsertedEvent.h"
#include "ExceptionCode.h"
+#include "FeatureObserver.h"
#include "HTMLInputElement.h"
#include "HTMLNames.h"
#include "HTMLParserIdioms.h"
@@ -98,6 +99,7 @@
PassOwnPtr<InputType> NumberInputType::create(HTMLInputElement* element)
{
+ FeatureObserver::observe(element->document(), FeatureObserver::InputTypeNumber);
return adoptPtr(new NumberInputType(element));
}
Modified: trunk/Source/WebCore/html/RangeInputType.cpp (140654 => 140655)
--- trunk/Source/WebCore/html/RangeInputType.cpp 2013-01-24 06:05:28 UTC (rev 140654)
+++ trunk/Source/WebCore/html/RangeInputType.cpp 2013-01-24 06:08:03 UTC (rev 140655)
@@ -34,6 +34,7 @@
#include "AXObjectCache.h"
#include "ElementShadow.h"
+#include "FeatureObserver.h"
#include "HTMLDivElement.h"
#include "HTMLInputElement.h"
#include "HTMLNames.h"
@@ -81,6 +82,7 @@
PassOwnPtr<InputType> RangeInputType::create(HTMLInputElement* element)
{
+ FeatureObserver::observe(element->document(), FeatureObserver::InputTypeRange);
return adoptPtr(new RangeInputType(element));
}
Modified: trunk/Source/WebCore/html/SearchInputType.cpp (140654 => 140655)
--- trunk/Source/WebCore/html/SearchInputType.cpp 2013-01-24 06:05:28 UTC (rev 140654)
+++ trunk/Source/WebCore/html/SearchInputType.cpp 2013-01-24 06:08:03 UTC (rev 140655)
@@ -31,6 +31,7 @@
#include "config.h"
#include "SearchInputType.h"
+#include "FeatureObserver.h"
#include "HTMLInputElement.h"
#include "HTMLNames.h"
#include "InputTypeNames.h"
@@ -54,6 +55,7 @@
PassOwnPtr<InputType> SearchInputType::create(HTMLInputElement* element)
{
+ FeatureObserver::observe(element->document(), FeatureObserver::InputTypeSearch);
return adoptPtr(new SearchInputType(element));
}
Modified: trunk/Source/WebCore/html/TelephoneInputType.cpp (140654 => 140655)
--- trunk/Source/WebCore/html/TelephoneInputType.cpp 2013-01-24 06:05:28 UTC (rev 140654)
+++ trunk/Source/WebCore/html/TelephoneInputType.cpp 2013-01-24 06:08:03 UTC (rev 140655)
@@ -31,6 +31,8 @@
#include "config.h"
#include "TelephoneInputType.h"
+#include "FeatureObserver.h"
+#include "HTMLInputElement.h"
#include "InputTypeNames.h"
#include <wtf/PassOwnPtr.h>
@@ -38,6 +40,7 @@
PassOwnPtr<InputType> TelephoneInputType::create(HTMLInputElement* element)
{
+ FeatureObserver::observe(element->document(), FeatureObserver::InputTypeTel);
return adoptPtr(new TelephoneInputType(element));
}
Modified: trunk/Source/WebCore/html/TimeInputType.cpp (140654 => 140655)
--- trunk/Source/WebCore/html/TimeInputType.cpp 2013-01-24 06:05:28 UTC (rev 140654)
+++ trunk/Source/WebCore/html/TimeInputType.cpp 2013-01-24 06:08:03 UTC (rev 140655)
@@ -32,6 +32,7 @@
#include "TimeInputType.h"
#include "DateComponents.h"
+#include "FeatureObserver.h"
#include "HTMLInputElement.h"
#include "HTMLNames.h"
#include "InputTypeNames.h"
@@ -63,6 +64,7 @@
PassOwnPtr<InputType> TimeInputType::create(HTMLInputElement* element)
{
+ FeatureObserver::observe(element->document(), FeatureObserver::InputTypeTime);
return adoptPtr(new TimeInputType(element));
}
Modified: trunk/Source/WebCore/html/URLInputType.cpp (140654 => 140655)
--- trunk/Source/WebCore/html/URLInputType.cpp 2013-01-24 06:05:28 UTC (rev 140654)
+++ trunk/Source/WebCore/html/URLInputType.cpp 2013-01-24 06:08:03 UTC (rev 140655)
@@ -31,6 +31,7 @@
#include "config.h"
#include "URLInputType.h"
+#include "FeatureObserver.h"
#include "HTMLInputElement.h"
#include "InputTypeNames.h"
#include "LocalizedStrings.h"
@@ -41,6 +42,7 @@
PassOwnPtr<InputType> URLInputType::create(HTMLInputElement* element)
{
+ FeatureObserver::observe(element->document(), FeatureObserver::InputTypeURL);
return adoptPtr(new URLInputType(element));
}
Modified: trunk/Source/WebCore/html/WeekInputType.cpp (140654 => 140655)
--- trunk/Source/WebCore/html/WeekInputType.cpp 2013-01-24 06:05:28 UTC (rev 140654)
+++ trunk/Source/WebCore/html/WeekInputType.cpp 2013-01-24 06:08:03 UTC (rev 140655)
@@ -32,6 +32,7 @@
#include "WeekInputType.h"
#include "DateComponents.h"
+#include "FeatureObserver.h"
#include "HTMLInputElement.h"
#include "HTMLNames.h"
#include "InputTypeNames.h"
@@ -55,6 +56,7 @@
PassOwnPtr<InputType> WeekInputType::create(HTMLInputElement* element)
{
+ FeatureObserver::observe(element->document(), FeatureObserver::InputTypeWeek);
return adoptPtr(new WeekInputType(element));
}
Modified: trunk/Source/WebCore/page/FeatureObserver.cpp (140654 => 140655)
--- trunk/Source/WebCore/page/FeatureObserver.cpp 2013-01-24 06:05:28 UTC (rev 140654)
+++ trunk/Source/WebCore/page/FeatureObserver.cpp 2013-01-24 06:08:03 UTC (rev 140655)
@@ -34,7 +34,6 @@
namespace WebCore {
FeatureObserver::FeatureObserver()
- : m_featureMask(0)
{
}
@@ -43,20 +42,17 @@
// We always log PageDestruction so that we have a scale for the rest of the features.
HistogramSupport::histogramEnumeration("WebCore.FeatureObserver", PageDestruction, NumberOfFeatures);
- if (!m_featureMask)
+ if (!m_featureBits)
return;
- for (int i = 0; i < NumberOfFeatures; ++i) {
- if (m_featureMask & (1 << i))
+ for (unsigned i = 0; i < NumberOfFeatures; ++i) {
+ if (m_featureBits->quickGet(i))
HistogramSupport::histogramEnumeration("WebCore.FeatureObserver", i, NumberOfFeatures);
}
}
-void FeatureObserver::observe(DOMWindow* domWindow, Feature feature)
+void FeatureObserver::observe(Document* document, Feature feature)
{
- ASSERT(domWindow);
-
- Document* document = domWindow->document();
if (!document)
return;
@@ -67,4 +63,10 @@
page->featureObserver()->didObserve(feature);
}
+void FeatureObserver::observe(DOMWindow* domWindow, Feature feature)
+{
+ ASSERT(domWindow);
+ observe(domWindow->document(), feature);
+}
+
} // namespace WebCore
Modified: trunk/Source/WebCore/page/FeatureObserver.h (140654 => 140655)
--- trunk/Source/WebCore/page/FeatureObserver.h 2013-01-24 06:05:28 UTC (rev 140654)
+++ trunk/Source/WebCore/page/FeatureObserver.h 2013-01-24 06:08:03 UTC (rev 140655)
@@ -26,11 +26,15 @@
#ifndef FeatureObserver_h
#define FeatureObserver_h
+#include <wtf/BitVector.h>
#include <wtf/Noncopyable.h>
+#include <wtf/OwnPtr.h>
+#include <wtf/PassOwnPtr.h>
namespace WebCore {
class DOMWindow;
+class Document;
class FeatureObserver {
WTF_MAKE_NONCOPYABLE(FeatureObserver);
@@ -60,22 +64,57 @@
PrefixedTransitionEndEvent,
UnprefixedTransitionEndEvent,
PrefixedAndUnprefixedTransitionEndEvent,
- // Add new features above this line.
+ AutoFocusAttribute,
+ AutoSaveAttribute,
+ DataListElement,
+ FormAttribute,
+ IncrementalAttribute,
+ InputTypeColor,
+ InputTypeDate,
+ InputTypeDateTime,
+ InputTypeDateTimeFallback,
+ InputTypeDateTimeLocal,
+ InputTypeEmail,
+ InputTypeMonth,
+ InputTypeNumber,
+ InputTypeRange,
+ InputTypeSearch,
+ InputTypeTel,
+ InputTypeTime,
+ InputTypeURL,
+ InputTypeWeek,
+ InputTypeWeekFallback,
+ ListAttribute,
+ MaxAttribute,
+ MinAttribute,
+ PatternAttribute,
+ PlaceholderAttribute,
+ PrecisionAttribute,
+ PrefixedDirectoryAttribute,
+ PrefixedSpeechAttribute,
+ RequiredAttribute,
+ ResultsAttribute,
+ StepAttribute,
+ // Add new features above this line. Don't change assigned numbers of each items.
NumberOfFeatures, // This enum value must be last.
};
+ static void observe(Document*, Feature);
static void observe(DOMWindow*, Feature);
private:
void didObserve(Feature feature)
{
- COMPILE_ASSERT(sizeof(m_featureMask) * 8 >= NumberOfFeatures, FeaturesMustNotOverflowBitmask);
ASSERT(feature != PageDestruction); // PageDestruction is reserved as a scaling factor.
ASSERT(feature < NumberOfFeatures);
- m_featureMask |= 1 << static_cast<int>(feature);
+ if (!m_featureBits) {
+ m_featureBits = adoptPtr(new BitVector(NumberOfFeatures));
+ m_featureBits->clearAll();
+ }
+ m_featureBits->quickSet(feature);
}
- int m_featureMask;
+ OwnPtr<BitVector> m_featureBits;
};
} // namespace WebCore