| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2012 Google Inc. All rights reserved. | 2 * Copyright (C) 2012 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * 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 * * Neither the name of Google Inc. nor the names of its | 10 * * Neither the name of Google Inc. nor the names of its |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 81 } | 81 } |
| 82 | 82 |
| 83 void DistributionPool::distributeTo(InsertionPoint* insertionPoint, ElementShado
w* elementShadow) | 83 void DistributionPool::distributeTo(InsertionPoint* insertionPoint, ElementShado
w* elementShadow) |
| 84 { | 84 { |
| 85 ContentDistribution distribution; | 85 ContentDistribution distribution; |
| 86 | 86 |
| 87 for (size_t i = 0; i < m_nodes.size(); ++i) { | 87 for (size_t i = 0; i < m_nodes.size(); ++i) { |
| 88 if (m_distributed[i]) | 88 if (m_distributed[i]) |
| 89 continue; | 89 continue; |
| 90 | 90 |
| 91 if (insertionPoint->hasTagName(HTMLNames::contentTag) && !toHTMLContentE
lement(insertionPoint)->canSelectNode(m_nodes, i)) | 91 if (isHTMLContentElement(*insertionPoint) && !toHTMLContentElement(inser
tionPoint)->canSelectNode(m_nodes, i)) |
| 92 continue; | 92 continue; |
| 93 | 93 |
| 94 Node* node = m_nodes[i]; | 94 Node* node = m_nodes[i]; |
| 95 distribution.append(node); | 95 distribution.append(node); |
| 96 elementShadow->didDistributeNode(node, insertionPoint); | 96 elementShadow->didDistributeNode(node, insertionPoint); |
| 97 m_distributed[i] = true; | 97 m_distributed[i] = true; |
| 98 } | 98 } |
| 99 | 99 |
| 100 // Distributes fallback elements | 100 // Distributes fallback elements |
| 101 if (insertionPoint->isContentInsertionPoint() && distribution.isEmpty()) { | 101 if (insertionPoint->isContentInsertionPoint() && distribution.isEmpty()) { |
| (...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 295 Vector<HTMLShadowElement*, 32> shadowInsertionPoints; | 295 Vector<HTMLShadowElement*, 32> shadowInsertionPoints; |
| 296 DistributionPool pool(*host()); | 296 DistributionPool pool(*host()); |
| 297 | 297 |
| 298 for (ShadowRoot* root = youngestShadowRoot(); root; root = root->olderShadow
Root()) { | 298 for (ShadowRoot* root = youngestShadowRoot(); root; root = root->olderShadow
Root()) { |
| 299 HTMLShadowElement* shadowInsertionPoint = 0; | 299 HTMLShadowElement* shadowInsertionPoint = 0; |
| 300 const Vector<RefPtr<InsertionPoint> >& insertionPoints = root->descendan
tInsertionPoints(); | 300 const Vector<RefPtr<InsertionPoint> >& insertionPoints = root->descendan
tInsertionPoints(); |
| 301 for (size_t i = 0; i < insertionPoints.size(); ++i) { | 301 for (size_t i = 0; i < insertionPoints.size(); ++i) { |
| 302 InsertionPoint* point = insertionPoints[i].get(); | 302 InsertionPoint* point = insertionPoints[i].get(); |
| 303 if (!point->isActive()) | 303 if (!point->isActive()) |
| 304 continue; | 304 continue; |
| 305 if (point->hasTagName(HTMLNames::shadowTag)) { | 305 if (isHTMLShadowElement(*point)) { |
| 306 ASSERT(!shadowInsertionPoint); | 306 ASSERT(!shadowInsertionPoint); |
| 307 shadowInsertionPoint = toHTMLShadowElement(point); | 307 shadowInsertionPoint = toHTMLShadowElement(point); |
| 308 shadowInsertionPoints.append(shadowInsertionPoint); | 308 shadowInsertionPoints.append(shadowInsertionPoint); |
| 309 } else { | 309 } else { |
| 310 pool.distributeTo(point, this); | 310 pool.distributeTo(point, this); |
| 311 if (ElementShadow* shadow = shadowWhereNodeCanBeDistributed(*poi
nt)) | 311 if (ElementShadow* shadow = shadowWhereNodeCanBeDistributed(*poi
nt)) |
| 312 shadow->setNeedsDistributionRecalc(); | 312 shadow->setNeedsDistributionRecalc(); |
| 313 } | 313 } |
| 314 } | 314 } |
| 315 } | 315 } |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 351 } | 351 } |
| 352 | 352 |
| 353 void ElementShadow::collectSelectFeatureSetFrom(ShadowRoot& root) | 353 void ElementShadow::collectSelectFeatureSetFrom(ShadowRoot& root) |
| 354 { | 354 { |
| 355 if (!root.containsShadowRoots() && !root.containsContentElements()) | 355 if (!root.containsShadowRoots() && !root.containsContentElements()) |
| 356 return; | 356 return; |
| 357 | 357 |
| 358 for (Element* element = ElementTraversal::firstWithin(root); element; elemen
t = ElementTraversal::next(*element, &root)) { | 358 for (Element* element = ElementTraversal::firstWithin(root); element; elemen
t = ElementTraversal::next(*element, &root)) { |
| 359 if (ElementShadow* shadow = element->shadow()) | 359 if (ElementShadow* shadow = element->shadow()) |
| 360 m_selectFeatures.add(shadow->ensureSelectFeatureSet()); | 360 m_selectFeatures.add(shadow->ensureSelectFeatureSet()); |
| 361 if (!element->hasTagName(HTMLNames::contentTag)) | 361 if (!isHTMLContentElement(*element)) |
| 362 continue; | 362 continue; |
| 363 const CSSSelectorList& list = toHTMLContentElement(element)->selectorLis
t(); | 363 const CSSSelectorList& list = toHTMLContentElement(*element).selectorLis
t(); |
| 364 for (const CSSSelector* selector = list.first(); selector; selector = CS
SSelectorList::next(*selector)) { | 364 for (const CSSSelector* selector = list.first(); selector; selector = CS
SSelectorList::next(*selector)) { |
| 365 for (const CSSSelector* component = selector; component; component =
component->tagHistory()) | 365 for (const CSSSelector* component = selector; component; component =
component->tagHistory()) |
| 366 m_selectFeatures.collectFeaturesFromSelector(*component); | 366 m_selectFeatures.collectFeaturesFromSelector(*component); |
| 367 } | 367 } |
| 368 } | 368 } |
| 369 } | 369 } |
| 370 | 370 |
| 371 void ElementShadow::didAffectSelector(AffectedSelectorMask mask) | 371 void ElementShadow::didAffectSelector(AffectedSelectorMask mask) |
| 372 { | 372 { |
| 373 if (ensureSelectFeatureSet().hasSelectorFor(mask)) | 373 if (ensureSelectFeatureSet().hasSelectorFor(mask)) |
| (...skipping 12 matching lines...) Expand all Loading... |
| 386 | 386 |
| 387 void ElementShadow::clearDistribution() | 387 void ElementShadow::clearDistribution() |
| 388 { | 388 { |
| 389 m_nodeToInsertionPoints.clear(); | 389 m_nodeToInsertionPoints.clear(); |
| 390 | 390 |
| 391 for (ShadowRoot* root = youngestShadowRoot(); root; root = root->olderShadow
Root()) | 391 for (ShadowRoot* root = youngestShadowRoot(); root; root = root->olderShadow
Root()) |
| 392 root->setShadowInsertionPointOfYoungerShadowRoot(nullptr); | 392 root->setShadowInsertionPointOfYoungerShadowRoot(nullptr); |
| 393 } | 393 } |
| 394 | 394 |
| 395 } // namespace | 395 } // namespace |
| OLD | NEW |