| Index: Source/core/dom/Element.cpp
|
| diff --git a/Source/core/dom/Element.cpp b/Source/core/dom/Element.cpp
|
| index a6b1b85232e3b8038577ec7f9c3ea8d490df99d1..a034520cc295865ea05a35f4e40c5ba1e30325a3 100644
|
| --- a/Source/core/dom/Element.cpp
|
| +++ b/Source/core/dom/Element.cpp
|
| @@ -199,20 +199,13 @@ void Element::clearElementFlag(ElementFlags mask)
|
|
|
| void Element::clearTabIndexExplicitlyIfNeeded()
|
| {
|
| - if (hasRareData()) {
|
| + if (hasRareData())
|
| elementRareData()->clearTabIndexExplicitly();
|
| - // As tabindex is removed, unless there is an tabstop attribute,
|
| - // revert tabstop to default to match tabindex at this point (0).
|
| - if (!fastHasAttribute(tabstopAttr))
|
| - setTabStopInternal(true);
|
| - }
|
| }
|
|
|
| void Element::setTabIndexExplicitly(short tabIndex)
|
| {
|
| ensureElementRareData().setTabIndexExplicitly(tabIndex);
|
| - if (!fastHasAttribute(tabstopAttr))
|
| - setTabStopInternal(tabIndex >= 0);
|
| }
|
|
|
| void Element::setTabIndex(int value)
|
| @@ -1822,7 +1815,12 @@ PassRefPtrWillBeRawPtr<ShadowRoot> Element::createShadowRoot(ScriptState* script
|
| return nullptr;
|
| }
|
|
|
| - return createShadowRoot(exceptionState);
|
| + RefPtrWillBeRawPtr<ShadowRoot> shadowRoot = createShadowRoot(exceptionState);
|
| +
|
| + if (shadowRootInitDict.hasDelegatesFocus())
|
| + shadowRoot->setDelegatesFocus(shadowRootInitDict.delegatesFocus());
|
| +
|
| + return PassRefPtrWillBeRawPtr<ShadowRoot>(shadowRoot);
|
| }
|
|
|
| PassRefPtrWillBeRawPtr<ShadowRoot> Element::createShadowRoot(ExceptionState& exceptionState)
|
| @@ -2060,27 +2058,6 @@ void Element::parseAttribute(const QualifiedName& name, const AtomicString& valu
|
| // Clamp tabindex to the range of 'short' to match Firefox's behavior.
|
| setTabIndexExplicitly(max(static_cast<int>(std::numeric_limits<short>::min()), std::min(tabindex, static_cast<int>(std::numeric_limits<short>::max()))));
|
| }
|
| - } else if (RuntimeEnabledFeatures::tabStopAttributeEnabled() && name == tabstopAttr) {
|
| - UseCounter::count(document(), UseCounter::TabStopAttribute);
|
| - if (!hasAttribute(tabstopAttr)) {
|
| - // tabstop attribute removed.
|
| - clearElementFlag(TabStopWasSetExplicitly);
|
| - setTabStopInternal(tabIndex() >= 0);
|
| - } else {
|
| - // Treat empty attribute as true.
|
| - if (equalIgnoringCase(value, "true") || equalIgnoringCase(value, "")) {
|
| - setElementFlag(TabStopWasSetExplicitly, true);
|
| - setTabStopInternal(true);
|
| - } else if (equalIgnoringCase(value, "false")) {
|
| - setElementFlag(TabStopWasSetExplicitly, true);
|
| - setTabStopInternal(false);
|
| - } else {
|
| - // When value is other than "true", "false", "", the value is ignored and
|
| - // falls back the default state.
|
| - clearElementFlag(TabStopWasSetExplicitly);
|
| - setTabStopInternal(tabIndex() >= 0);
|
| - }
|
| - }
|
| }
|
| }
|
|
|
| @@ -2217,7 +2194,7 @@ void Element::focus(bool restorePreviousSelection, WebFocusType type)
|
| if (!isFocusable())
|
| return;
|
|
|
| - if (shadowRoot() && tabIndex() >= 0 && !tabStop()) {
|
| + if (shadowRoot() && tabIndex() >= 0 && shadowRoot()->delegatesFocus()) {
|
| if (containsIncludingShadowDOM(document().focusedElement()))
|
| return;
|
|
|
| @@ -2333,28 +2310,6 @@ bool Element::isMouseFocusable() const
|
| return isFocusable();
|
| }
|
|
|
| -bool Element::tabStop() const
|
| -{
|
| - if (hasElementFlag(TabStopWasSetExplicitly))
|
| - return elementRareData()->tabStop();
|
| - return tabIndex() >= 0;
|
| -}
|
| -
|
| -void Element::setTabStop(bool flag)
|
| -{
|
| - // Reflect the value in the HTML attribute. Note that we cannot use setBooleanAttribute()
|
| - // because the tabstop attribute is an enumerated attribute.
|
| - // After tabstop attribute is set, the property value is modified accordingly.
|
| - setAttribute(tabstopAttr, flag ? "true" : "false");
|
| -}
|
| -
|
| -void Element::setTabStopInternal(bool flag)
|
| -{
|
| - ensureElementRareData().setTabStop(flag);
|
| - if (shadowRoot() && shadowRoot()->containsIncludingShadowDOM(document().focusedElement()))
|
| - setFocus(true);
|
| -}
|
| -
|
| bool Element::isFocusedElementInDocument() const
|
| {
|
| return this == document().focusedElement();
|
|
|