Split tabIndex computation for DOM and the rest of WebCore
authorrniwa@webkit.org <rniwa@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 16 Aug 2019 19:43:34 +0000 (19:43 +0000)
committerrniwa@webkit.org <rniwa@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 16 Aug 2019 19:43:34 +0000 (19:43 +0000)
https://bugs.webkit.org/show_bug.cgi?id=200806

Reviewed by Chris Dumez.

Source/WebCore:

This patch renames Element::tabIndex to Element::tabIndexForBindings and migrates its usage in
WebCore outside JS bindings code to: tabIndexSetExplicitly, which now returns Optional<int>,
and shouldBeIgnoredInSequentialFocusNavigation which returns true whenever the old tabIndex
function used to return -1.

Instead of overriding Element::tabIndex, each subclass of element now overrides defaultTabIndex
corresponding to the concept of the default value of tabIndex IDL attribute defined at:
https://html.spec.whatwg.org/multipage/interaction.html#the-tabindex-attribute

No new tests since there should be no observable behavior change.

* dom/Element.cpp:
(WebCore::Element::tabIndexSetExplicitly const): Now returns Optional<int> instead of bool.
(WebCore::Element::defaultTabIndex const): Added. Return -1 here. HTMLElement and SVGElement
manually override tabIndex to implement this behavior. Now MathMLElement overrides this function
to return 0 instead, which is arguably a bug.
(WebCore::Element::supportsFocus const): Convert Optional<int> to bool.
(WebCore::Element::tabIndexForBindings const): Renamed from tabIndex. Migrated the code in
HTMLElement::tabIndex and SVGElement::tabIndex here. Note all overrides of HTMLElement::tabIndex
and SVGElement::tabIndex below were skipping supportsFocus check and using 0 as the default value.
This is now accomplished by having an explicit check defaultTabIndex returning 0. MathMLElement
overrides defaultTabIndex so it continues to use the old logic. All this complexity should go away
in webkit.org/b/199606.
(WebCore::Element::setTabIndexForBindings): Renamed from setTabIndex.
(WebCore::Element::isKeyboardFocusable const): Checks shouldBeIgnoredInSequentialFocusNavigation
in lieu of calling Element::tabIndexForBindings.
* dom/Element.h:
(WebCore::Element::shouldBeIgnoredInSequentialFocusNavigation const): Added. Returns true if the
old implementation of Element::tabIndex would have returned -1 due to supportsFocus returning false.
* dom/ElementRareData.h:
(WebCore::ElementRareData::tabIndex const): Made this function return Optional<int>. Note that
ElementRareData continue to store a bit field and int for more efficient packing.
* html/HTMLAnchorElement.cpp:
(WebCore::HTMLAnchorElement::defaultTabIndex const): Replaced tabIndex.
* html/HTMLAnchorElement.h:
* html/HTMLAreaElement.cpp:
(WebCore::HTMLAreaElement::isFocusable const):
* html/HTMLElement.cpp:
(WebCore::HTMLElement::tabIndex const): Deleted. The logic is now in Element::tabIndex itself.
* html/HTMLElement.h:
* html/HTMLElement.idl:
* html/HTMLFormControlElement.cpp:
(WebCore::HTMLFormControlElement::defaultTabIndex const): Replaced tabIndex.
* html/HTMLFormControlElement.h:
* mathml/MathMLElement.cpp:
(WebCore::MathMLElement::defaultTabIndex const): Replaced tabIndex. This is probably a bug since
this would put every MathML element in the sequential navigation order regardless of whether it
has tabIndex set or not.
* mathml/MathMLElement.h:
* page/FocusController.cpp:
(WebCore::tabIndexForElement): Added. Computes the "effective" tab index FocusController uses.
(WebCore::shadowAdjustedTabIndex):
(WebCore::nextElementWithGreaterTabIndex): This code should use shadowAdjustedTabIndex instead
but keeping the old behavior for now.
* svg/SVGAElement.cpp:
(WebCore::SVGAElement::defaultTabIndex const): Replaced tabIndex.
* svg/SVGAElement.h:
* svg/SVGElement.cpp:
(WebCore::SVGElement::tabIndex const): Deleted. The logic is now in Element::tabIndex itself.
* svg/SVGElement.h:
(WebCore::SVGElement::hasTagName const):
* svg/SVGElement.idl:

