| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2011 Google Inc. All Rights Reserved. | 2 * Copyright (C) 2011 Google Inc. All Rights Reserved. |
| 3 * Copyright (C) 2012 Apple Inc. All rights reserved. | 3 * Copyright (C) 2012 Apple Inc. All rights reserved. |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
| 7 * are met: | 7 * are met: |
| 8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 85 if (m_selection) { | 85 if (m_selection) { |
| 86 m_selection->clearTreeScope(); | 86 m_selection->clearTreeScope(); |
| 87 m_selection = nullptr; | 87 m_selection = nullptr; |
| 88 } | 88 } |
| 89 | 89 |
| 90 if (m_parentTreeScope) | 90 if (m_parentTreeScope) |
| 91 m_parentTreeScope->guardDeref(); | 91 m_parentTreeScope->guardDeref(); |
| 92 #endif | 92 #endif |
| 93 } | 93 } |
| 94 | 94 |
| 95 TreeScope* TreeScope::olderShadowRootOrParentTreeScope() const | |
| 96 { | |
| 97 if (rootNode().isShadowRoot()) { | |
| 98 if (ShadowRoot* olderShadowRoot = toShadowRoot(rootNode()).olderShadowRo
ot()) | |
| 99 return olderShadowRoot; | |
| 100 } | |
| 101 return parentTreeScope(); | |
| 102 } | |
| 103 | |
| 104 bool TreeScope::isInclusiveOlderSiblingShadowRootOrAncestorTreeScopeOf(const Tre
eScope& scope) const | 95 bool TreeScope::isInclusiveOlderSiblingShadowRootOrAncestorTreeScopeOf(const Tre
eScope& scope) const |
| 105 { | 96 { |
| 106 for (const TreeScope* current = &scope; current; current = current->olderSha
dowRootOrParentTreeScope()) { | 97 for (const TreeScope* current = &scope; current; current = current->parentTr
eeScope()) { |
| 107 if (current == this) | 98 if (current == this) |
| 108 return true; | 99 return true; |
| 109 } | 100 } |
| 110 return false; | 101 return false; |
| 111 } | 102 } |
| 112 | 103 |
| 113 bool TreeScope::rootNodeHasTreeSharedParent() const | 104 bool TreeScope::rootNodeHasTreeSharedParent() const |
| 114 { | 105 { |
| 115 return rootNode().hasTreeSharedParent(); | 106 return rootNode().hasTreeSharedParent(); |
| 116 } | 107 } |
| (...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 296 | 287 |
| 297 for (unsigned i = std::min(index1, index2); i; --i) { | 288 for (unsigned i = std::min(index1, index2); i; --i) { |
| 298 const TreeScope* child1 = chain1[--index1]; | 289 const TreeScope* child1 = chain1[--index1]; |
| 299 const TreeScope* child2 = chain2[--index2]; | 290 const TreeScope* child2 = chain2[--index2]; |
| 300 if (child1 != child2) { | 291 if (child1 != child2) { |
| 301 Node* shadowHost1 = child1->rootNode().parentOrShadowHostNode(); | 292 Node* shadowHost1 = child1->rootNode().parentOrShadowHostNode(); |
| 302 Node* shadowHost2 = child2->rootNode().parentOrShadowHostNode(); | 293 Node* shadowHost2 = child2->rootNode().parentOrShadowHostNode(); |
| 303 if (shadowHost1 != shadowHost2) | 294 if (shadowHost1 != shadowHost2) |
| 304 return shadowHost1->compareDocumentPosition(shadowHost2, Node::T
reatShadowTreesAsDisconnected); | 295 return shadowHost1->compareDocumentPosition(shadowHost2, Node::T
reatShadowTreesAsDisconnected); |
| 305 | 296 |
| 306 for (const ShadowRoot* child = toShadowRoot(child2->rootNode()).olde
rShadowRoot(); child; child = child->olderShadowRoot()) | |
| 307 if (child == child1) | |
| 308 return Node::DOCUMENT_POSITION_FOLLOWING; | |
| 309 | |
| 310 return Node::DOCUMENT_POSITION_PRECEDING; | 297 return Node::DOCUMENT_POSITION_PRECEDING; |
| 311 } | 298 } |
| 312 } | 299 } |
| 313 | 300 |
| 314 // There was no difference between the two parent chains, i.e., one was a su
bset of the other. The shorter | 301 // There was no difference between the two parent chains, i.e., one was a su
bset of the other. The shorter |
| 315 // chain is the ancestor. | 302 // chain is the ancestor. |
| 316 return index1 < index2 ? | 303 return index1 < index2 ? |
| 317 Node::DOCUMENT_POSITION_FOLLOWING | Node::DOCUMENT_POSITION_CONTAINED_BY
: | 304 Node::DOCUMENT_POSITION_FOLLOWING | Node::DOCUMENT_POSITION_CONTAINED_BY
: |
| 318 Node::DOCUMENT_POSITION_PRECEDING | Node::DOCUMENT_POSITION_CONTAINS; | 305 Node::DOCUMENT_POSITION_PRECEDING | Node::DOCUMENT_POSITION_CONTAINS; |
| 319 } | 306 } |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 407 | 394 |
| 408 Element* TreeScope::getElementByAccessKey(const String& key) const | 395 Element* TreeScope::getElementByAccessKey(const String& key) const |
| 409 { | 396 { |
| 410 if (key.isEmpty()) | 397 if (key.isEmpty()) |
| 411 return 0; | 398 return 0; |
| 412 Element* result = 0; | 399 Element* result = 0; |
| 413 Node& root = rootNode(); | 400 Node& root = rootNode(); |
| 414 for (Element* element = ElementTraversal::firstWithin(root); element; elemen
t = ElementTraversal::next(*element, &root)) { | 401 for (Element* element = ElementTraversal::firstWithin(root); element; elemen
t = ElementTraversal::next(*element, &root)) { |
| 415 if (equalIgnoringCase(element->getAttribute(HTMLNames::accesskeyAttr), k
ey)) | 402 if (equalIgnoringCase(element->getAttribute(HTMLNames::accesskeyAttr), k
ey)) |
| 416 result = element; | 403 result = element; |
| 417 for (ShadowRoot* shadowRoot = element->youngestShadowRoot(); shadowRoot;
shadowRoot = shadowRoot->olderShadowRoot()) { | 404 if (ShadowRoot* shadowRoot = element->shadowRoot()) { |
| 418 if (Element* shadowResult = shadowRoot->getElementByAccessKey(key)) | 405 if (Element* shadowResult = shadowRoot->getElementByAccessKey(key)) |
| 419 result = shadowResult; | 406 result = shadowResult; |
| 420 } | 407 } |
| 421 } | 408 } |
| 422 return result; | 409 return result; |
| 423 } | 410 } |
| 424 | 411 |
| 425 void TreeScope::setNeedsStyleRecalcForViewportUnits() | 412 void TreeScope::setNeedsStyleRecalcForViewportUnits() |
| 426 { | 413 { |
| 427 for (Element* element = ElementTraversal::firstWithin(rootNode()); element;
element = ElementTraversal::next(*element)) { | 414 for (Element* element = ElementTraversal::firstWithin(rootNode()); element;
element = ElementTraversal::next(*element)) { |
| 428 for (ShadowRoot* root = element->youngestShadowRoot(); root; root = root
->olderShadowRoot()) | 415 if (ShadowRoot* root = element->shadowRoot()) |
| 429 root->setNeedsStyleRecalcForViewportUnits(); | 416 root->setNeedsStyleRecalcForViewportUnits(); |
| 430 RenderStyle* style = element->renderStyle(); | 417 RenderStyle* style = element->renderStyle(); |
| 431 if (style && style->hasViewportUnits()) | 418 if (style && style->hasViewportUnits()) |
| 432 element->setNeedsStyleRecalc(LocalStyleChange); | 419 element->setNeedsStyleRecalc(LocalStyleChange); |
| 433 } | 420 } |
| 434 } | 421 } |
| 435 | 422 |
| 436 } // namespace blink | 423 } // namespace blink |
| OLD | NEW |