| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2011 Google Inc. All rights reserved. | 2 * Copyright (C) 2011 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 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 54 | 54 |
| 55 ShadowRoot::ShadowRoot(Document& document, ShadowRootType type) | 55 ShadowRoot::ShadowRoot(Document& document, ShadowRootType type) |
| 56 : DocumentFragment(0, CreateShadowRoot) | 56 : DocumentFragment(0, CreateShadowRoot) |
| 57 , TreeScope(*this, document) | 57 , TreeScope(*this, document) |
| 58 , m_numberOfStyles(0) | 58 , m_numberOfStyles(0) |
| 59 , m_childShadowRootCount(0) | 59 , m_childShadowRootCount(0) |
| 60 , m_type(static_cast<unsigned>(type)) | 60 , m_type(static_cast<unsigned>(type)) |
| 61 , m_registeredWithParentShadowRoot(false) | 61 , m_registeredWithParentShadowRoot(false) |
| 62 , m_descendantInsertionPointsIsValid(false) | 62 , m_descendantInsertionPointsIsValid(false) |
| 63 , m_delegatesFocus(false) | 63 , m_delegatesFocus(false) |
| 64 , m_descendantSlotsIsValid(false) | |
| 65 { | 64 { |
| 66 } | 65 } |
| 67 | 66 |
| 68 ShadowRoot::~ShadowRoot() | 67 ShadowRoot::~ShadowRoot() |
| 69 { | 68 { |
| 70 } | 69 } |
| 71 | 70 |
| 72 ShadowRoot* ShadowRoot::youngerShadowRoot() const | 71 ShadowRoot* ShadowRoot::youngerShadowRoot() const |
| 73 { | 72 { |
| 74 if (type() == ShadowRootType::V0 && m_shadowRootRareDataV0) | 73 if (type() == ShadowRootType::V0 && m_shadowRootRareDataV0) |
| (...skipping 25 matching lines...) Expand all Loading... |
| 100 | 99 |
| 101 void ShadowRoot::setOlderShadowRoot(ShadowRoot& root) | 100 void ShadowRoot::setOlderShadowRoot(ShadowRoot& root) |
| 102 { | 101 { |
| 103 DCHECK_EQ(type(), ShadowRootType::V0); | 102 DCHECK_EQ(type(), ShadowRootType::V0); |
| 104 ensureShadowRootRareDataV0().setOlderShadowRoot(root); | 103 ensureShadowRootRareDataV0().setOlderShadowRoot(root); |
| 105 } | 104 } |
| 106 | 105 |
| 107 SlotAssignment& ShadowRoot::ensureSlotAssignment() | 106 SlotAssignment& ShadowRoot::ensureSlotAssignment() |
| 108 { | 107 { |
| 109 if (!m_slotAssignment) | 108 if (!m_slotAssignment) |
| 110 m_slotAssignment = SlotAssignment::create(); | 109 m_slotAssignment = SlotAssignment::create(*this); |
| 111 return *m_slotAssignment; | 110 return *m_slotAssignment; |
| 112 } | 111 } |
| 113 | 112 |
| 114 HTMLSlotElement* ShadowRoot::assignedSlotFor(const Node& node) const | |
| 115 { | |
| 116 DCHECK(m_slotAssignment); | |
| 117 return m_slotAssignment->assignedSlotFor(node); | |
| 118 } | |
| 119 | |
| 120 Node* ShadowRoot::cloneNode(bool, ExceptionState& exceptionState) | 113 Node* ShadowRoot::cloneNode(bool, ExceptionState& exceptionState) |
| 121 { | 114 { |
| 122 exceptionState.throwDOMException(NotSupportedError, "ShadowRoot nodes are no
t clonable."); | 115 exceptionState.throwDOMException(NotSupportedError, "ShadowRoot nodes are no
t clonable."); |
| 123 return nullptr; | 116 return nullptr; |
| 124 } | 117 } |
| 125 | 118 |
| 126 String ShadowRoot::innerHTML() const | 119 String ShadowRoot::innerHTML() const |
| 127 { | 120 { |
| 128 return createMarkup(this, ChildrenOnly); | 121 return createMarkup(this, ChildrenOnly); |
| 129 } | 122 } |
| (...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 298 return m_shadowRootRareDataV0->descendantInsertionPoints(); | 291 return m_shadowRootRareDataV0->descendantInsertionPoints(); |
| 299 } | 292 } |
| 300 | 293 |
| 301 StyleSheetList& ShadowRoot::styleSheets() | 294 StyleSheetList& ShadowRoot::styleSheets() |
| 302 { | 295 { |
| 303 if (!m_styleSheetList) | 296 if (!m_styleSheetList) |
| 304 setStyleSheets(StyleSheetList::create(this)); | 297 setStyleSheets(StyleSheetList::create(this)); |
| 305 return *m_styleSheetList; | 298 return *m_styleSheetList; |
| 306 } | 299 } |
| 307 | 300 |
| 308 void ShadowRoot::didAddSlot() | |
| 309 { | |
| 310 ensureSlotAssignment().didAddSlot(); | |
| 311 invalidateDescendantSlots(); | |
| 312 } | |
| 313 | |
| 314 void ShadowRoot::didRemoveSlot() | |
| 315 { | |
| 316 DCHECK(m_slotAssignment); | |
| 317 m_slotAssignment->didRemoveSlot(); | |
| 318 invalidateDescendantSlots(); | |
| 319 } | |
| 320 | |
| 321 void ShadowRoot::invalidateDescendantSlots() | |
| 322 { | |
| 323 DCHECK(m_slotAssignment); | |
| 324 m_descendantSlotsIsValid = false; | |
| 325 m_slotAssignment->clearDescendantSlots(); | |
| 326 } | |
| 327 | |
| 328 unsigned ShadowRoot::descendantSlotCount() const | |
| 329 { | |
| 330 return m_slotAssignment ? m_slotAssignment->descendantSlotCount() : 0; | |
| 331 } | |
| 332 | |
| 333 const HeapVector<Member<HTMLSlotElement>>& ShadowRoot::descendantSlots() | |
| 334 { | |
| 335 DEFINE_STATIC_LOCAL(HeapVector<Member<HTMLSlotElement>>, emptyList, (new Hea
pVector<Member<HTMLSlotElement>>)); | |
| 336 if (m_descendantSlotsIsValid) { | |
| 337 DCHECK(m_slotAssignment); | |
| 338 return m_slotAssignment->descendantSlots(); | |
| 339 } | |
| 340 if (descendantSlotCount() == 0) | |
| 341 return emptyList; | |
| 342 | |
| 343 DCHECK(m_slotAssignment); | |
| 344 HeapVector<Member<HTMLSlotElement>> slots; | |
| 345 slots.reserveCapacity(descendantSlotCount()); | |
| 346 for (HTMLSlotElement& slot : Traversal<HTMLSlotElement>::descendantsOf(rootN
ode())) | |
| 347 slots.append(&slot); | |
| 348 m_slotAssignment->setDescendantSlots(slots); | |
| 349 m_descendantSlotsIsValid = true; | |
| 350 return m_slotAssignment->descendantSlots(); | |
| 351 } | |
| 352 | |
| 353 void ShadowRoot::assignV1() | |
| 354 { | |
| 355 if (!m_slotAssignment) | |
| 356 m_slotAssignment = SlotAssignment::create(); | |
| 357 m_slotAssignment->resolveAssignment(*this); | |
| 358 } | |
| 359 | |
| 360 void ShadowRoot::distributeV1() | 301 void ShadowRoot::distributeV1() |
| 361 { | 302 { |
| 362 if (!m_slotAssignment) | 303 ensureSlotAssignment().resolveDistribution(); |
| 363 m_slotAssignment = SlotAssignment::create(); | |
| 364 m_slotAssignment->resolveDistribution(*this); | |
| 365 } | 304 } |
| 366 | 305 |
| 367 DEFINE_TRACE(ShadowRoot) | 306 DEFINE_TRACE(ShadowRoot) |
| 368 { | 307 { |
| 369 visitor->trace(m_shadowRootRareDataV0); | 308 visitor->trace(m_shadowRootRareDataV0); |
| 370 visitor->trace(m_slotAssignment); | 309 visitor->trace(m_slotAssignment); |
| 371 visitor->trace(m_styleSheetList); | 310 visitor->trace(m_styleSheetList); |
| 372 TreeScope::trace(visitor); | 311 TreeScope::trace(visitor); |
| 373 DocumentFragment::trace(visitor); | 312 DocumentFragment::trace(visitor); |
| 374 } | 313 } |
| (...skipping 17 matching lines...) Expand all Loading... |
| 392 ostream << "ShadowRootType::Open"; | 331 ostream << "ShadowRootType::Open"; |
| 393 break; | 332 break; |
| 394 case ShadowRootType::Closed: | 333 case ShadowRootType::Closed: |
| 395 ostream << "ShadowRootType::Closed"; | 334 ostream << "ShadowRootType::Closed"; |
| 396 break; | 335 break; |
| 397 } | 336 } |
| 398 return ostream; | 337 return ostream; |
| 399 } | 338 } |
| 400 | 339 |
| 401 } // namespace blink | 340 } // namespace blink |
| OLD | NEW |