Source/WebKit:

* WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLElement.cpp:
(webkit_dom_html_element_get_tab_index):
(webkit_dom_html_element_set_tab_index):

Source/WebKitLegacy/mac:

* DOM/DOMHTMLElement.mm:
(-[DOMHTMLElement tabIndex]):
(-[DOMHTMLElement setTabIndex:]):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@248784 268f45cc-cd09-0410-ab3c-d52691b4dbfc

24 files changed:
Source/WebCore/ChangeLog
Source/WebCore/dom/Element.cpp
Source/WebCore/dom/Element.h
Source/WebCore/dom/ElementRareData.h
Source/WebCore/html/HTMLAnchorElement.cpp
Source/WebCore/html/HTMLAnchorElement.h
Source/WebCore/html/HTMLAreaElement.cpp
Source/WebCore/html/HTMLElement.cpp
Source/WebCore/html/HTMLElement.h
Source/WebCore/html/HTMLElement.idl
Source/WebCore/html/HTMLFormControlElement.cpp
Source/WebCore/html/HTMLFormControlElement.h
Source/WebCore/mathml/MathMLElement.cpp
Source/WebCore/mathml/MathMLElement.h
Source/WebCore/page/FocusController.cpp
Source/WebCore/svg/SVGAElement.cpp
Source/WebCore/svg/SVGAElement.h
Source/WebCore/svg/SVGElement.cpp
Source/WebCore/svg/SVGElement.h
Source/WebCore/svg/SVGElement.idl
Source/WebKit/ChangeLog
Source/WebKit/WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLElement.cpp
Source/WebKitLegacy/mac/ChangeLog
Source/WebKitLegacy/mac/DOM/DOMHTMLElement.mm

index 612f934..1bd9082 100644 (file)
@@ -1,3 +1,73 @@
+2019-08-16  Ryosuke Niwa  <rniwa@webkit.org>
+
+        Split tabIndex computation for DOM and the rest of WebCore
+        https://bugs.webkit.org/show_bug.cgi?id=200806
+
+        Reviewed by Chris Dumez.
+
+        This patch renames Element::tabIndex to Element::tabIndexForBindings and migrates its usage in
+        WebCore outside JS bindings code to: tabIndexSetExplicitly, which now returns Optional<int>,
+        and shouldBeIgnoredInSequentialFocusNavigation which returns true whenever the old tabIndex
+        function used to return -1.
+
+        Instead of overriding Element::tabIndex, each subclass of element now overrides defaultTabIndex
+        corresponding to the concept of the default value of tabIndex IDL attribute defined at:
+        https://html.spec.whatwg.org/multipage/interaction.html#the-tabindex-attribute
+
+        No new tests since there should be no observable behavior change.
+
+        * dom/Element.cpp:
+        (WebCore::Element::tabIndexSetExplicitly const): Now returns Optional<int> instead of bool.
+        (WebCore::Element::defaultTabIndex const): Added. Return -1 here. HTMLElement and SVGElement
+        manually override tabIndex to implement this behavior. Now MathMLElement overrides this function
+        to return 0 instead, which is arguably a bug.
+        (WebCore::Element::supportsFocus const): Convert Optional<int> to bool.
+        (WebCore::Element::tabIndexForBindings const): Renamed from tabIndex. Migrated the code in
+        HTMLElement::tabIndex and SVGElement::tabIndex here. Note all overrides of HTMLElement::tabIndex
+        and SVGElement::tabIndex below were skipping supportsFocus check and using 0 as the default value.
+        This is now accomplished by having an explicit check defaultTabIndex returning 0. MathMLElement
+        overrides defaultTabIndex so it continues to use the old logic. All this complexity should go away
+        in webkit.org/b/199606.
+        (WebCore::Element::setTabIndexForBindings): Renamed from setTabIndex.
+        (WebCore::Element::isKeyboardFocusable const): Checks shouldBeIgnoredInSequentialFocusNavigation
+        in lieu of calling Element::tabIndexForBindings.
+        * dom/Element.h:
+        (WebCore::Element::shouldBeIgnoredInSequentialFocusNavigation const): Added. Returns true if the
+        old implementation of Element::tabIndex would have returned -1 due to supportsFocus returning false.
+        * dom/ElementRareData.h:
+        (WebCore::ElementRareData::tabIndex const): Made this function return Optional<int>. Note that
+        ElementRareData continue to store a bit field and int for more efficient packing.
+        * html/HTMLAnchorElement.cpp:
+        (WebCore::HTMLAnchorElement::defaultTabIndex const): Replaced tabIndex.
+        * html/HTMLAnchorElement.h:
+        * html/HTMLAreaElement.cpp:
+        (WebCore::HTMLAreaElement::isFocusable const):
+        * html/HTMLElement.cpp:
+        (WebCore::HTMLElement::tabIndex const): Deleted. The logic is now in Element::tabIndex itself.
+        * html/HTMLElement.h:
+        * html/HTMLElement.idl:
+        * html/HTMLFormControlElement.cpp:
+        (WebCore::HTMLFormControlElement::defaultTabIndex const): Replaced tabIndex.
+        * html/HTMLFormControlElement.h:
+        * mathml/MathMLElement.cpp:
+        (WebCore::MathMLElement::defaultTabIndex const): Replaced tabIndex. This is probably a bug since
+        this would put every MathML element in the sequential navigation order regardless of whether it
+        has tabIndex set or not.
+        * mathml/MathMLElement.h:
+        * page/FocusController.cpp:
+        (WebCore::tabIndexForElement): Added. Computes the "effective" tab index FocusController uses.
+        (WebCore::shadowAdjustedTabIndex):
+        (WebCore::nextElementWithGreaterTabIndex): This code should use shadowAdjustedTabIndex instead
+        but keeping the old behavior for now.
+        * svg/SVGAElement.cpp:
+        (WebCore::SVGAElement::defaultTabIndex const): Replaced tabIndex.
+        * svg/SVGAElement.h:
+        * svg/SVGElement.cpp:
+        (WebCore::SVGElement::tabIndex const): Deleted. The logic is now in Element::tabIndex itself.
+        * svg/SVGElement.h:
+        (WebCore::SVGElement::hasTagName const):
+        * svg/SVGElement.idl:
+
 2019-08-16  Ross Kirsling  <ross.kirsling@sony.com>
 
         Unreviewed restabilization of non-unified build.
