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 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
119 | 119 |
120 void ShadowRoot::attach(const AttachContext& context) | 120 void ShadowRoot::attach(const AttachContext& context) |
121 { | 121 { |
122 StyleSharingDepthScope sharingScope(*this); | 122 StyleSharingDepthScope sharingScope(*this); |
123 DocumentFragment::attach(context); | 123 DocumentFragment::attach(context); |
124 } | 124 } |
125 | 125 |
126 Node::InsertionNotificationRequest ShadowRoot::insertedInto(ContainerNode* inser
tionPoint) | 126 Node::InsertionNotificationRequest ShadowRoot::insertedInto(ContainerNode* inser
tionPoint) |
127 { | 127 { |
128 DocumentFragment::insertedInto(insertionPoint); | 128 DocumentFragment::insertedInto(insertionPoint); |
| 129 if (isV1()) |
| 130 document().updateAssignment(); |
129 | 131 |
130 if (!insertionPoint->inShadowIncludingDocument() || !isOldest()) | 132 if (!insertionPoint->inShadowIncludingDocument() || !isOldest()) |
131 return InsertionDone; | 133 return InsertionDone; |
132 | 134 |
133 // FIXME: When parsing <video controls>, insertedInto() is called many times
without invoking removedFrom. | 135 // FIXME: When parsing <video controls>, insertedInto() is called many times
without invoking removedFrom. |
134 // For now, we check m_registeredWithParentShadowroot. We would like to DCHE
CK(!m_registeredShadowRoot) here. | 136 // For now, we check m_registeredWithParentShadowroot. We would like to DCHE
CK(!m_registeredShadowRoot) here. |
135 // https://bugs.webkit.org/show_bug.cig?id=101316 | 137 // https://bugs.webkit.org/show_bug.cig?id=101316 |
136 if (m_registeredWithParentShadowRoot) | 138 if (m_registeredWithParentShadowRoot) |
137 return InsertionDone; | 139 return InsertionDone; |
138 | 140 |
139 if (ShadowRoot* root = host()->containingShadowRoot()) { | 141 if (ShadowRoot* root = host()->containingShadowRoot()) { |
140 root->addChildShadowRoot(); | 142 root->addChildShadowRoot(); |
141 m_registeredWithParentShadowRoot = true; | 143 m_registeredWithParentShadowRoot = true; |
142 } | 144 } |
143 | 145 |
| 146 |
144 return InsertionDone; | 147 return InsertionDone; |
145 } | 148 } |
146 | 149 |
147 void ShadowRoot::removedFrom(ContainerNode* insertionPoint) | 150 void ShadowRoot::removedFrom(ContainerNode* insertionPoint) |
148 { | 151 { |
149 if (insertionPoint->inShadowIncludingDocument()) { | 152 if (insertionPoint->inShadowIncludingDocument()) { |
150 document().styleEngine().shadowRootRemovedFromDocument(this); | 153 document().styleEngine().shadowRootRemovedFromDocument(this); |
151 if (m_registeredWithParentShadowRoot) { | 154 if (m_registeredWithParentShadowRoot) { |
152 ShadowRoot* root = host()->containingShadowRoot(); | 155 ShadowRoot* root = host()->containingShadowRoot(); |
153 if (!root) | 156 if (!root) |
154 root = insertionPoint->containingShadowRoot(); | 157 root = insertionPoint->containingShadowRoot(); |
155 if (root) | 158 if (root) |
156 root->removeChildShadowRoot(); | 159 root->removeChildShadowRoot(); |
157 m_registeredWithParentShadowRoot = false; | 160 m_registeredWithParentShadowRoot = false; |
158 } | 161 } |
159 } | 162 } |
160 | 163 |
161 DocumentFragment::removedFrom(insertionPoint); | 164 DocumentFragment::removedFrom(insertionPoint); |
162 } | 165 } |
163 | 166 |
164 void ShadowRoot::childrenChanged(const ChildrenChange& change) | 167 void ShadowRoot::childrenChanged(const ChildrenChange& change) |
165 { | 168 { |
166 ContainerNode::childrenChanged(change); | 169 ContainerNode::childrenChanged(change); |
167 | 170 |
168 if (change.isChildElementChange()) | 171 if (change.isChildElementChange()) |
169 checkForSiblingStyleChanges(change.type == ElementRemoved ? SiblingEleme
ntRemoved : SiblingElementInserted, change.siblingBeforeChange, change.siblingAf
terChange); | 172 checkForSiblingStyleChanges(change.type == ElementRemoved ? SiblingEleme
ntRemoved : SiblingElementInserted, change.siblingBeforeChange, change.siblingAf
terChange); |
170 | 173 |
171 if (InsertionPoint* point = shadowInsertionPointOfYoungerShadowRoot()) { | 174 if (InsertionPoint* point = shadowInsertionPointOfYoungerShadowRoot()) { |
172 if (ShadowRoot* root = point->containingShadowRoot()) | 175 if (ShadowRoot* root = point->containingShadowRoot()) { |
173 root->owner()->setNeedsDistributionRecalc(); | 176 root->owner()->setNeedsDistributionRecalc(); |
| 177 if (document().shadowCascadeOrder() == ShadowCascadeOrder::ShadowCas
cadeV1) |
| 178 document().updateAssignment(); |
| 179 } |
174 } | 180 } |
175 } | 181 } |
176 | 182 |
177 void ShadowRoot::registerScopedHTMLStyleChild() | 183 void ShadowRoot::registerScopedHTMLStyleChild() |
178 { | 184 { |
179 ++m_numberOfStyles; | 185 ++m_numberOfStyles; |
180 } | 186 } |
181 | 187 |
182 void ShadowRoot::unregisterScopedHTMLStyleChild() | 188 void ShadowRoot::unregisterScopedHTMLStyleChild() |
183 { | 189 { |
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
327 DCHECK(m_shadowRootRareData); | 333 DCHECK(m_shadowRootRareData); |
328 HeapVector<Member<HTMLSlotElement>> slots; | 334 HeapVector<Member<HTMLSlotElement>> slots; |
329 slots.reserveCapacity(descendantSlotCount()); | 335 slots.reserveCapacity(descendantSlotCount()); |
330 for (HTMLSlotElement& slot : Traversal<HTMLSlotElement>::descendantsOf(rootN
ode())) | 336 for (HTMLSlotElement& slot : Traversal<HTMLSlotElement>::descendantsOf(rootN
ode())) |
331 slots.append(&slot); | 337 slots.append(&slot); |
332 m_shadowRootRareData->setDescendantSlots(slots); | 338 m_shadowRootRareData->setDescendantSlots(slots); |
333 m_descendantSlotsIsValid = true; | 339 m_descendantSlotsIsValid = true; |
334 return m_shadowRootRareData->descendantSlots(); | 340 return m_shadowRootRareData->descendantSlots(); |
335 } | 341 } |
336 | 342 |
| 343 void ShadowRoot::assignV1() |
| 344 { |
| 345 if (!m_slotAssignment) |
| 346 m_slotAssignment = SlotAssignment::create(); |
| 347 m_slotAssignment->resolveAssignment(*this); |
| 348 } |
| 349 |
337 void ShadowRoot::distributeV1() | 350 void ShadowRoot::distributeV1() |
338 { | 351 { |
339 if (!m_slotAssignment) | 352 if (!m_slotAssignment) |
340 m_slotAssignment = SlotAssignment::create(); | 353 m_slotAssignment = SlotAssignment::create(); |
341 m_slotAssignment->resolveAssignment(*this); | 354 m_slotAssignment->resolveDistribution(*this); |
342 } | 355 } |
343 | 356 |
344 DEFINE_TRACE(ShadowRoot) | 357 DEFINE_TRACE(ShadowRoot) |
345 { | 358 { |
346 visitor->trace(m_prev); | 359 visitor->trace(m_prev); |
347 visitor->trace(m_next); | 360 visitor->trace(m_next); |
348 visitor->trace(m_shadowRootRareData); | 361 visitor->trace(m_shadowRootRareData); |
349 visitor->trace(m_slotAssignment); | 362 visitor->trace(m_slotAssignment); |
350 TreeScope::trace(visitor); | 363 TreeScope::trace(visitor); |
351 DocumentFragment::trace(visitor); | 364 DocumentFragment::trace(visitor); |
352 } | 365 } |
353 | 366 |
354 } // namespace blink | 367 } // namespace blink |
OLD | NEW |