本文整理汇总了C++中TreeScope类的典型用法代码示例。如果您正苦于以下问题:C++ TreeScope类的具体用法?C++ TreeScope怎么用?C++ TreeScope使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了TreeScope类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ASSERT
void TreeScope::setParentTreeScope(TreeScope& newParentScope)
{
// A document node cannot be re-parented.
ASSERT(!rootNode().isDocumentNode());
newParentScope.guardRef();
if (m_parentTreeScope)
m_parentTreeScope->guardDeref();
m_parentTreeScope = &newParentScope;
setDocument(newParentScope.document());
}
示例2: m_relatedNode
RelatedNodeRetargeter::RelatedNodeRetargeter(Node& relatedNode, Node& target)
: m_relatedNode(relatedNode)
, m_retargetedRelatedNode(&relatedNode)
{
auto& targetTreeScope = target.treeScope();
TreeScope* currentTreeScope = &m_relatedNode.treeScope();
if (LIKELY(currentTreeScope == &targetTreeScope && target.inDocument() && m_relatedNode.inDocument()))
return;
if (¤tTreeScope->documentScope() != &targetTreeScope.documentScope()) {
m_hasDifferentTreeRoot = true;
m_retargetedRelatedNode = nullptr;
return;
}
if (relatedNode.inDocument() != target.inDocument()) {
m_hasDifferentTreeRoot = true;
m_retargetedRelatedNode = moveOutOfAllShadowRoots(relatedNode);
return;
}
collectTreeScopes();
// FIXME: We should collect this while constructing the event path.
Vector<TreeScope*, 8> targetTreeScopeAncestors;
for (TreeScope* currentTreeScope = &targetTreeScope; currentTreeScope; currentTreeScope = currentTreeScope->parentTreeScope())
targetTreeScopeAncestors.append(currentTreeScope);
ASSERT_WITH_SECURITY_IMPLICATION(!targetTreeScopeAncestors.isEmpty());
unsigned i = m_ancestorTreeScopes.size();
unsigned j = targetTreeScopeAncestors.size();
ASSERT_WITH_SECURITY_IMPLICATION(m_ancestorTreeScopes.last() == targetTreeScopeAncestors.last());
while (m_ancestorTreeScopes[i - 1] == targetTreeScopeAncestors[j - 1]) {
i--;
j--;
if (!i || !j)
break;
}
bool lowestCommonAncestorIsDocumentScope = i + 1 == m_ancestorTreeScopes.size();
if (lowestCommonAncestorIsDocumentScope && !relatedNode.inDocument() && !target.inDocument()) {
Node& targetAncestorInDocumentScope = i ? *downcast<ShadowRoot>(m_ancestorTreeScopes[i - 1]->rootNode()).shadowHost() : target;
Node& relatedNodeAncestorInDocumentScope = j ? *downcast<ShadowRoot>(targetTreeScopeAncestors[j - 1]->rootNode()).shadowHost() : relatedNode;
if (targetAncestorInDocumentScope.rootNode() != relatedNodeAncestorInDocumentScope.rootNode()) {
m_hasDifferentTreeRoot = true;
m_retargetedRelatedNode = moveOutOfAllShadowRoots(relatedNode);
return;
}
}
m_lowestCommonAncestorIndex = i;
m_retargetedRelatedNode = nodeInLowestCommonAncestor();
}
示例3: updateLabel
void HTMLLabelElement::updateLabel(TreeScope& scope, const AtomicString& oldForAttributeValue, const AtomicString& newForAttributeValue)
{
if (!inDocument())
return;
if (oldForAttributeValue == newForAttributeValue)
return;
if (!oldForAttributeValue.isEmpty())
scope.removeLabel(oldForAttributeValue, this);
if (!newForAttributeValue.isEmpty())
scope.addLabel(newForAttributeValue, this);
}
示例4: ASSERT_WITH_SECURITY_IMPLICATION
void DocumentOrderedMap::add(const AtomicStringImpl& key, Element& element, const TreeScope& treeScope)
{
ASSERT_WITH_SECURITY_IMPLICATION(element.isInTreeScope());
ASSERT_WITH_SECURITY_IMPLICATION(treeScope.rootNode()->containsIncludingShadowDOM(&element));
if (!element.isInTreeScope() || &element.document() != treeScope.documentScope())
return;
Map::AddResult addResult = m_map.add(&key, MapEntry(&element));
if (addResult.isNewEntry)
return;
MapEntry& entry = addResult.iterator->value;
ASSERT_WITH_SECURITY_IMPLICATION(entry.count);
entry.element = 0;
entry.count++;
entry.orderedList.clear();
}
示例5: collectTreeScopes
void RelatedNodeRetargeter::moveToNewTreeScope(TreeScope* previousTreeScope, TreeScope& newTreeScope)
{
if (m_hasDifferentTreeRoot)
return;
auto& currentRelatedNodeScope = m_retargetedRelatedNode->treeScope();
if (previousTreeScope != ¤tRelatedNodeScope) {
// currentRelatedNode is still outside our shadow tree. New tree scope may contain currentRelatedNode
// but there is no need to re-target it. Moving into a slot (thereby a deeper shadow tree) doesn't matter.
return;
}
bool enteredSlot = newTreeScope.parentTreeScope() == previousTreeScope;
if (enteredSlot) {
if (m_lowestCommonAncestorIndex) {
if (m_ancestorTreeScopes.isEmpty())
collectTreeScopes();
bool relatedNodeIsInSlot = m_ancestorTreeScopes[m_lowestCommonAncestorIndex - 1] == &newTreeScope;
if (relatedNodeIsInSlot) {
m_lowestCommonAncestorIndex--;
m_retargetedRelatedNode = nodeInLowestCommonAncestor();
ASSERT(&newTreeScope == &m_retargetedRelatedNode->treeScope());
}
} else
ASSERT(m_retargetedRelatedNode == &m_relatedNode);
} else {
ASSERT(previousTreeScope->parentTreeScope() == &newTreeScope);
m_lowestCommonAncestorIndex++;
ASSERT_WITH_SECURITY_IMPLICATION(m_ancestorTreeScopes.isEmpty() || m_lowestCommonAncestorIndex < m_ancestorTreeScopes.size());
m_retargetedRelatedNode = downcast<ShadowRoot>(currentRelatedNodeScope.rootNode()).host();
ASSERT(&newTreeScope == &m_retargetedRelatedNode->treeScope());
}
}
示例6: ASSERT
void RelatedNodeRetargeter::collectTreeScopes()
{
ASSERT(m_ancestorTreeScopes.isEmpty());
for (TreeScope* currentTreeScope = &m_relatedNode.treeScope(); currentTreeScope; currentTreeScope = currentTreeScope->parentTreeScope())
m_ancestorTreeScopes.append(currentTreeScope);
ASSERT_WITH_SECURITY_IMPLICATION(!m_ancestorTreeScopes.isEmpty());
}
示例7: DCHECK
void TreeScope::setParentTreeScope(TreeScope& newParentScope) {
// A document node cannot be re-parented.
DCHECK(!rootNode().isDocumentNode());
m_parentTreeScope = &newParentScope;
setDocument(newParentScope.document());
}
示例8: UNUSED_PARAM
void DocumentOrderedMap::add(const AtomicStringImpl& key, Element& element, const TreeScope& treeScope)
{
UNUSED_PARAM(treeScope);
ASSERT_WITH_SECURITY_IMPLICATION(element.isInTreeScope());
ASSERT_WITH_SECURITY_IMPLICATION(treeScope.rootNode().containsIncludingShadowDOM(&element));
if (!element.isInTreeScope())
return;
Map::AddResult addResult = m_map.ensure(&key, [&element] {
return MapEntry(&element);
});
MapEntry& entry = addResult.iterator->value;
#if !ASSERT_DISABLED || ENABLE(SECURITY_ASSERTIONS)
ASSERT_WITH_SECURITY_IMPLICATION(!entry.registeredElements.contains(&element));
entry.registeredElements.add(&element);
#endif
if (addResult.isNewEntry)
return;
ASSERT_WITH_SECURITY_IMPLICATION(entry.count);
entry.element = nullptr;
entry.count++;
entry.orderedList.clear();
}
示例9: adjustPositionForStart
static Position adjustPositionForStart(const Position& currentPosition, Node* endContainerNode)
{
TreeScope* treeScope = endContainerNode->treeScope();
ASSERT(currentPosition.containerNode()->treeScope() != treeScope);
if (Node* ancestor = treeScope->ancestorInThisScope(currentPosition.containerNode())) {
if (ancestor->contains(endContainerNode))
return positionBeforeNode(ancestor);
return positionAfterNode(ancestor);
}
if (Node* firstChild = treeScope->rootNode()->firstChild())
return positionBeforeNode(firstChild);
return Position();
}
示例10:
TreeScopeEventContext::TreeScopeEventContext(TreeScope& treeScope)
: m_treeScope(treeScope)
, m_rootNode(treeScope.rootNode())
, m_containingClosedShadowTree(nullptr)
, m_preOrder(-1)
, m_postOrder(-1)
{
}
示例11: fragmentIdentifierFromIRIString
AtomicString SVGURIReference::fragmentIdentifierFromIRIString(
const String& urlString,
const TreeScope& treeScope) {
SVGURLReferenceResolver resolver(urlString, treeScope.document());
if (!resolver.isLocal())
return emptyAtom;
return resolver.fragmentIdentifier();
}
示例12: treeScope
void InsertionPoint::attach()
{
TreeScope* scope = treeScope();
if (scope->isShadowRoot()) {
ShadowRoot* root = toShadowRoot(scope);
if (doesSelectFromHostChildren()) {
distributeHostChildren(root->tree());
attachDistributedNode();
} else if (!root->olderShadowRoot()->assignedTo()) {
ASSERT(!root->olderShadowRoot()->attached());
assignShadowRoot(root->olderShadowRoot());
root->olderShadowRoot()->attach();
}
}
HTMLElement::attach();
}
示例13: ASSERT
EventTarget* EventPath::findRelatedNode(TreeScope& scope, RelatedTargetMap& relatedTargetMap)
{
WillBeHeapVector<RawPtrWillBeMember<TreeScope>, 32> parentTreeScopes;
EventTarget* relatedNode = 0;
for (TreeScope* current = &scope; current; current = current->olderShadowRootOrParentTreeScope()) {
parentTreeScopes.append(current);
RelatedTargetMap::const_iterator iter = relatedTargetMap.find(current);
if (iter != relatedTargetMap.end() && iter->value) {
relatedNode = iter->value;
break;
}
}
ASSERT(relatedNode);
for (WillBeHeapVector<RawPtrWillBeMember<TreeScope>, 32>::iterator iter = parentTreeScopes.begin(); iter < parentTreeScopes.end(); ++iter)
relatedTargetMap.add(*iter, relatedNode);
return relatedNode;
}
示例14: ASSERT
void TreeScope::setParentTreeScope(TreeScope& newParentScope)
{
// A document node cannot be re-parented.
ASSERT(!m_rootNode.isDocumentNode());
m_parentTreeScope = &newParentScope;
setDocumentScope(newParentScope.documentScope());
}
示例15: focusedFrameOwnerElement
Element* TreeScope::focusedElement()
{
Document& document = m_rootNode.document();
Element* element = document.focusedElement();
if (!element && document.page())
element = focusedFrameOwnerElement(document.page()->focusController().focusedFrame(), document.frame());
if (!element)
return nullptr;
TreeScope* treeScope = &element->treeScope();
while (treeScope != this && treeScope != &document) {
element = downcast<ShadowRoot>(treeScope->rootNode()).host();
treeScope = &element->treeScope();
}
if (this != treeScope)
return nullptr;
return element;
}