index 45161c9..f77fdee 100644 (file)
@@ -243,14 +243,21 @@ void Element::setTabIndexExplicitly(int tabIndex)
     ensureElementRareData().setTabIndexExplicitly(tabIndex);
 }
 
-bool Element::tabIndexSetExplicitly() const
+Optional<int> Element::tabIndexSetExplicitly() const
 {
-    return hasRareData() && elementRareData()->tabIndexSetExplicitly();
+    if (!hasRareData())
+        return WTF::nullopt;
+    return elementRareData()->tabIndex();
+}
+
+int Element::defaultTabIndex() const
+{
+    return -1;
 }
 
 bool Element::supportsFocus() const
 {
-    return tabIndexSetExplicitly();
+    return !!tabIndexSetExplicitly();
 }
 
 RefPtr<Element> Element::focusDelegate()
@@ -258,19 +265,24 @@ RefPtr<Element> Element::focusDelegate()
     return this;
 }
 
-int Element::tabIndex() const
+int Element::tabIndexForBindings() const
 {
-    return hasRareData() ? elementRareData()->tabIndex() : 0;
+    auto defaultIndex = defaultTabIndex();
+    ASSERT(!defaultIndex || defaultIndex == -1);
+    // FIXME: supportsFocus() check shouldn't be here.
+    if (!defaultIndex || supportsFocus())
+        return tabIndexSetExplicitly().valueOr(0);
+    return defaultIndex;
 }
 
-void Element::setTabIndex(int value)
+void Element::setTabIndexForBindings(int value)
 {
     setIntegralAttribute(tabindexAttr, value);
 }
 
 bool Element::isKeyboardFocusable(KeyboardEvent*) const
 {
-    return isFocusable() && tabIndex() >= 0;
+    return isFocusable() && !shouldBeIgnoredInSequentialFocusNavigation() && tabIndexSetExplicitly().valueOr(0) >= 0;
 }
 
 bool Element::isMouseFocusable() const
index b2f8784..c3928f8 100644 (file)
@@ -316,7 +316,8 @@ public:
     virtual void setFocus(bool flag);
     void setHasFocusWithin(bool flag);
 
