| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2  * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 
| 3  *           (C) 1999 Antti Koivisto (koivisto@kde.org) | 3  *           (C) 1999 Antti Koivisto (koivisto@kde.org) | 
| 4  *           (C) 2001 Peter Kelly (pmk@post.com) | 4  *           (C) 2001 Peter Kelly (pmk@post.com) | 
| 5  *           (C) 2001 Dirk Mueller (mueller@kde.org) | 5  *           (C) 2001 Dirk Mueller (mueller@kde.org) | 
| 6  *           (C) 2007 David Smith (catfish.man@gmail.com) | 6  *           (C) 2007 David Smith (catfish.man@gmail.com) | 
| 7  * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012, 2013 Apple Inc.
       All rights reserved. | 7  * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012, 2013 Apple Inc.
       All rights reserved. | 
| 8  *           (C) 2007 Eric Seidel (eric@webkit.org) | 8  *           (C) 2007 Eric Seidel (eric@webkit.org) | 
| 9  * | 9  * | 
| 10  * This library is free software; you can redistribute it and/or | 10  * This library is free software; you can redistribute it and/or | 
| (...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 204 | 204 | 
| 205 void Element::clearElementFlag(ElementFlags mask) | 205 void Element::clearElementFlag(ElementFlags mask) | 
| 206 { | 206 { | 
| 207     if (!hasRareData()) | 207     if (!hasRareData()) | 
| 208         return; | 208         return; | 
| 209     elementRareData()->clearElementFlag(mask); | 209     elementRareData()->clearElementFlag(mask); | 
| 210 } | 210 } | 
| 211 | 211 | 
| 212 void Element::clearTabIndexExplicitlyIfNeeded() | 212 void Element::clearTabIndexExplicitlyIfNeeded() | 
| 213 { | 213 { | 
| 214     if (hasRareData()) | 214     if (hasRareData()) { | 
| 215         elementRareData()->clearTabIndexExplicitly(); | 215         elementRareData()->clearTabIndexExplicitly(); | 
|  | 216         // As tabindex is removed, unless there is an tabstop attribute, | 
|  | 217         // revert tabstop to default to match tabindex at this point (0). | 
|  | 218         if (!fastHasAttribute(tabstopAttr)) | 
|  | 219             setTabStopInternal(true); | 
|  | 220     } | 
| 216 } | 221 } | 
| 217 | 222 | 
| 218 void Element::setTabIndexExplicitly(short tabIndex) | 223 void Element::setTabIndexExplicitly(short tabIndex) | 
| 219 { | 224 { | 
| 220     ensureElementRareData().setTabIndexExplicitly(tabIndex); | 225     ensureElementRareData().setTabIndexExplicitly(tabIndex); | 
|  | 226     if (!fastHasAttribute(tabstopAttr)) | 
|  | 227         setTabStopInternal(tabIndex >= 0); | 
| 221 } | 228 } | 
| 222 | 229 | 
| 223 void Element::setTabIndex(int value) | 230 void Element::setTabIndex(int value) | 
| 224 { | 231 { | 
| 225     setIntegralAttribute(tabindexAttr, value); | 232     setIntegralAttribute(tabindexAttr, value); | 
| 226 } | 233 } | 
| 227 | 234 | 
| 228 short Element::tabIndex() const | 235 short Element::tabIndex() const | 
| 229 { | 236 { | 
| 230     return hasRareData() ? elementRareData()->tabIndex() : 0; | 237     return hasRareData() ? elementRareData()->tabIndex() : 0; | 
| (...skipping 1854 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2085             clearTabIndexExplicitlyIfNeeded(); | 2092             clearTabIndexExplicitlyIfNeeded(); | 
| 2086             if (treeScope().adjustedFocusedElement() == this) { | 2093             if (treeScope().adjustedFocusedElement() == this) { | 
| 2087                 // We might want to call blur(), but it's dangerous to dispatch | 2094                 // We might want to call blur(), but it's dangerous to dispatch | 
| 2088                 // events here. | 2095                 // events here. | 
| 2089                 document().setNeedsFocusedElementCheck(); | 2096                 document().setNeedsFocusedElementCheck(); | 
| 2090             } | 2097             } | 
| 2091         } else if (parseHTMLInteger(value, tabindex)) { | 2098         } else if (parseHTMLInteger(value, tabindex)) { | 
| 2092             // Clamp tabindex to the range of 'short' to match Firefox's behavio
      r. | 2099             // Clamp tabindex to the range of 'short' to match Firefox's behavio
      r. | 
| 2093             setTabIndexExplicitly(max(static_cast<int>(std::numeric_limits<short
      >::min()), std::min(tabindex, static_cast<int>(std::numeric_limits<short>::max()
      )))); | 2100             setTabIndexExplicitly(max(static_cast<int>(std::numeric_limits<short
      >::min()), std::min(tabindex, static_cast<int>(std::numeric_limits<short>::max()
      )))); | 
| 2094         } | 2101         } | 
|  | 2102     } else if (RuntimeEnabledFeatures::tabStopAttributeEnabled() && name == tabs
      topAttr) { | 
|  | 2103         if (!hasAttribute(tabstopAttr)) { | 
|  | 2104             // tabstop attribute removed. | 
|  | 2105             clearElementFlag(TabStopWasSetExplicitly); | 
|  | 2106             setTabStopInternal(tabIndex() >= 0); | 
|  | 2107         } else { | 
|  | 2108             // Treat empty attribute as true. | 
|  | 2109             if (equalIgnoringCase(value, "true") || equalIgnoringCase(value, "")
      ) { | 
|  | 2110                 setTabStopInternal(true); | 
|  | 2111                 setElementFlag(TabStopWasSetExplicitly, true); | 
|  | 2112             } else if (equalIgnoringCase(value, "false")) { | 
|  | 2113                 setTabStopInternal(false); | 
|  | 2114                 setElementFlag(TabStopWasSetExplicitly, true); | 
|  | 2115             } else { | 
|  | 2116                 // When value is other than "true", "false", "", the value is ig
      nored and | 
|  | 2117                 // falls back the default state. | 
|  | 2118                 clearElementFlag(TabStopWasSetExplicitly); | 
|  | 2119                 setTabStopInternal(tabIndex() >= 0); | 
|  | 2120             } | 
|  | 2121         } | 
| 2095     } | 2122     } | 
| 2096 } | 2123 } | 
| 2097 | 2124 | 
| 2098 bool Element::parseAttributeName(QualifiedName& out, const AtomicString& namespa
      ceURI, const AtomicString& qualifiedName, ExceptionState& exceptionState) | 2125 bool Element::parseAttributeName(QualifiedName& out, const AtomicString& namespa
      ceURI, const AtomicString& qualifiedName, ExceptionState& exceptionState) | 
