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: Source/core/dom/StyleEngine.cpp

Issue 730003002: Refactoring XSLT (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Fixed ASSERT crashes when xsltEnabled() returns false Created 6 years, 1 month 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
« no previous file with comments | « Source/core/dom/StyleEngine.h ('k') | Source/core/xml/DocumentXSLT.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 r ights reserved. 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All r ights reserved.
7 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/) 7 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/)
8 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved. 8 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved.
9 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) 9 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
10 * Copyright (C) Research In Motion Limited 2010-2011. All rights reserved. 10 * Copyright (C) Research In Motion Limited 2010-2011. All rights reserved.
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 , m_usesSiblingRulesOverride(false) 62 , m_usesSiblingRulesOverride(false)
63 , m_usesFirstLineRules(false) 63 , m_usesFirstLineRules(false)
64 , m_usesFirstLetterRules(false) 64 , m_usesFirstLetterRules(false)
65 , m_usesRemUnits(false) 65 , m_usesRemUnits(false)
66 , m_maxDirectAdjacentSelectors(0) 66 , m_maxDirectAdjacentSelectors(0)
67 , m_ignorePendingStylesheets(false) 67 , m_ignorePendingStylesheets(false)
68 , m_didCalculateResolver(false) 68 , m_didCalculateResolver(false)
69 // We don't need to create CSSFontSelector for imported document or 69 // We don't need to create CSSFontSelector for imported document or
70 // HTMLTemplateElement's document, because those documents have no frame. 70 // HTMLTemplateElement's document, because those documents have no frame.
71 , m_fontSelector(document.frame() ? CSSFontSelector::create(&document) : nul lptr) 71 , m_fontSelector(document.frame() ? CSSFontSelector::create(&document) : nul lptr)
72 , m_xslStyleSheet(nullptr)
73 { 72 {
74 if (m_fontSelector) 73 if (m_fontSelector)
75 m_fontSelector->registerForInvalidationCallbacks(this); 74 m_fontSelector->registerForInvalidationCallbacks(this);
76 } 75 }
77 76
78 StyleEngine::~StyleEngine() 77 StyleEngine::~StyleEngine()
79 { 78 {
80 } 79 }
81 80
82 static bool isStyleElement(Node& node) 81 static bool isStyleElement(Node& node)
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after
316 ASSERT(!isXSLStyleSheet(*node)); 315 ASSERT(!isXSLStyleSheet(*node));
317 316
318 TreeScopeStyleSheetCollection* collection = styleSheetCollectionFor(treeScop e); 317 TreeScopeStyleSheetCollection* collection = styleSheetCollectionFor(treeScop e);
319 ASSERT(collection); 318 ASSERT(collection);
320 collection->removeStyleSheetCandidateNode(node); 319 collection->removeStyleSheetCandidateNode(node);
321 320
322 markTreeScopeDirty(treeScope); 321 markTreeScopeDirty(treeScope);
323 m_activeTreeScopes.remove(&treeScope); 322 m_activeTreeScopes.remove(&treeScope);
324 } 323 }
325 324
326 void StyleEngine::addXSLStyleSheet(ProcessingInstruction* node, bool createdByPa rser)
327 {
328 if (!node->inDocument())
329 return;
330
331 ASSERT(isXSLStyleSheet(*node));
332 bool needToUpdate = false;
333 if (createdByParser || !m_xslStyleSheet) {
334 needToUpdate = !m_xslStyleSheet;
335 } else {
336 unsigned position = m_xslStyleSheet->compareDocumentPosition(node, Node: :TreatShadowTreesAsDisconnected);
337 needToUpdate = position & Node::DOCUMENT_POSITION_FOLLOWING;
338 }
339
340 if (!needToUpdate)
341 return;
342
343 markTreeScopeDirty(*m_document);
344 m_xslStyleSheet = node;
345 }
346
347 void StyleEngine::removeXSLStyleSheet(ProcessingInstruction* node)
348 {
349 ASSERT(isXSLStyleSheet(*node));
350 if (m_xslStyleSheet != node)
351 return;
352
353 markTreeScopeDirty(*m_document);
354 m_xslStyleSheet = nullptr;
355 }
356
357 void StyleEngine::modifiedStyleSheetCandidateNode(Node* node) 325 void StyleEngine::modifiedStyleSheetCandidateNode(Node* node)
358 { 326 {
359 if (!node->inDocument()) 327 if (!node->inDocument())
360 return; 328 return;
361 329
362 TreeScope& treeScope = isStyleElement(*node) ? node->treeScope() : *m_docume nt; 330 TreeScope& treeScope = isStyleElement(*node) ? node->treeScope() : *m_docume nt;
363 ASSERT(isStyleElement(*node) || treeScope == m_document); 331 ASSERT(isStyleElement(*node) || treeScope == m_document);
364 markTreeScopeDirty(treeScope); 332 markTreeScopeDirty(treeScope);
365 } 333 }
366 334
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
528 void StyleEngine::didDetach() 496 void StyleEngine::didDetach()
529 { 497 {
530 clearResolver(); 498 clearResolver();
531 } 499 }
532 500
533 bool StyleEngine::shouldClearResolver() const 501 bool StyleEngine::shouldClearResolver() const
534 { 502 {
535 return !m_didCalculateResolver && !haveStylesheetsLoaded(); 503 return !m_didCalculateResolver && !haveStylesheetsLoaded();
536 } 504 }
537 505
538 bool StyleEngine::shouldApplyXSLTransform() const
539 {
540 if (!RuntimeEnabledFeatures::xsltEnabled())
541 return false;
542 return m_xslStyleSheet && !m_document->transformSourceDocument();
543 }
544
545 void StyleEngine::resolverChanged(StyleResolverUpdateMode mode) 506 void StyleEngine::resolverChanged(StyleResolverUpdateMode mode)
546 { 507 {
547 if (!isMaster()) { 508 if (!isMaster()) {
548 if (Document* master = this->master()) 509 if (Document* master = this->master())
549 master->styleResolverChanged(mode); 510 master->styleResolverChanged(mode);
550 return; 511 return;
551 } 512 }
552 513
553 // Don't bother updating, since we haven't loaded all our style info yet 514 // Don't bother updating, since we haven't loaded all our style info yet
554 // and haven't calculated the style selector for the first time. 515 // and haven't calculated the style selector for the first time.
555 if (!document().isActive() || shouldClearResolver()) { 516 if (!document().isActive() || shouldClearResolver()) {
556 clearResolver(); 517 clearResolver();
557 return; 518 return;
558 } 519 }
559 520
560 if (shouldApplyXSLTransform()) {
561 // Processing instruction (XML documents only).
562 // We don't support linking to embedded CSS stylesheets, see <https://bu gs.webkit.org/show_bug.cgi?id=49281> for discussion.
563 // Don't apply XSL transforms to already transformed documents -- <rdar: //problem/4132806>
564 if (!m_document->parsing() && !m_xslStyleSheet->isLoading())
565 m_document->applyXSLTransform(m_xslStyleSheet.get());
566 return;
567 }
568
569 m_didCalculateResolver = true; 521 m_didCalculateResolver = true;
570 updateActiveStyleSheets(mode); 522 updateActiveStyleSheets(mode);
571 } 523 }
572 524
573 void StyleEngine::clearFontCache() 525 void StyleEngine::clearFontCache()
574 { 526 {
575 if (m_fontSelector) 527 if (m_fontSelector)
576 m_fontSelector->fontFaceCache()->clearCSSConnected(); 528 m_fontSelector->fontFaceCache()->clearCSSConnected();
577 if (m_resolver) 529 if (m_resolver)
578 m_resolver->invalidateMatchedPropertiesCache(); 530 m_resolver->invalidateMatchedPropertiesCache();
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
710 visitor->trace(m_document); 662 visitor->trace(m_document);
711 visitor->trace(m_injectedAuthorStyleSheets); 663 visitor->trace(m_injectedAuthorStyleSheets);
712 visitor->trace(m_authorStyleSheets); 664 visitor->trace(m_authorStyleSheets);
713 visitor->trace(m_documentStyleSheetCollection); 665 visitor->trace(m_documentStyleSheetCollection);
714 visitor->trace(m_styleSheetCollectionMap); 666 visitor->trace(m_styleSheetCollectionMap);
715 visitor->trace(m_scopedStyleResolvers); 667 visitor->trace(m_scopedStyleResolvers);
716 visitor->trace(m_resolver); 668 visitor->trace(m_resolver);
717 visitor->trace(m_fontSelector); 669 visitor->trace(m_fontSelector);
718 visitor->trace(m_textToSheetCache); 670 visitor->trace(m_textToSheetCache);
719 visitor->trace(m_sheetToTextCache); 671 visitor->trace(m_sheetToTextCache);
720 visitor->trace(m_xslStyleSheet);
721 #endif 672 #endif
722 CSSFontSelectorClient::trace(visitor); 673 CSSFontSelectorClient::trace(visitor);
723 } 674 }
724 675
725 } 676 }
OLDNEW
« no previous file with comments | « Source/core/dom/StyleEngine.h ('k') | Source/core/xml/DocumentXSLT.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698