-    bool tabIndexSetExplicitly() const;
+    Optional<int> tabIndexSetExplicitly() const;
+    bool shouldBeIgnoredInSequentialFocusNavigation() const { return defaultTabIndex() < 0 && !supportsFocus(); }
     virtual bool supportsFocus() const;
     virtual bool isFocusable() const;
     virtual bool isKeyboardFocusable(KeyboardEvent*) const;
@@ -324,8 +325,8 @@ public:
 
     virtual bool shouldUseInputMethod();
 
-    virtual int tabIndex() const;
-    WEBCORE_EXPORT void setTabIndex(int);
+    virtual int tabIndexForBindings() const;
+    WEBCORE_EXPORT void setTabIndexForBindings(int);
     virtual RefPtr<Element> focusDelegate();
 
     ExceptionOr<void> insertAdjacentHTML(const String& where, const String& html, NodeVector* addedNodes);
@@ -714,6 +715,8 @@ private:
     ElementRareData* elementRareData() const;
     ElementRareData& ensureElementRareData();
 
+    virtual int defaultTabIndex() const;
+
     void detachAllAttrNodesFromElement();
     void detachAttrNodeFromElementWithValue(Attr*, const AtomString& value);
 
index 1bb66d0..11dd4ee 100644 (file)
@@ -54,7 +54,7 @@ public:
     void resetComputedStyle();
     void resetStyleRelations();
     
-    int tabIndex() const { return m_tabIndex; }
+    Optional<int> tabIndex() const { return m_tabIndexWasSetExplicitly ? Optional<int> { m_tabIndex } : WTF::nullopt; }
     void setTabIndexExplicitly(int index) { m_tabIndex = index; m_tabIndexWasSetExplicitly = true; }
     bool tabIndexSetExplicitly() const { return m_tabIndexWasSetExplicitly; }
     void clearTabIndexExplicitly() { m_tabIndex = 0; m_tabIndexWasSetExplicitly = false; }
index 1047c58..5f478f2 100644 (file)
@@ -330,10 +330,9 @@ const AtomString& HTMLAnchorElement::name() const
     return getNameAttribute();
 }
 
-int HTMLAnchorElement::tabIndex() const
+int HTMLAnchorElement::defaultTabIndex() const
 {
-    // Skip the supportsFocus check in HTMLElement.
-    return Element::tabIndex();
+    return 0;
 }
 
 String HTMLAnchorElement::target() const
index e9d2d88..f0d0863 100644 (file)
@@ -88,7 +88,7 @@ private:
     bool isURLAttribute(const Attribute&) const final;
     bool canStartSelection() const final;
     String target() const override;
-    int tabIndex() const final;
+    int defaultTabIndex() const final;
     bool draggable() const final;
 
     String effectiveTarget() const;
index ac0758d..58fc702 100644 (file)
@@ -213,7 +213,7 @@ bool HTMLAreaElement::isFocusable() const
     if (!image || !image->renderer() || image->renderer()->style().visibility() != Visibility::Visible)
         return false;
 
-    return supportsFocus() && Element::tabIndex() >= 0;
+    return supportsFocus() && tabIndexSetExplicitly().valueOr(0) >= 0;
 }
     
 void HTMLAreaElement::setFocus(bool shouldBeFocused)
index 82c22d4..11d2bf7 100644 (file)
@@ -714,13 +714,6 @@ String HTMLElement::title() const
     return attributeWithoutSynchronization(titleAttr);
 }
 
