OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
4 * (C) 2001 Dirk Mueller (mueller@kde.org) | 4 * (C) 2001 Dirk Mueller (mueller@kde.org) |
5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org) | 5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org) |
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All | 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All |
7 * rights reserved. | 7 * rights reserved. |
8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. | 8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. |
9 * (http://www.torchmobile.com/) | 9 * (http://www.torchmobile.com/) |
10 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved. | 10 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved. |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
144 } | 144 } |
145 | 145 |
146 CSSStyleSheet& StyleEngine::ensureInspectorStyleSheet() { | 146 CSSStyleSheet& StyleEngine::ensureInspectorStyleSheet() { |
147 if (m_inspectorStyleSheet) | 147 if (m_inspectorStyleSheet) |
148 return *m_inspectorStyleSheet; | 148 return *m_inspectorStyleSheet; |
149 | 149 |
150 StyleSheetContents* contents = | 150 StyleSheetContents* contents = |
151 StyleSheetContents::create(CSSParserContext(*m_document, nullptr)); | 151 StyleSheetContents::create(CSSParserContext(*m_document, nullptr)); |
152 m_inspectorStyleSheet = CSSStyleSheet::create(contents, *m_document); | 152 m_inspectorStyleSheet = CSSStyleSheet::create(contents, *m_document); |
153 markDocumentDirty(); | 153 markDocumentDirty(); |
154 resolverChanged(AnalyzedStyleUpdate); | 154 // TODO(rune@opera.com): Making the active stylesheets up-to-date here is |
| 155 // required by some inspector tests, at least. I theory this should not be |
| 156 // necessary. Need to investigate to figure out if/why. |
| 157 updateActiveStyle(); |
155 return *m_inspectorStyleSheet; | 158 return *m_inspectorStyleSheet; |
156 } | 159 } |
157 | 160 |
158 void StyleEngine::addPendingSheet(StyleEngineContext& context) { | 161 void StyleEngine::addPendingSheet(StyleEngineContext& context) { |
159 m_pendingScriptBlockingStylesheets++; | 162 m_pendingScriptBlockingStylesheets++; |
160 | 163 |
161 context.addingPendingSheet(document()); | 164 context.addingPendingSheet(document()); |
162 if (context.addedPendingSheetBeforeBody()) | 165 if (context.addedPendingSheetBeforeBody()) |
163 m_pendingRenderBlockingStylesheets++; | 166 m_pendingRenderBlockingStylesheets++; |
164 } | 167 } |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
260 return m_allTreeScopesDirty || !m_dirtyTreeScopes.isEmpty(); | 263 return m_allTreeScopesDirty || !m_dirtyTreeScopes.isEmpty(); |
261 } | 264 } |
262 | 265 |
263 void StyleEngine::mediaQueryAffectingValueChanged( | 266 void StyleEngine::mediaQueryAffectingValueChanged( |
264 UnorderedTreeScopeSet& treeScopes) { | 267 UnorderedTreeScopeSet& treeScopes) { |
265 for (TreeScope* treeScope : treeScopes) { | 268 for (TreeScope* treeScope : treeScopes) { |
266 DCHECK(treeScope != m_document); | 269 DCHECK(treeScope != m_document); |
267 ShadowTreeStyleSheetCollection* collection = | 270 ShadowTreeStyleSheetCollection* collection = |
268 toShadowTreeStyleSheetCollection(styleSheetCollectionFor(*treeScope)); | 271 toShadowTreeStyleSheetCollection(styleSheetCollectionFor(*treeScope)); |
269 DCHECK(collection); | 272 DCHECK(collection); |
270 collection->clearMediaQueryRuleSetStyleSheets(); | 273 if (collection->mediaQueryAffectingValueChanged()) |
| 274 setNeedsActiveStyleUpdate(*treeScope); |
271 } | 275 } |
272 } | 276 } |
273 | 277 |
274 void StyleEngine::mediaQueryAffectingValueChanged() { | 278 void StyleEngine::mediaQueryAffectingValueChanged() { |
275 resolverChanged(FullStyleUpdate); | 279 if (documentStyleSheetCollection().mediaQueryAffectingValueChanged()) |
276 documentStyleSheetCollection().clearMediaQueryRuleSetStyleSheets(); | 280 setNeedsActiveStyleUpdate(document()); |
277 mediaQueryAffectingValueChanged(m_activeTreeScopes); | 281 mediaQueryAffectingValueChanged(m_activeTreeScopes); |
278 if (m_resolver) | 282 if (m_resolver) |
279 m_resolver->updateMediaType(); | 283 m_resolver->updateMediaType(); |
280 } | 284 } |
281 | 285 |
282 void StyleEngine::updateStyleSheetsInImport( | 286 void StyleEngine::updateStyleSheetsInImport( |
283 DocumentStyleSheetCollector& parentCollector) { | 287 DocumentStyleSheetCollector& parentCollector) { |
284 DCHECK(!isMaster()); | 288 DCHECK(!isMaster()); |
285 HeapVector<Member<StyleSheet>> sheetsForList; | 289 HeapVector<Member<StyleSheet>> sheetsForList; |
286 ImportedDocumentStyleSheetCollector subcollector(parentCollector, | 290 ImportedDocumentStyleSheetCollector subcollector(parentCollector, |
287 sheetsForList); | 291 sheetsForList); |
288 documentStyleSheetCollection().collectStyleSheets(*this, subcollector); | 292 documentStyleSheetCollection().collectStyleSheets(subcollector); |
289 documentStyleSheetCollection().swapSheetsForSheetList(sheetsForList); | 293 documentStyleSheetCollection().swapSheetsForSheetList(sheetsForList); |
290 } | 294 } |
291 | 295 |
292 void StyleEngine::updateActiveStyleSheetsInShadow( | 296 void StyleEngine::updateActiveStyleSheetsInShadow( |
293 StyleResolverUpdateMode updateMode, | |
294 TreeScope* treeScope, | 297 TreeScope* treeScope, |
295 UnorderedTreeScopeSet& treeScopesRemoved) { | 298 UnorderedTreeScopeSet& treeScopesRemoved) { |
296 DCHECK_NE(treeScope, m_document); | 299 DCHECK_NE(treeScope, m_document); |
297 ShadowTreeStyleSheetCollection* collection = | 300 ShadowTreeStyleSheetCollection* collection = |
298 toShadowTreeStyleSheetCollection(styleSheetCollectionFor(*treeScope)); | 301 toShadowTreeStyleSheetCollection(styleSheetCollectionFor(*treeScope)); |
299 DCHECK(collection); | 302 DCHECK(collection); |
300 collection->updateActiveStyleSheets(*this, updateMode); | 303 collection->updateActiveStyleSheets(); |
301 if (!collection->hasStyleSheetCandidateNodes()) { | 304 if (!collection->hasStyleSheetCandidateNodes()) { |
302 treeScopesRemoved.add(treeScope); | 305 treeScopesRemoved.add(treeScope); |
303 // When removing TreeScope from ActiveTreeScopes, | 306 // When removing TreeScope from ActiveTreeScopes, |
304 // its resolver should be destroyed by invoking resetAuthorStyle. | 307 // its resolver should be destroyed by invoking resetAuthorStyle. |
305 DCHECK(!treeScope->scopedStyleResolver()); | 308 DCHECK(!treeScope->scopedStyleResolver()); |
306 } | 309 } |
307 } | 310 } |
308 | 311 |
309 void StyleEngine::updateActiveStyleSheets(StyleResolverUpdateMode updateMode) { | 312 void StyleEngine::updateActiveStyleSheets() { |
| 313 if (!needsActiveStyleSheetUpdate()) |
| 314 return; |
| 315 |
310 DCHECK(isMaster()); | 316 DCHECK(isMaster()); |
311 DCHECK(!document().inStyleRecalc()); | 317 DCHECK(!document().inStyleRecalc()); |
312 | 318 DCHECK(document().isActive()); |
313 if (!document().isActive()) | |
314 return; | |
315 | 319 |
316 TRACE_EVENT0("blink,blink_style", "StyleEngine::updateActiveStyleSheets"); | 320 TRACE_EVENT0("blink,blink_style", "StyleEngine::updateActiveStyleSheets"); |
317 | 321 |
318 if (shouldUpdateDocumentStyleSheetCollection()) | 322 if (shouldUpdateDocumentStyleSheetCollection()) |
319 documentStyleSheetCollection().updateActiveStyleSheets(*this, updateMode); | 323 documentStyleSheetCollection().updateActiveStyleSheets(); |
320 | 324 |
321 if (shouldUpdateShadowTreeStyleSheetCollection()) { | 325 if (shouldUpdateShadowTreeStyleSheetCollection()) { |
322 UnorderedTreeScopeSet treeScopesRemoved; | 326 UnorderedTreeScopeSet treeScopesRemoved; |
323 | 327 |
324 if (m_allTreeScopesDirty) { | 328 if (m_allTreeScopesDirty) { |
325 for (TreeScope* treeScope : m_activeTreeScopes) | 329 for (TreeScope* treeScope : m_activeTreeScopes) |
326 updateActiveStyleSheetsInShadow(updateMode, treeScope, | 330 updateActiveStyleSheetsInShadow(treeScope, treeScopesRemoved); |
327 treeScopesRemoved); | |
328 } else { | 331 } else { |
329 for (TreeScope* treeScope : m_dirtyTreeScopes) | 332 for (TreeScope* treeScope : m_dirtyTreeScopes) |
330 updateActiveStyleSheetsInShadow(updateMode, treeScope, | 333 updateActiveStyleSheetsInShadow(treeScope, treeScopesRemoved); |
331 treeScopesRemoved); | |
332 } | 334 } |
333 for (TreeScope* treeScope : treeScopesRemoved) | 335 for (TreeScope* treeScope : treeScopesRemoved) |
334 m_activeTreeScopes.remove(treeScope); | 336 m_activeTreeScopes.remove(treeScope); |
335 } | 337 } |
336 | 338 |
337 InspectorInstrumentation::activeStyleSheetsUpdated(m_document); | 339 InspectorInstrumentation::activeStyleSheetsUpdated(m_document); |
338 | 340 |
339 m_dirtyTreeScopes.clear(); | 341 m_dirtyTreeScopes.clear(); |
340 m_documentScopeDirty = false; | 342 m_documentScopeDirty = false; |
341 m_allTreeScopesDirty = false; | 343 m_allTreeScopesDirty = false; |
342 } | 344 } |
343 | 345 |
344 void StyleEngine::updateActiveStyleSheets() { | |
345 // TODO(rune@opera.com): collect ActiveStyleSheets here. | |
346 } | |
347 | |
348 void StyleEngine::updateViewport() { | 346 void StyleEngine::updateViewport() { |
349 if (m_viewportResolver) | 347 if (m_viewportResolver) |
350 m_viewportResolver->updateViewport(documentStyleSheetCollection()); | 348 m_viewportResolver->updateViewport(documentStyleSheetCollection()); |
351 } | 349 } |
352 | 350 |
353 bool StyleEngine::needsActiveStyleUpdate() const { | 351 bool StyleEngine::needsActiveStyleUpdate() const { |
354 return m_viewportResolver && m_viewportResolver->needsUpdate(); | 352 return (m_viewportResolver && m_viewportResolver->needsUpdate()) || |
| 353 needsActiveStyleSheetUpdate() || m_globalRuleSet.isDirty(); |
355 } | 354 } |
356 | 355 |
357 void StyleEngine::updateActiveStyle() { | 356 void StyleEngine::updateActiveStyle() { |
| 357 DCHECK(document().isActive()); |
358 updateViewport(); | 358 updateViewport(); |
359 updateActiveStyleSheets(); | 359 updateActiveStyleSheets(); |
360 m_globalRuleSet.update(document()); | 360 m_globalRuleSet.update(document()); |
361 } | 361 } |
362 | 362 |
363 const HeapVector<Member<CSSStyleSheet>> | 363 const ActiveStyleSheetVector StyleEngine::activeStyleSheetsForInspector() { |
364 StyleEngine::activeStyleSheetsForInspector() const { | 364 if (document().isActive()) |
| 365 updateActiveStyle(); |
| 366 |
365 if (m_activeTreeScopes.isEmpty()) | 367 if (m_activeTreeScopes.isEmpty()) |
366 return documentStyleSheetCollection().activeAuthorStyleSheets(); | 368 return documentStyleSheetCollection().activeAuthorStyleSheets(); |
367 | 369 |
368 HeapVector<Member<CSSStyleSheet>> activeStyleSheets; | 370 ActiveStyleSheetVector activeStyleSheets; |
369 | 371 |
370 activeStyleSheets.appendVector( | 372 activeStyleSheets.appendVector( |
371 documentStyleSheetCollection().activeAuthorStyleSheets()); | 373 documentStyleSheetCollection().activeAuthorStyleSheets()); |
372 for (TreeScope* treeScope : m_activeTreeScopes) { | 374 for (TreeScope* treeScope : m_activeTreeScopes) { |
373 if (TreeScopeStyleSheetCollection* collection = | 375 if (TreeScopeStyleSheetCollection* collection = |
374 m_styleSheetCollectionMap.get(treeScope)) | 376 m_styleSheetCollectionMap.get(treeScope)) |
375 activeStyleSheets.appendVector(collection->activeAuthorStyleSheets()); | 377 activeStyleSheets.appendVector(collection->activeAuthorStyleSheets()); |
376 } | 378 } |
377 | 379 |
378 // FIXME: Inspector needs a vector which has all active stylesheets. | 380 // FIXME: Inspector needs a vector which has all active stylesheets. |
379 // However, creating such a large vector might cause performance regression. | 381 // However, creating such a large vector might cause performance regression. |
380 // Need to implement some smarter solution. | 382 // Need to implement some smarter solution. |
381 return activeStyleSheets; | 383 return activeStyleSheets; |
382 } | 384 } |
383 | 385 |
384 void StyleEngine::shadowRootRemovedFromDocument(ShadowRoot* shadowRoot) { | 386 void StyleEngine::shadowRootRemovedFromDocument(ShadowRoot* shadowRoot) { |
385 if (StyleResolver* styleResolver = resolver()) { | |
386 if (TreeScopeStyleSheetCollection* collection = | |
387 styleSheetCollectionFor(*shadowRoot)) | |
388 styleResolver->removePendingAuthorStyleSheets( | |
389 collection->activeAuthorStyleSheets()); | |
390 } | |
391 m_styleSheetCollectionMap.remove(shadowRoot); | 387 m_styleSheetCollectionMap.remove(shadowRoot); |
392 m_activeTreeScopes.remove(shadowRoot); | 388 m_activeTreeScopes.remove(shadowRoot); |
393 m_dirtyTreeScopes.remove(shadowRoot); | 389 m_dirtyTreeScopes.remove(shadowRoot); |
394 resetAuthorStyle(*shadowRoot); | 390 resetAuthorStyle(*shadowRoot); |
395 } | 391 } |
396 | 392 |
397 void StyleEngine::addTreeBoundaryCrossingScope(const TreeScope& treeScope) { | 393 void StyleEngine::addTreeBoundaryCrossingScope(const TreeScope& treeScope) { |
398 m_treeBoundaryCrossingScopes.add(&treeScope.rootNode()); | 394 m_treeBoundaryCrossingScopes.add(&treeScope.rootNode()); |
399 } | 395 } |
400 | 396 |
401 void StyleEngine::resetAuthorStyle(TreeScope& treeScope) { | 397 void StyleEngine::resetAuthorStyle(TreeScope& treeScope) { |
402 m_treeBoundaryCrossingScopes.remove(&treeScope.rootNode()); | 398 m_treeBoundaryCrossingScopes.remove(&treeScope.rootNode()); |
403 | 399 |
404 ScopedStyleResolver* scopedResolver = treeScope.scopedStyleResolver(); | 400 ScopedStyleResolver* scopedResolver = treeScope.scopedStyleResolver(); |
405 if (!scopedResolver) | 401 if (!scopedResolver) |
406 return; | 402 return; |
407 | 403 |
408 m_globalRuleSet.markDirty(); | 404 m_globalRuleSet.markDirty(); |
409 if (treeScope.rootNode().isDocumentNode()) { | 405 if (treeScope.rootNode().isDocumentNode()) { |
410 scopedResolver->resetAuthorStyle(); | 406 scopedResolver->resetAuthorStyle(); |
411 return; | 407 return; |
412 } | 408 } |
413 | 409 |
414 treeScope.clearScopedStyleResolver(); | 410 treeScope.clearScopedStyleResolver(); |
415 } | 411 } |
416 | 412 |
417 void StyleEngine::finishAppendAuthorStyleSheets() { | |
418 m_globalRuleSet.markDirty(); | |
419 m_globalRuleSet.update(document()); | |
420 | |
421 if (!document().layoutViewItem().isNull() && | |
422 document().layoutViewItem().style()) | |
423 document().layoutViewItem().style()->font().update(fontSelector()); | |
424 } | |
425 | |
426 void StyleEngine::appendActiveAuthorStyleSheets() { | |
427 DCHECK(isMaster()); | |
428 | |
429 m_resolver->appendAuthorStyleSheets( | |
430 documentStyleSheetCollection().activeAuthorStyleSheets()); | |
431 for (TreeScope* treeScope : m_activeTreeScopes) { | |
432 if (TreeScopeStyleSheetCollection* collection = | |
433 m_styleSheetCollectionMap.get(treeScope)) | |
434 m_resolver->appendAuthorStyleSheets( | |
435 collection->activeAuthorStyleSheets()); | |
436 } | |
437 } | |
438 | |
439 void StyleEngine::setRuleUsageTracker(StyleRuleUsageTracker* tracker) { | 413 void StyleEngine::setRuleUsageTracker(StyleRuleUsageTracker* tracker) { |
440 m_tracker = tracker; | 414 m_tracker = tracker; |
441 | 415 |
442 if (m_resolver) | 416 if (m_resolver) |
443 m_resolver->setRuleUsageTracker(m_tracker); | 417 m_resolver->setRuleUsageTracker(m_tracker); |
444 } | 418 } |
445 | 419 |
446 RuleSet* StyleEngine::ruleSetForSheet(CSSStyleSheet& sheet) { | 420 RuleSet* StyleEngine::ruleSetForSheet(CSSStyleSheet& sheet) { |
447 if (!sheet.matchesMediaQueries(ensureMediaQueryEvaluator())) | 421 if (!sheet.matchesMediaQueries(ensureMediaQueryEvaluator())) |
448 return nullptr; | 422 return nullptr; |
449 | 423 |
450 AddRuleFlags addRuleFlags = RuleHasNoSpecialState; | 424 AddRuleFlags addRuleFlags = RuleHasNoSpecialState; |
451 if (m_document->getSecurityOrigin()->canRequest(sheet.baseURL())) | 425 if (m_document->getSecurityOrigin()->canRequest(sheet.baseURL())) |
452 addRuleFlags = RuleHasDocumentSecurityOrigin; | 426 addRuleFlags = RuleHasDocumentSecurityOrigin; |
453 return &sheet.contents()->ensureRuleSet(*m_mediaQueryEvaluator, addRuleFlags); | 427 return &sheet.contents()->ensureRuleSet(*m_mediaQueryEvaluator, addRuleFlags); |
454 } | 428 } |
455 | 429 |
456 void StyleEngine::createResolver() { | 430 void StyleEngine::createResolver() { |
457 m_resolver = StyleResolver::create(*m_document); | 431 m_resolver = StyleResolver::create(*m_document); |
458 | |
459 m_resolver->setRuleUsageTracker(m_tracker); | 432 m_resolver->setRuleUsageTracker(m_tracker); |
460 | |
461 // A scoped style resolver for document will be created during | |
462 // appendActiveAuthorStyleSheets if needed. | |
463 appendActiveAuthorStyleSheets(); | |
464 finishAppendAuthorStyleSheets(); | |
465 } | 433 } |
466 | 434 |
467 void StyleEngine::clearResolver() { | 435 void StyleEngine::clearResolver() { |
468 DCHECK(!document().inStyleRecalc()); | 436 DCHECK(!document().inStyleRecalc()); |
469 DCHECK(isMaster() || !m_resolver); | 437 DCHECK(isMaster() || !m_resolver); |
470 | 438 |
471 document().clearScopedStyleResolver(); | 439 document().clearScopedStyleResolver(); |
472 // TODO(rune@opera.com): The clearing of all shadow tree scoped style | 440 // TODO(rune@opera.com): The clearing of all shadow tree scoped style |
473 // resolvers below should not be necessary. It was introduced to fix a crash | 441 // resolvers below should not be necessary. It was introduced to fix a crash |
474 // bug (https://crbug.com/447976) when clearResolver is called from didDetach | 442 // bug (https://crbug.com/447976) when clearResolver is called from didDetach |
(...skipping 12 matching lines...) Expand all Loading... |
487 m_treeBoundaryCrossingScopes.clear(); | 455 m_treeBoundaryCrossingScopes.clear(); |
488 | 456 |
489 if (m_resolver) { | 457 if (m_resolver) { |
490 TRACE_EVENT1("blink", "StyleEngine::clearResolver", "frame", | 458 TRACE_EVENT1("blink", "StyleEngine::clearResolver", "frame", |
491 document().frame()); | 459 document().frame()); |
492 m_resolver->dispose(); | 460 m_resolver->dispose(); |
493 m_resolver.clear(); | 461 m_resolver.clear(); |
494 } | 462 } |
495 } | 463 } |
496 | 464 |
497 void StyleEngine::clearMasterResolver() { | |
498 if (Document* master = this->master()) | |
499 master->styleEngine().clearResolver(); | |
500 } | |
501 | |
502 void StyleEngine::didDetach() { | 465 void StyleEngine::didDetach() { |
503 clearResolver(); | 466 clearResolver(); |
504 m_viewportResolver = nullptr; | 467 m_viewportResolver = nullptr; |
505 m_mediaQueryEvaluator = nullptr; | 468 m_mediaQueryEvaluator = nullptr; |
506 } | 469 } |
507 | 470 |
508 bool StyleEngine::shouldClearResolver() const { | |
509 return !m_didCalculateResolver && !haveScriptBlockingStylesheetsLoaded(); | |
510 } | |
511 | |
512 void StyleEngine::resolverChanged(StyleResolverUpdateMode mode) { | |
513 if (!isMaster()) { | |
514 if (Document* master = this->master()) | |
515 master->styleEngine().resolverChanged(mode); | |
516 return; | |
517 } | |
518 | |
519 // Don't bother updating, since we haven't loaded all our style info yet | |
520 // and haven't calculated the style selector for the first time. | |
521 if (!document().isActive() || shouldClearResolver()) { | |
522 clearResolver(); | |
523 return; | |
524 } | |
525 | |
526 if (mode == FullStyleUpdate) | |
527 markAllTreeScopesDirty(); | |
528 m_didCalculateResolver = true; | |
529 updateActiveStyleSheets(mode); | |
530 } | |
531 | |
532 void StyleEngine::clearFontCache() { | 471 void StyleEngine::clearFontCache() { |
533 if (m_fontSelector) | 472 if (m_fontSelector) |
534 m_fontSelector->fontFaceCache()->clearCSSConnected(); | 473 m_fontSelector->fontFaceCache()->clearCSSConnected(); |
535 if (m_resolver) | 474 if (m_resolver) |
536 m_resolver->invalidateMatchedPropertiesCache(); | 475 m_resolver->invalidateMatchedPropertiesCache(); |
537 } | 476 } |
538 | 477 |
539 void StyleEngine::updateGenericFontFamilySettings() { | 478 void StyleEngine::updateGenericFontFamilySettings() { |
540 // FIXME: we should not update generic font family settings when | 479 // FIXME: we should not update generic font family settings when |
541 // document is inactive. | 480 // document is inactive. |
(...skipping 696 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1238 } | 1177 } |
1239 | 1178 |
1240 DEFINE_TRACE_WRAPPERS(StyleEngine) { | 1179 DEFINE_TRACE_WRAPPERS(StyleEngine) { |
1241 for (auto sheet : m_injectedAuthorStyleSheets) { | 1180 for (auto sheet : m_injectedAuthorStyleSheets) { |
1242 visitor->traceWrappers(sheet); | 1181 visitor->traceWrappers(sheet); |
1243 } | 1182 } |
1244 visitor->traceWrappers(m_documentStyleSheetCollection); | 1183 visitor->traceWrappers(m_documentStyleSheetCollection); |
1245 } | 1184 } |
1246 | 1185 |
1247 } // namespace blink | 1186 } // namespace blink |
OLD | NEW |