| 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 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 163 { | 163 { |
| 164 if (!m_elementsById) | 164 if (!m_elementsById) |
| 165 return; | 165 return; |
| 166 m_elementsById->remove(elementId.impl(), element); | 166 m_elementsById->remove(elementId.impl(), element); |
| 167 m_idTargetObserverRegistry->notifyObservers(elementId); | 167 m_idTargetObserverRegistry->notifyObservers(elementId); |
| 168 } | 168 } |
| 169 | 169 |
| 170 Node* TreeScope::ancestorInThisScope(Node* node) const | 170 Node* TreeScope::ancestorInThisScope(Node* node) const |
| 171 { | 171 { |
| 172 while (node) { | 172 while (node) { |
| 173 if (&node->treeScope() == this) | 173 if (node->treeScope() == this) |
| 174 return node; | 174 return node; |
| 175 if (!node->isInShadowTree()) | 175 if (!node->isInShadowTree()) |
| 176 return 0; | 176 return 0; |
| 177 | 177 |
| 178 node = node->shadowHost(); | 178 node = node->shadowHost(); |
| 179 } | 179 } |
| 180 | 180 |
| 181 return 0; | 181 return 0; |
| 182 } | 182 } |
| 183 | 183 |
| (...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 372 return toElement(targetStack.last()); | 372 return toElement(targetStack.last()); |
| 373 } | 373 } |
| 374 if (node->isShadowRoot()) { | 374 if (node->isShadowRoot()) { |
| 375 ASSERT(!targetStack.isEmpty()); | 375 ASSERT(!targetStack.isEmpty()); |
| 376 targetStack.removeLast(); | 376 targetStack.removeLast(); |
| 377 } | 377 } |
| 378 } | 378 } |
| 379 return 0; | 379 return 0; |
| 380 } | 380 } |
| 381 | 381 |
| 382 unsigned short TreeScope::comparePosition(const TreeScope& otherScope) const | 382 unsigned short TreeScope::comparePosition(NonNullPtr<const TreeScope> otherScope
) const |
| 383 { | 383 { |
| 384 if (&otherScope == this) | 384 if (otherScope == this) |
| 385 return Node::DOCUMENT_POSITION_EQUIVALENT; | 385 return Node::DOCUMENT_POSITION_EQUIVALENT; |
| 386 | 386 |
| 387 Vector<const TreeScope*, 16> chain1; | 387 Vector<const TreeScope*, 16> chain1; |
| 388 Vector<const TreeScope*, 16> chain2; | 388 Vector<const TreeScope*, 16> chain2; |
| 389 const TreeScope* current; | 389 const TreeScope* current; |
| 390 for (current = this; current; current = current->parentTreeScope()) | 390 for (current = this; current; current = current->parentTreeScope()) |
| 391 chain1.append(current); | 391 chain1.append(current); |
| 392 for (current = &otherScope; current; current = current->parentTreeScope()) | 392 for (current = otherScope.get(); current; current = current->parentTreeScope
()) |
| 393 chain2.append(current); | 393 chain2.append(current); |
| 394 | 394 |
| 395 unsigned index1 = chain1.size(); | 395 unsigned index1 = chain1.size(); |
| 396 unsigned index2 = chain2.size(); | 396 unsigned index2 = chain2.size(); |
| 397 if (chain1[index1 - 1] != chain2[index2 - 1]) | 397 if (chain1[index1 - 1] != chain2[index2 - 1]) |
| 398 return Node::DOCUMENT_POSITION_DISCONNECTED | Node::DOCUMENT_POSITION_IM
PLEMENTATION_SPECIFIC; | 398 return Node::DOCUMENT_POSITION_DISCONNECTED | Node::DOCUMENT_POSITION_IM
PLEMENTATION_SPECIFIC; |
| 399 | 399 |
| 400 for (unsigned i = std::min(index1, index2); i; --i) { | 400 for (unsigned i = std::min(index1, index2); i; --i) { |
| 401 const TreeScope* child1 = chain1[--index1]; | 401 const TreeScope* child1 = chain1[--index1]; |
| 402 const TreeScope* child2 = chain2[--index2]; | 402 const TreeScope* child2 = chain2[--index2]; |
| (...skipping 14 matching lines...) Expand all Loading... |
| 417 // There was no difference between the two parent chains, i.e., one was a su
bset of the other. The shorter | 417 // There was no difference between the two parent chains, i.e., one was a su
bset of the other. The shorter |
| 418 // chain is the ancestor. | 418 // chain is the ancestor. |
| 419 return index1 < index2 ? | 419 return index1 < index2 ? |
| 420 Node::DOCUMENT_POSITION_FOLLOWING | Node::DOCUMENT_POSITION_CONTAINED_BY
: | 420 Node::DOCUMENT_POSITION_FOLLOWING | Node::DOCUMENT_POSITION_CONTAINED_BY
: |
| 421 Node::DOCUMENT_POSITION_PRECEDING | Node::DOCUMENT_POSITION_CONTAINS; | 421 Node::DOCUMENT_POSITION_PRECEDING | Node::DOCUMENT_POSITION_CONTAINS; |
| 422 } | 422 } |
| 423 | 423 |
| 424 static void listTreeScopes(Node* node, Vector<TreeScope*, 5>& treeScopes) | 424 static void listTreeScopes(Node* node, Vector<TreeScope*, 5>& treeScopes) |
| 425 { | 425 { |
| 426 while (true) { | 426 while (true) { |
| 427 treeScopes.append(&node->treeScope()); | 427 treeScopes.append(node->treeScope().get()); |
| 428 Element* ancestor = node->shadowHost(); | 428 Element* ancestor = node->shadowHost(); |
| 429 if (!ancestor) | 429 if (!ancestor) |
| 430 break; | 430 break; |
| 431 node = ancestor; | 431 node = ancestor; |
| 432 } | 432 } |
| 433 } | 433 } |
| 434 | 434 |
| 435 TreeScope* commonTreeScope(Node* nodeA, Node* nodeB) | 435 TreeScope* commonTreeScope(Node* nodeA, Node* nodeB) |
| 436 { | 436 { |
| 437 if (!nodeA || !nodeB) | 437 if (!nodeA || !nodeB) |
| 438 return 0; | 438 return 0; |
| 439 | 439 |
| 440 if (&nodeA->treeScope() == &nodeB->treeScope()) | 440 if (nodeA->treeScope() == nodeB->treeScope()) |
| 441 return &nodeA->treeScope(); | 441 return nodeA->treeScope().get(); |
| 442 | 442 |
| 443 Vector<TreeScope*, 5> treeScopesA; | 443 Vector<TreeScope*, 5> treeScopesA; |
| 444 listTreeScopes(nodeA, treeScopesA); | 444 listTreeScopes(nodeA, treeScopesA); |
| 445 | 445 |
| 446 Vector<TreeScope*, 5> treeScopesB; | 446 Vector<TreeScope*, 5> treeScopesB; |
| 447 listTreeScopes(nodeB, treeScopesB); | 447 listTreeScopes(nodeB, treeScopesB); |
| 448 | 448 |
| 449 size_t indexA = treeScopesA.size(); | 449 size_t indexA = treeScopesA.size(); |
| 450 size_t indexB = treeScopesB.size(); | 450 size_t indexB = treeScopesB.size(); |
| 451 | 451 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 467 } | 467 } |
| 468 #endif | 468 #endif |
| 469 | 469 |
| 470 int TreeScope::refCount() const | 470 int TreeScope::refCount() const |
| 471 { | 471 { |
| 472 if (Node* root = rootNode()) | 472 if (Node* root = rootNode()) |
| 473 return root->refCount(); | 473 return root->refCount(); |
| 474 return 0; | 474 return 0; |
| 475 } | 475 } |
| 476 | 476 |
| 477 bool TreeScope::isInclusiveAncestorOf(const TreeScope& scope) const | 477 bool TreeScope::isInclusiveAncestorOf(NonNullPtr<const TreeScope> scope) const |
| 478 { | 478 { |
| 479 for (const TreeScope* current = &scope; current; current = current->parentTr
eeScope()) { | 479 for (const TreeScope* current = scope.get(); current; current = current->par
entTreeScope()) { |
| 480 if (current == this) | 480 if (current == this) |
| 481 return true; | 481 return true; |
| 482 } | 482 } |
| 483 return false; | 483 return false; |
| 484 } | 484 } |
| 485 | 485 |
| 486 Element* TreeScope::getElementByAccessKey(const String& key) const | 486 Element* TreeScope::getElementByAccessKey(const String& key) const |
| 487 { | 487 { |
| 488 if (key.isEmpty()) | 488 if (key.isEmpty()) |
| 489 return 0; | 489 return 0; |
| 490 Element* result = 0; | 490 Element* result = 0; |
| 491 Node* root = rootNode(); | 491 Node* root = rootNode(); |
| 492 for (Element* element = ElementTraversal::firstWithin(root); element; elemen
t = ElementTraversal::next(element, root)) { | 492 for (Element* element = ElementTraversal::firstWithin(root); element; elemen
t = ElementTraversal::next(element, root)) { |
| 493 if (element->fastGetAttribute(accesskeyAttr) == key) | 493 if (element->fastGetAttribute(accesskeyAttr) == key) |
| 494 result = element; | 494 result = element; |
| 495 for (ShadowRoot* shadowRoot = element->youngestShadowRoot(); shadowRoot;
shadowRoot = shadowRoot->olderShadowRoot()) { | 495 for (ShadowRoot* shadowRoot = element->youngestShadowRoot(); shadowRoot;
shadowRoot = shadowRoot->olderShadowRoot()) { |
| 496 if (Element* shadowResult = shadowRoot->getElementByAccessKey(key)) | 496 if (Element* shadowResult = shadowRoot->getElementByAccessKey(key)) |
| 497 result = shadowResult; | 497 result = shadowResult; |
| 498 } | 498 } |
| 499 } | 499 } |
| 500 return result; | 500 return result; |
| 501 } | 501 } |
| 502 | 502 |
| 503 } // namespace WebCore | 503 } // namespace WebCore |
| OLD | NEW |