-int HTMLElement::tabIndex() const
-{
-    if (supportsFocus())
-        return Element::tabIndex();
-    return -1;
-}
-
 bool HTMLElement::translate() const
 {
     for (auto& element : lineageOfType<HTMLElement>(*this)) {
index 67bf6a6..bb01107 100644 (file)
@@ -44,8 +44,6 @@ public:
 
     WEBCORE_EXPORT String title() const final;
 
-    int tabIndex() const override;
-
     WEBCORE_EXPORT ExceptionOr<void> setInnerText(const String&);
     WEBCORE_EXPORT ExceptionOr<void> setOuterText(const String&);
 
index 798be79..e5aa510 100644 (file)
@@ -34,7 +34,7 @@
     // User interaction.
     [CEReactions, Reflect] attribute boolean hidden;
     void click();
-    [CEReactions] attribute long tabIndex;
+    [CEReactions, ImplementedAs=tabIndexForBindings] attribute long tabIndex;
     void focus();
     void blur();
     [CEReactions, Reflect] attribute DOMString accessKey;
index d8893b1..0cd75bc 100644 (file)
@@ -409,10 +409,9 @@ bool HTMLFormControlElement::matchesInvalidPseudoClass() const
     return willValidate() && !isValidFormControlElement();
 }
 
-int HTMLFormControlElement::tabIndex() const
+int HTMLFormControlElement::defaultTabIndex() const
 {
-    // Skip the supportsFocus check in HTMLElement.
-    return Element::tabIndex();
+    return 0;
 }
 
 bool HTMLFormControlElement::computeWillValidate() const
index a58ade3..11d9355 100644 (file)
@@ -167,7 +167,7 @@ private:
 
     bool isFormControlElement() const final { return true; }
 
-    int tabIndex() const final;
+    int defaultTabIndex() const final;
 
     bool isValidFormControlElement() const;
 
index ef59d63..594d041 100644 (file)
@@ -221,10 +221,10 @@ bool MathMLElement::supportsFocus() const
     return isLink() || StyledElement::supportsFocus();
 }
 
-int MathMLElement::tabIndex() const
+int MathMLElement::defaultTabIndex() const
 {
-    // Skip the supportsFocus check in StyledElement.
-    return Element::tabIndex();
+    // FIXME: This seems wrong.
+    return 0;
 }
 
 }
index 1965b1a..610f210 100644 (file)
@@ -108,7 +108,7 @@ private:
     bool isMouseFocusable() const final;
     bool isURLAttribute(const Attribute&) const final;
     bool supportsFocus() const final;
-    int tabIndex() const final;
+    int defaultTabIndex() const final;
 };
 
 inline bool Node::hasTagName(const MathMLQualifiedName& name) const
index 41d4844..ce3b7f6 100644 (file)
@@ -325,13 +325,19 @@ static inline bool isFocusableScopeOwner(Element& element, KeyboardEvent* event)
     return element.isKeyboardFocusable(event) && isFocusScopeOwner(element);
 }
 
+// FIXME: This function should be merged into shadowAdjustedTabIndex.
+static inline int tabIndexForElement(const Element& element)
+{
+    return element.shouldBeIgnoredInSequentialFocusNavigation() ? -1 : element.tabIndexSetExplicitly().valueOr(0);
+}
+
 static inline int shadowAdjustedTabIndex(Element& element, KeyboardEvent* event)
 {
     if (isNonFocusableScopeOwner(element, event)) {
         if (!element.tabIndexSetExplicitly())
             return 0; // Treat a shadow host without tabindex if it has tabindex=0 even though HTMLElement::tabIndex returns -1 on such an element.
     }
-    return element.tabIndex();
+    return tabIndexForElement(element);
 }
 
 FocusController::FocusController(Page& page, OptionSet<ActivityState::Flag> activityState)
@@ -620,7 +626,8 @@ static Element* nextElementWithGreaterTabIndex(const FocusNavigationScope& scope
         if (!is<Element>(*node))
             continue;
         Element& candidate = downcast<Element>(*node);
-        int candidateTabIndex = candidate.tabIndex();
+        // FIXME: We should be calling shadowAdjustedTabIndex instead.
+        int candidateTabIndex = tabIndexForElement(candidate);
         if (isFocusableElementOrScopeOwner(candidate, event) && candidateTabIndex > tabIndex && (!winner || candidateTabIndex < winningTabIndex)) {
             winner = &candidate;
             winningTabIndex = candidateTabIndex;
index 3dd3f3b..a4d15fe 100644 (file)
@@ -151,10 +151,9 @@ void SVGAElement::defaultEventHandler(Event& event)
     SVGGraphicsElement::defaultEventHandler(event);
 }
 
-int SVGAElement::tabIndex() const
+int SVGAElement::defaultTabIndex() const
 {
-    // Skip the supportsFocus check in SVGElement.
-    return Element::tabIndex();
+    return 0;
 }
 
 bool SVGAElement::supportsFocus() const
index b046e3b..3099630 100644 (file)
@@ -60,7 +60,7 @@ private:
     bool isKeyboardFocusable(KeyboardEvent*) const final;
     bool isURLAttribute(const Attribute&) const final;
     bool canStartSelection() const final;
-    int tabIndex() const final;
+    int defaultTabIndex() const final;
 
     bool willRespondToMouseClickEvents() final;
 
index a8096dd..387c9c1 100644 (file)
@@ -183,13 +183,6 @@ SVGElement::~SVGElement()
     document().accessSVGExtensions().removeAllElementReferencesForTarget(*this);
 }
 
