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

Side by Side Diff: Source/core/dom/StyleEngine.cpp

Issue 257363002: Added addXSLStyleSheet and removeXSLStyleSheet to StyleEngine. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 7 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 | Annotate | Revision Log
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 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
68 , m_usesSiblingRulesOverride(false) 68 , m_usesSiblingRulesOverride(false)
69 , m_usesFirstLineRules(false) 69 , m_usesFirstLineRules(false)
70 , m_usesFirstLetterRules(false) 70 , m_usesFirstLetterRules(false)
71 , m_usesRemUnits(false) 71 , m_usesRemUnits(false)
72 , m_maxDirectAdjacentSelectors(0) 72 , m_maxDirectAdjacentSelectors(0)
73 , m_ignorePendingStylesheets(false) 73 , m_ignorePendingStylesheets(false)
74 , m_didCalculateResolver(false) 74 , m_didCalculateResolver(false)
75 // We don't need to create CSSFontSelector for imported document or 75 // We don't need to create CSSFontSelector for imported document or
76 // HTMLTemplateElement's document, because those documents have no frame. 76 // HTMLTemplateElement's document, because those documents have no frame.
77 , m_fontSelector(document.frame() ? CSSFontSelector::create(&document) : nul lptr) 77 , m_fontSelector(document.frame() ? CSSFontSelector::create(&document) : nul lptr)
78 , m_xslStyleSheet(nullptr)
78 { 79 {
79 } 80 }
80 81
81 StyleEngine::~StyleEngine() 82 StyleEngine::~StyleEngine()
82 { 83 {
83 } 84 }
84 85
85 #if !ENABLE(OILPAN) 86 #if !ENABLE(OILPAN)
86 void StyleEngine::detachFromDocument() 87 void StyleEngine::detachFromDocument()
87 { 88 {
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
278 markTreeScopeDirty(treeScope); 279 markTreeScopeDirty(treeScope);
279 } 280 }
280 281
281 void StyleEngine::addStyleSheetCandidateNode(Node* node, bool createdByParser) 282 void StyleEngine::addStyleSheetCandidateNode(Node* node, bool createdByParser)
282 { 283 {
283 if (!node->inDocument()) 284 if (!node->inDocument())
284 return; 285 return;
285 286
286 TreeScope& treeScope = isHTMLStyleElement(*node) ? node->treeScope() : *m_do cument; 287 TreeScope& treeScope = isHTMLStyleElement(*node) ? node->treeScope() : *m_do cument;
287 ASSERT(isHTMLStyleElement(node) || treeScope == m_document); 288 ASSERT(isHTMLStyleElement(node) || treeScope == m_document);
288 289 ASSERT(!isXSLStyleSheet(node));
289 TreeScopeStyleSheetCollection* collection = ensureStyleSheetCollectionFor(tr eeScope); 290 TreeScopeStyleSheetCollection* collection = ensureStyleSheetCollectionFor(tr eeScope);
290 ASSERT(collection); 291 ASSERT(collection);
291 collection->addStyleSheetCandidateNode(node, createdByParser); 292 collection->addStyleSheetCandidateNode(node, createdByParser);
292 293
293 markTreeScopeDirty(treeScope); 294 markTreeScopeDirty(treeScope);
294 if (treeScope != m_document) 295 if (treeScope != m_document)
295 insertTreeScopeInDocumentOrder(m_activeTreeScopes, &treeScope); 296 insertTreeScopeInDocumentOrder(m_activeTreeScopes, &treeScope);
296 } 297 }
297 298
298 void StyleEngine::removeStyleSheetCandidateNode(Node* node) 299 void StyleEngine::removeStyleSheetCandidateNode(Node* node)
299 { 300 {
300 removeStyleSheetCandidateNode(node, 0, *m_document); 301 removeStyleSheetCandidateNode(node, 0, *m_document);
301 } 302 }
302 303
303 void StyleEngine::removeStyleSheetCandidateNode(Node* node, ContainerNode* scopi ngNode, TreeScope& treeScope) 304 void StyleEngine::removeStyleSheetCandidateNode(Node* node, ContainerNode* scopi ngNode, TreeScope& treeScope)
304 { 305 {
305 ASSERT(isHTMLStyleElement(node) || treeScope == m_document); 306 ASSERT(isHTMLStyleElement(node) || treeScope == m_document);
307 ASSERT(!isXSLStyleSheet(node));
306 308
307 TreeScopeStyleSheetCollection* collection = styleSheetCollectionFor(treeScop e); 309 TreeScopeStyleSheetCollection* collection = styleSheetCollectionFor(treeScop e);
308 ASSERT(collection); 310 ASSERT(collection);
309 collection->removeStyleSheetCandidateNode(node, scopingNode); 311 collection->removeStyleSheetCandidateNode(node, scopingNode);
310 312
311 markTreeScopeDirty(treeScope); 313 markTreeScopeDirty(treeScope);
312 m_activeTreeScopes.remove(&treeScope); 314 m_activeTreeScopes.remove(&treeScope);
313 } 315 }
314 316
317 void StyleEngine::addXSLStyleSheet(ProcessingInstruction* node, bool createdByPa rser)
318 {
319 if (!node->inDocument())
320 return;
321
322 ASSERT(isXSLStyleSheet(node));
323 bool needToUpdate = false;
324 if (createdByParser || !m_xslStyleSheet) {
325 needToUpdate = !m_xslStyleSheet;
326 } else {
327 unsigned position = m_xslStyleSheet->compareDocumentPositionInternal(nod e, Node::TreatShadowTreesAsDisconnected);
328 needToUpdate = position & Node::DOCUMENT_POSITION_FOLLOWING;
329 }
330
331 if (!needToUpdate)
332 return;
333
334 markTreeScopeDirty(*m_document);
335 m_xslStyleSheet = node;
336 }
337
338 void StyleEngine::removeXSLStyleSheet(ProcessingInstruction* node)
339 {
340 ASSERT(isXSLStyleSheet(node));
341 if (m_xslStyleSheet != node)
342 return;
343
344 markTreeScopeDirty(*m_document);
345 m_xslStyleSheet = nullptr;
346 }
347
315 void StyleEngine::modifiedStyleSheetCandidateNode(Node* node) 348 void StyleEngine::modifiedStyleSheetCandidateNode(Node* node)
316 { 349 {
317 if (!node->inDocument()) 350 if (!node->inDocument())
318 return; 351 return;
319 352
320 TreeScope& treeScope = isHTMLStyleElement(*node) ? node->treeScope() : *m_do cument; 353 TreeScope& treeScope = isHTMLStyleElement(*node) ? node->treeScope() : *m_do cument;
321 ASSERT(isHTMLStyleElement(node) || treeScope == m_document); 354 ASSERT(isHTMLStyleElement(node) || treeScope == m_document);
322 markTreeScopeDirty(treeScope); 355 markTreeScopeDirty(treeScope);
323 } 356 }
324 357
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
486 void StyleEngine::didDetach() 519 void StyleEngine::didDetach()
487 { 520 {
488 clearResolver(); 521 clearResolver();
489 } 522 }
490 523
491 bool StyleEngine::shouldClearResolver() const 524 bool StyleEngine::shouldClearResolver() const
492 { 525 {
493 return !m_didCalculateResolver && !haveStylesheetsLoaded(); 526 return !m_didCalculateResolver && !haveStylesheetsLoaded();
494 } 527 }
495 528
529 bool StyleEngine::shouldApplyXSLTransform() const
530 {
531 if (!RuntimeEnabledFeatures::xsltEnabled())
532 return false;
533 return m_xslStyleSheet && !m_document->transformSourceDocument();
534 }
535
496 StyleResolverChange StyleEngine::resolverChanged(StyleResolverUpdateMode mode) 536 StyleResolverChange StyleEngine::resolverChanged(StyleResolverUpdateMode mode)
497 { 537 {
498 StyleResolverChange change; 538 StyleResolverChange change;
499 539
500 if (!isMaster()) { 540 if (!isMaster()) {
501 if (Document* master = this->master()) 541 if (Document* master = this->master())
502 master->styleResolverChanged(mode); 542 master->styleResolverChanged(mode);
503 return change; 543 return change;
504 } 544 }
505 545
506 // Don't bother updating, since we haven't loaded all our style info yet 546 // Don't bother updating, since we haven't loaded all our style info yet
507 // and haven't calculated the style selector for the first time. 547 // and haven't calculated the style selector for the first time.
508 if (!document().isActive() || shouldClearResolver()) { 548 if (!document().isActive() || shouldClearResolver()) {
509 clearResolver(); 549 clearResolver();
510 return change; 550 return change;
511 } 551 }
512 552
553 if (shouldApplyXSLTransform()) {
554 // Processing instruction (XML documents only).
555 // We don't support linking to embedded CSS stylesheets, see <https://bu gs.webkit.org/show_bug.cgi?id=49281> for discussion.
556 // Don't apply XSL transforms to already transformed documents -- <rdar: //problem/4132806>
557 if (!m_document->parsing() && !m_xslStyleSheet->isLoading())
558 m_document->applyXSLTransform(m_xslStyleSheet.get());
559 return change;
560 }
561
513 m_didCalculateResolver = true; 562 m_didCalculateResolver = true;
514 if (document().didLayoutWithPendingStylesheets() && !hasPendingSheets()) 563 if (document().didLayoutWithPendingStylesheets() && !hasPendingSheets())
515 change.setNeedsRepaint(); 564 change.setNeedsRepaint();
516 565
517 if (updateActiveStyleSheets(mode)) 566 if (updateActiveStyleSheets(mode))
518 change.setNeedsStyleRecalc(); 567 change.setNeedsStyleRecalc();
519 568
520 return change; 569 return change;
521 } 570 }
522 571
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
641 visitor->trace(m_authorStyleSheets); 690 visitor->trace(m_authorStyleSheets);
642 visitor->trace(m_documentStyleSheetCollection); 691 visitor->trace(m_documentStyleSheetCollection);
643 visitor->trace(m_styleSheetCollectionMap); 692 visitor->trace(m_styleSheetCollectionMap);
644 visitor->trace(m_resolver); 693 visitor->trace(m_resolver);
645 visitor->trace(m_fontSelector); 694 visitor->trace(m_fontSelector);
646 visitor->trace(m_textToSheetCache); 695 visitor->trace(m_textToSheetCache);
647 visitor->trace(m_sheetToTextCache); 696 visitor->trace(m_sheetToTextCache);
648 } 697 }
649 698
650 } 699 }
OLDNEW
« Source/core/dom/ProcessingInstruction.cpp ('K') | « Source/core/dom/StyleEngine.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698