Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(31)

Side by Side Diff: third_party/WebKit/Source/core/dom/shadow/ElementShadow.cpp

Issue 1884333002: Remove OILPAN from core/dom/shadow/ (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
135 } 135 }
136 136
137 ElementShadow::ElementShadow() 137 ElementShadow::ElementShadow()
138 : m_needsDistributionRecalc(false) 138 : m_needsDistributionRecalc(false)
139 , m_needsSelectFeatureSet(false) 139 , m_needsSelectFeatureSet(false)
140 { 140 {
141 } 141 }
142 142
143 ElementShadow::~ElementShadow() 143 ElementShadow::~ElementShadow()
144 { 144 {
145 #if !ENABLE(OILPAN)
146 removeDetachedShadowRoots();
147 #endif
148 } 145 }
149 146
150 ShadowRoot& ElementShadow::addShadowRoot(Element& shadowHost, ShadowRootType typ e) 147 ShadowRoot& ElementShadow::addShadowRoot(Element& shadowHost, ShadowRootType typ e)
151 { 148 {
152 EventDispatchForbiddenScope assertNoEventDispatch; 149 EventDispatchForbiddenScope assertNoEventDispatch;
153 ScriptForbiddenScope forbidScript; 150 ScriptForbiddenScope forbidScript;
154 151
155 if (type == ShadowRootType::V0) { 152 if (type == ShadowRootType::V0) {
156 if (m_shadowRoots.isEmpty()) { 153 if (m_shadowRoots.isEmpty()) {
157 shadowHost.willAddFirstAuthorShadowRoot(); 154 shadowHost.willAddFirstAuthorShadowRoot();
(...skipping 18 matching lines...) Expand all
176 173
177 shadowRoot->insertedInto(&shadowHost); 174 shadowRoot->insertedInto(&shadowHost);
178 shadowHost.setChildNeedsStyleRecalc(); 175 shadowHost.setChildNeedsStyleRecalc();
179 shadowHost.setNeedsStyleRecalc(SubtreeStyleChange, StyleChangeReasonForTraci ng::create(StyleChangeReason::Shadow)); 176 shadowHost.setNeedsStyleRecalc(SubtreeStyleChange, StyleChangeReasonForTraci ng::create(StyleChangeReason::Shadow));
180 177
181 InspectorInstrumentation::didPushShadowRoot(&shadowHost, shadowRoot); 178 InspectorInstrumentation::didPushShadowRoot(&shadowHost, shadowRoot);
182 179
183 return *shadowRoot; 180 return *shadowRoot;
184 } 181 }
185 182
186 #if !ENABLE(OILPAN)
187 void ElementShadow::removeDetachedShadowRoots()
188 {
189 // Dont protect this ref count.
190 Element* shadowHost = host();
191 DCHECK(shadowHost);
192
193 while (ShadowRoot* oldRoot = m_shadowRoots.head()) {
194 InspectorInstrumentation::willPopShadowRoot(shadowHost, oldRoot);
195 shadowHost->document().removeFocusedElementOfSubtree(oldRoot);
196 m_shadowRoots.removeHead();
197 oldRoot->setParentOrShadowHostNode(0);
198 oldRoot->setParentTreeScope(shadowHost->document());
199 oldRoot->setPrev(0);
200 oldRoot->setNext(0);
201 }
202 }
203 #endif
204
205 void ElementShadow::attach(const Node::AttachContext& context) 183 void ElementShadow::attach(const Node::AttachContext& context)
206 { 184 {
207 Node::AttachContext childrenContext(context); 185 Node::AttachContext childrenContext(context);
208 childrenContext.resolvedStyle = 0; 186 childrenContext.resolvedStyle = 0;
209 187
210 for (ShadowRoot* root = &youngestShadowRoot(); root; root = root->olderShado wRoot()) { 188 for (ShadowRoot* root = &youngestShadowRoot(); root; root = root->olderShado wRoot()) {
211 if (root->needsAttach()) 189 if (root->needsAttach())
212 root->attach(childrenContext); 190 root->attach(childrenContext);
213 } 191 }
214 } 192 }
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
256 return true; 234 return true;
257 } 235 }
258 236
259 const InsertionPoint* ElementShadow::finalDestinationInsertionPointFor(const Nod e* key) const 237 const InsertionPoint* ElementShadow::finalDestinationInsertionPointFor(const Nod e* key) const
260 { 238 {
261 DCHECK(key); 239 DCHECK(key);
262 #if DCHECK_IS_ON() 240 #if DCHECK_IS_ON()
263 DCHECK(!key->needsDistributionRecalc()); 241 DCHECK(!key->needsDistributionRecalc());
264 #endif 242 #endif
265 NodeToDestinationInsertionPoints::const_iterator it = m_nodeToInsertionPoint s.find(key); 243 NodeToDestinationInsertionPoints::const_iterator it = m_nodeToInsertionPoint s.find(key);
266 #if ENABLE(OILPAN) 244 return it == m_nodeToInsertionPoints.end() ? nullptr : it->value->last();
267 return it == m_nodeToInsertionPoints.end() ? nullptr : it->value->last().get ();
268 #else
269 return it == m_nodeToInsertionPoints.end() ? nullptr : it->value.last().get( );
270 #endif
271 } 245 }
272 246
273 const DestinationInsertionPoints* ElementShadow::destinationInsertionPointsFor(c onst Node* key) const 247 const DestinationInsertionPoints* ElementShadow::destinationInsertionPointsFor(c onst Node* key) const
274 { 248 {
275 DCHECK(key); 249 DCHECK(key);
276 #if DCHECK_IS_ON() 250 #if DCHECK_IS_ON()
277 DCHECK(!key->needsDistributionRecalc()); 251 DCHECK(!key->needsDistributionRecalc());
278 #endif 252 #endif
279 NodeToDestinationInsertionPoints::const_iterator it = m_nodeToInsertionPoint s.find(key); 253 NodeToDestinationInsertionPoints::const_iterator it = m_nodeToInsertionPoint s.find(key);
280 #if ENABLE(OILPAN) 254 return it == m_nodeToInsertionPoints.end() ? nullptr : it->value;
281 return it == m_nodeToInsertionPoints.end() ? nullptr : it->value.get();
282 #else
283 return it == m_nodeToInsertionPoints.end() ? nullptr : &it->value;
284 #endif
285 } 255 }
286 256
287 void ElementShadow::distribute() 257 void ElementShadow::distribute()
288 { 258 {
289 if (isV1()) 259 if (isV1())
290 youngestShadowRoot().distributeV1(); 260 youngestShadowRoot().distributeV1();
291 else 261 else
292 distributeV0(); 262 distributeV0();
293 } 263 }
294 264
295 void ElementShadow::distributeV0() 265 void ElementShadow::distributeV0()
296 { 266 {
297 HeapVector<Member<HTMLShadowElement>, 32> shadowInsertionPoints; 267 HeapVector<Member<HTMLShadowElement>, 32> shadowInsertionPoints;
298 DistributionPool pool(*host()); 268 DistributionPool pool(*host());
299 269
300 for (ShadowRoot* root = &youngestShadowRoot(); root; root = root->olderShado wRoot()) { 270 for (ShadowRoot* root = &youngestShadowRoot(); root; root = root->olderShado wRoot()) {
301 HTMLShadowElement* shadowInsertionPoint = 0; 271 HTMLShadowElement* shadowInsertionPoint = 0;
302 const HeapVector<Member<InsertionPoint>>& insertionPoints = root->descen dantInsertionPoints(); 272 const HeapVector<Member<InsertionPoint>>& insertionPoints = root->descen dantInsertionPoints();
303 for (size_t i = 0; i < insertionPoints.size(); ++i) { 273 for (size_t i = 0; i < insertionPoints.size(); ++i) {
304 InsertionPoint* point = insertionPoints[i].get(); 274 InsertionPoint* point = insertionPoints[i];
305 if (!point->isActive()) 275 if (!point->isActive())
306 continue; 276 continue;
307 if (isHTMLShadowElement(*point)) { 277 if (isHTMLShadowElement(*point)) {
308 DCHECK(!shadowInsertionPoint); 278 DCHECK(!shadowInsertionPoint);
309 shadowInsertionPoint = toHTMLShadowElement(point); 279 shadowInsertionPoint = toHTMLShadowElement(point);
310 shadowInsertionPoints.append(shadowInsertionPoint); 280 shadowInsertionPoints.append(shadowInsertionPoint);
311 } else { 281 } else {
312 pool.distributeTo(point, this); 282 pool.distributeTo(point, this);
313 if (ElementShadow* shadow = shadowWhereNodeCanBeDistributed(*poi nt)) 283 if (ElementShadow* shadow = shadowWhereNodeCanBeDistributed(*poi nt))
314 shadow->setNeedsDistributionRecalc(); 284 shadow->setNeedsDistributionRecalc();
(...skipping 15 matching lines...) Expand all
330 root->olderShadowRoot()->setShadowInsertionPointOfYoungerShadowRoot( shadowInsertionPoint); 300 root->olderShadowRoot()->setShadowInsertionPointOfYoungerShadowRoot( shadowInsertionPoint);
331 } 301 }
332 if (ElementShadow* shadow = shadowWhereNodeCanBeDistributed(*shadowInser tionPoint)) 302 if (ElementShadow* shadow = shadowWhereNodeCanBeDistributed(*shadowInser tionPoint))
333 shadow->setNeedsDistributionRecalc(); 303 shadow->setNeedsDistributionRecalc();
334 } 304 }
335 InspectorInstrumentation::didPerformElementShadowDistribution(host()); 305 InspectorInstrumentation::didPerformElementShadowDistribution(host());
336 } 306 }
337 307
338 void ElementShadow::didDistributeNode(const Node* node, InsertionPoint* insertio nPoint) 308 void ElementShadow::didDistributeNode(const Node* node, InsertionPoint* insertio nPoint)
339 { 309 {
340 #if ENABLE(OILPAN)
341 NodeToDestinationInsertionPoints::AddResult result = m_nodeToInsertionPoints .add(node, nullptr); 310 NodeToDestinationInsertionPoints::AddResult result = m_nodeToInsertionPoints .add(node, nullptr);
342 if (result.isNewEntry) 311 if (result.isNewEntry)
343 result.storedValue->value = new DestinationInsertionPoints(); 312 result.storedValue->value = new DestinationInsertionPoints;
344 result.storedValue->value->append(insertionPoint); 313 result.storedValue->value->append(insertionPoint);
345 #else
346 NodeToDestinationInsertionPoints::AddResult result = m_nodeToInsertionPoints .add(node, DestinationInsertionPoints());
347 result.storedValue->value.append(insertionPoint);
348 #endif
349 } 314 }
350 315
351 const SelectRuleFeatureSet& ElementShadow::ensureSelectFeatureSet() 316 const SelectRuleFeatureSet& ElementShadow::ensureSelectFeatureSet()
352 { 317 {
353 if (!m_needsSelectFeatureSet) 318 if (!m_needsSelectFeatureSet)
354 return m_selectFeatures; 319 return m_selectFeatures;
355 320
356 m_selectFeatures.clear(); 321 m_selectFeatures.clear();
357 for (ShadowRoot* root = oldestShadowRoot(); root; root = root->youngerShadow Root()) 322 for (ShadowRoot* root = oldestShadowRoot(); root; root = root->youngerShadow Root())
358 collectSelectFeatureSetFrom(*root); 323 collectSelectFeatureSetFrom(*root);
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
397 { 362 {
398 visitor->trace(m_nodeToInsertionPoints); 363 visitor->trace(m_nodeToInsertionPoints);
399 visitor->trace(m_selectFeatures); 364 visitor->trace(m_selectFeatures);
400 // Shadow roots are linked with previous and next pointers which are traced. 365 // Shadow roots are linked with previous and next pointers which are traced.
401 // It is therefore enough to trace one of the shadow roots here and the 366 // It is therefore enough to trace one of the shadow roots here and the
402 // rest will be traced from there. 367 // rest will be traced from there.
403 visitor->trace(m_shadowRoots.head()); 368 visitor->trace(m_shadowRoots.head());
404 } 369 }
405 370
406 } // namespace blink 371 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698