-int SVGElement::tabIndex() const
-{
-    if (supportsFocus())
-        return Element::tabIndex();
-    return -1;
-}
-
 void SVGElement::willRecalcStyle(Style::Change change)
 {
     if (!m_svgRareData || styleResolutionShouldRecompositeLayer())
index dd455d6..9546256 100644 (file)
@@ -119,7 +119,6 @@ public:
     bool hasFocusEventListeners() const;
 
     bool hasTagName(const SVGQualifiedName& name) const { return hasLocalName(name.localName()); }
-    int tabIndex() const override;
 
     void callClearTarget() { clearTarget(); }
 
index 42e20fe..cbe670b 100644 (file)
@@ -31,7 +31,7 @@
 
     readonly attribute SVGAnimatedString className;
 
-    attribute long tabIndex;
+    [CEReactions=NotNeeded, ImplementedAs=tabIndexForBindings] attribute long tabIndex;
 
     // FIXME: Using "undefined" as default parameter value is wrong.
     // This method is deprecated, and we'd like to remove it someday.
index faa7765..a60d323 100644 (file)
@@ -1,3 +1,14 @@
+2019-08-16  Ryosuke Niwa  <rniwa@webkit.org>
+
+        Split tabIndex computation for DOM and the rest of WebCore
+        https://bugs.webkit.org/show_bug.cgi?id=200806
+
+        Reviewed by Chris Dumez.
+
+        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLElement.cpp:
+        (webkit_dom_html_element_get_tab_index):
+        (webkit_dom_html_element_set_tab_index):
+
 2019-08-16  Ross Kirsling  <ross.kirsling@sony.com>
 
         Unreviewed restabilization of non-unified build.
index e316436..9ca7d7d 100644 (file)
@@ -457,7 +457,7 @@ glong webkit_dom_html_element_get_tab_index(WebKitDOMHTMLElement* self)
     WebCore::JSMainThreadNullState state;
     g_return_val_if_fail(WEBKIT_DOM_IS_HTML_ELEMENT(self), 0);
     WebCore::HTMLElement* item = WebKit::core(self);
-    glong result = item->tabIndex();
+    glong result = item->tabIndexForBindings();
     return result;
 }
 
@@ -466,7 +466,7 @@ void webkit_dom_html_element_set_tab_index(WebKitDOMHTMLElement* self, glong val
     WebCore::JSMainThreadNullState state;
     g_return_if_fail(WEBKIT_DOM_IS_HTML_ELEMENT(self));
     WebCore::HTMLElement* item = WebKit::core(self);
-    item->setTabIndex(value);
+    item->setTabIndexForBindings(value);
 }
 
 gboolean webkit_dom_html_element_get_draggable(WebKitDOMHTMLElement* self)
index 4eb7a33..4e65fdb 100644 (file)
@@ -1,3 +1,14 @@
+2019-08-16  Ryosuke Niwa  <rniwa@webkit.org>
+
+        Split tabIndex computation for DOM and the rest of WebCore
+        https://bugs.webkit.org/show_bug.cgi?id=200806
+
+        Reviewed by Chris Dumez.
+
+        * DOM/DOMHTMLElement.mm:
+        (-[DOMHTMLElement tabIndex]):
+        (-[DOMHTMLElement setTabIndex:]):
+
 2019-08-15  Yusuke Suzuki  <ysuzuki@apple.com>
 
         [WTF] Add makeUnique<T>, which ensures T is fast-allocated, WTF_MAKE_FAST_ALLOCATED annotation part
index e931020..d03082f 100644 (file)
 - (int)tabIndex
 {
     WebCore::JSMainThreadNullState state;
-    return IMPL->tabIndex();
+    return IMPL->tabIndexForBindings();
 }
 
 - (void)setTabIndex:(int)newTabIndex
 {
     WebCore::JSMainThreadNullState state;
-    IMPL->setTabIndex(newTabIndex);
+    IMPL->setTabIndexForBindings(newTabIndex);
 }
 
 - (BOOL)draggable