| 2099 { | 2126 { | 
| 2100     AtomicString prefix, localName; | 2127     AtomicString prefix, localName; | 
| 2101     if (!Document::parseQualifiedName(qualifiedName, prefix, localName, exceptio
      nState)) | 2128     if (!Document::parseQualifiedName(qualifiedName, prefix, localName, exceptio
      nState)) | 
| 2102         return false; | 2129         return false; | 
| 2103     ASSERT(!exceptionState.hadException()); | 2130     ASSERT(!exceptionState.hadException()); | 
| 2104 | 2131 | 
| (...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2327     return isFocusable() && tabIndex() >= 0; | 2354     return isFocusable() && tabIndex() >= 0; | 
| 2328 } | 2355 } | 
| 2329 | 2356 | 
| 2330 bool Element::isMouseFocusable() const | 2357 bool Element::isMouseFocusable() const | 
| 2331 { | 2358 { | 
| 2332     return isFocusable(); | 2359     return isFocusable(); | 
| 2333 } | 2360 } | 
| 2334 | 2361 | 
| 2335 bool Element::tabStop() const | 2362 bool Element::tabStop() const | 
| 2336 { | 2363 { | 
| 2337     // Any element which never supports focus will always return false. | 2364     if (hasElementFlag(TabStopWasSetExplicitly)) | 
| 2338     return supportsFocus() && (hasRareData() ? elementRareData()->tabStop() : tr
      ue); | 2365         return elementRareData()->tabStop(); | 
|  | 2366     return tabIndex() >= 0; | 
| 2339 } | 2367 } | 
| 2340 | 2368 | 
| 2341 void Element::setTabStop(bool flag) | 2369 void Element::setTabStop(bool flag) | 
| 2342 { | 2370 { | 
|  | 2371     // Reflect the value in the HTML attribute. Note that we cannot use setBoole
      anAttribute() | 
|  | 2372     // because the tabstop attribute is an enumerated attribute. | 
|  | 2373     // After tabstop attribute is set, the property value is modified accordingl
      y. | 
|  | 2374     setAttribute(tabstopAttr, flag ? "true" : "false"); | 
|  | 2375 } | 
|  | 2376 | 
|  | 2377 void Element::setTabStopInternal(bool flag) | 
|  | 2378 { | 
| 2343     ensureElementRareData().setTabStop(flag); | 2379     ensureElementRareData().setTabStop(flag); | 
| 2344     focusStateChanged(); | 2380     focusStateChanged(); | 
| 2345 } | 2381 } | 
| 2346 | 2382 | 
| 2347 void Element::dispatchFocusEvent(Element* oldFocusedElement, WebFocusType type) | 2383 void Element::dispatchFocusEvent(Element* oldFocusedElement, WebFocusType type) | 
| 2348 { | 2384 { | 
| 2349     RefPtrWillBeRawPtr<FocusEvent> event = FocusEvent::create(EventTypeNames::fo
      cus, false, false, document().domWindow(), 0, oldFocusedElement); | 2385     RefPtrWillBeRawPtr<FocusEvent> event = FocusEvent::create(EventTypeNames::fo
      cus, false, false, document().domWindow(), 0, oldFocusedElement); | 
| 2350     EventDispatcher::dispatchEvent(*this, FocusEventDispatchMediator::create(eve
      nt.release())); | 2386     EventDispatcher::dispatchEvent(*this, FocusEventDispatchMediator::create(eve
      nt.release())); | 
| 2351 } | 2387 } | 
| 2352 | 2388 | 
| (...skipping 1106 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 3459 { | 3495 { | 
| 3460 #if ENABLE(OILPAN) | 3496 #if ENABLE(OILPAN) | 
| 3461     if (hasRareData()) | 3497     if (hasRareData()) | 
| 3462         visitor->trace(elementRareData()); | 3498         visitor->trace(elementRareData()); | 
| 3463     visitor->trace(m_elementData); | 3499     visitor->trace(m_elementData); | 
| 3464 #endif | 3500 #endif | 
| 3465     ContainerNode::trace(visitor); | 3501     ContainerNode::trace(visitor); | 
| 3466 } | 3502 } | 
| 3467 | 3503 | 
| 3468 } // namespace blink | 3504 } // namespace blink | 
| OLD | NEW | 
|---|