Title: [140655] trunk/Source/WebCore
Revision
140655
Author
[email protected]
Date
2013-01-23 22:08:03 -0800 (Wed, 23 Jan 2013)

Log Message

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.

Modified Paths

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
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to