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 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
53 #include "wtf/Vector.h" | 53 #include "wtf/Vector.h" |
54 | 54 |
55 namespace blink { | 55 namespace blink { |
56 | 56 |
57 using namespace HTMLNames; | 57 using namespace HTMLNames; |
58 | 58 |
59 TreeScope::TreeScope(ContainerNode& rootNode, Document& document) | 59 TreeScope::TreeScope(ContainerNode& rootNode, Document& document) |
60 : m_rootNode(&rootNode) | 60 : m_rootNode(&rootNode) |
61 , m_document(&document) | 61 , m_document(&document) |
62 , m_parentTreeScope(&document) | 62 , m_parentTreeScope(&document) |
63 , m_composedParent(nullptr) | |
63 #if !ENABLE(OILPAN) | 64 #if !ENABLE(OILPAN) |
64 , m_guardRefCount(0) | 65 , m_guardRefCount(0) |
65 #endif | 66 #endif |
66 , m_idTargetObserverRegistry(IdTargetObserverRegistry::create()) | 67 , m_idTargetObserverRegistry(IdTargetObserverRegistry::create()) |
67 { | 68 { |
68 ASSERT(rootNode != document); | 69 ASSERT(rootNode != document); |
69 #if !ENABLE(OILPAN) | 70 #if !ENABLE(OILPAN) |
70 m_parentTreeScope->guardRef(); | 71 m_parentTreeScope->guardRef(); |
71 #endif | 72 #endif |
72 m_rootNode->setTreeScope(this); | 73 m_rootNode->setTreeScope(this); |
(...skipping 488 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
561 { | 562 { |
562 for (Element* element = ElementTraversal::firstWithin(rootNode()); element; element = ElementTraversal::nextIncludingPseudo(*element)) { | 563 for (Element* element = ElementTraversal::firstWithin(rootNode()); element; element = ElementTraversal::nextIncludingPseudo(*element)) { |
563 for (ShadowRoot* root = element->youngestShadowRoot(); root; root = root ->olderShadowRoot()) | 564 for (ShadowRoot* root = element->youngestShadowRoot(); root; root = root ->olderShadowRoot()) |
564 root->setNeedsStyleRecalcForViewportUnits(); | 565 root->setNeedsStyleRecalcForViewportUnits(); |
565 const ComputedStyle* style = element->computedStyle(); | 566 const ComputedStyle* style = element->computedStyle(); |
566 if (style && style->hasViewportUnits()) | 567 if (style && style->hasViewportUnits()) |
567 element->setNeedsStyleRecalc(LocalStyleChange, StyleChangeReasonForT racing::create(StyleChangeReason::ViewportUnits)); | 568 element->setNeedsStyleRecalc(LocalStyleChange, StyleChangeReasonForT racing::create(StyleChangeReason::ViewportUnits)); |
568 } | 569 } |
569 } | 570 } |
570 | 571 |
572 TreeScope* TreeScope::composedParent() | |
573 { | |
574 if (rootNode().isDocumentNode()) | |
575 return nullptr; | |
576 if (!m_composedParent) { | |
577 ShadowRoot& root = toShadowRoot(rootNode()); | |
578 if (root.olderShadowRoot()) | |
579 m_composedParent = root.olderShadowRoot(); | |
580 else if (ContainerNode* host = rootNode().parentOrShadowHostNode()) | |
581 m_composedParent = treeScopeInComposedTree(*host); | |
esprehn
2015/05/19 02:37:56
Can we update these pointers inside the updateDist
rune
2015/05/19 11:08:18
Maybe, I need to look closer at the distribution c
| |
582 } | |
583 return m_composedParent; | |
584 } | |
585 | |
586 TreeScope* TreeScope::treeScopeInComposedTree(const Node& node) | |
587 { | |
588 for (Node* composedParent = ComposedTreeTraversal::parent(node); composedPar ent; composedParent = ComposedTreeTraversal::parent(*composedParent)) { | |
589 if (composedParent && isShadowHost(composedParent)) | |
esprehn
2015/05/19 02:37:56
This null check doesn't make sense, you're in a lo
rune
2015/05/19 11:08:18
Done.
| |
590 return toElement(composedParent)->shadow()->youngestShadowRoot(); | |
esprehn
2015/05/19 02:37:56
there's a getter right on Node for this, just do c
rune
2015/05/19 11:08:18
Done.
| |
591 } | |
592 return &node.document(); | |
593 } | |
594 | |
571 DEFINE_TRACE(TreeScope) | 595 DEFINE_TRACE(TreeScope) |
572 { | 596 { |
573 visitor->trace(m_rootNode); | 597 visitor->trace(m_rootNode); |
574 visitor->trace(m_document); | 598 visitor->trace(m_document); |
575 visitor->trace(m_parentTreeScope); | 599 visitor->trace(m_parentTreeScope); |
600 visitor->trace(m_composedParent); | |
576 visitor->trace(m_idTargetObserverRegistry); | 601 visitor->trace(m_idTargetObserverRegistry); |
577 visitor->trace(m_selection); | 602 visitor->trace(m_selection); |
578 visitor->trace(m_elementsById); | 603 visitor->trace(m_elementsById); |
579 visitor->trace(m_imageMapsByName); | 604 visitor->trace(m_imageMapsByName); |
580 visitor->trace(m_labelsByForAttribute); | 605 visitor->trace(m_labelsByForAttribute); |
581 visitor->trace(m_scopedStyleResolver); | 606 visitor->trace(m_scopedStyleResolver); |
582 } | 607 } |
583 | 608 |
584 } // namespace blink | 609 } // namespace blink |
OLD | NEW |