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 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 544 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
555 m_dirtyTreeScopes.add(&scope); | 555 m_dirtyTreeScopes.add(&scope); |
556 } | 556 } |
557 | 557 |
558 void StyleEngine::markDocumentDirty() | 558 void StyleEngine::markDocumentDirty() |
559 { | 559 { |
560 m_documentScopeDirty = true; | 560 m_documentScopeDirty = true; |
561 if (!HTMLImport::isMaster(&m_document)) | 561 if (!HTMLImport::isMaster(&m_document)) |
562 m_document.import()->master()->styleEngine()->markDocumentDirty(); | 562 m_document.import()->master()->styleEngine()->markDocumentDirty(); |
563 } | 563 } |
564 | 564 |
| 565 static bool isCacheableForStyleElement(const StyleSheetContents& contents) |
| 566 { |
| 567 // FIXME: Support copying import rules. |
| 568 if (!contents.importRules().isEmpty()) |
| 569 return false; |
| 570 // Until import rules are supported in cached sheets it's not possible for l
oading to fail. |
| 571 ASSERT(!contents.didLoadErrorOccur()); |
| 572 // It is not the original sheet anymore. |
| 573 if (contents.isMutable()) |
| 574 return false; |
| 575 if (!contents.hasSyntacticallyValidCSSHeader()) |
| 576 return false; |
| 577 return true; |
| 578 } |
| 579 |
565 PassRefPtrWillBeRawPtr<CSSStyleSheet> StyleEngine::createSheet(Element* e, const
String& text, TextPosition startPosition, bool createdByParser) | 580 PassRefPtrWillBeRawPtr<CSSStyleSheet> StyleEngine::createSheet(Element* e, const
String& text, TextPosition startPosition, bool createdByParser) |
566 { | 581 { |
567 RefPtrWillBeRawPtr<CSSStyleSheet> styleSheet; | 582 RefPtrWillBeRawPtr<CSSStyleSheet> styleSheet; |
568 | 583 |
569 e->document().styleEngine()->addPendingSheet(); | 584 e->document().styleEngine()->addPendingSheet(); |
570 | 585 |
571 if (!e->document().inQuirksMode()) { | 586 if (!e->document().inQuirksMode()) { |
572 AtomicString textContent(text); | 587 AtomicString textContent(text); |
573 | 588 |
574 HashMap<AtomicString, StyleSheetContents*>::AddResult result = m_textToS
heetCache.add(textContent, 0); | 589 HashMap<AtomicString, StyleSheetContents*>::AddResult result = m_textToS
heetCache.add(textContent, 0); |
575 if (result.isNewEntry || !result.storedValue->value) { | 590 if (result.isNewEntry || !result.storedValue->value) { |
576 styleSheet = StyleEngine::parseSheet(e, text, startPosition, created
ByParser); | 591 styleSheet = StyleEngine::parseSheet(e, text, startPosition, created
ByParser); |
577 if (result.isNewEntry && styleSheet->contents()->maybeCacheable()) { | 592 if (result.isNewEntry && isCacheableForStyleElement(*styleSheet->con
tents())) { |
578 result.storedValue->value = styleSheet->contents(); | 593 result.storedValue->value = styleSheet->contents(); |
579 m_sheetToTextCache.add(styleSheet->contents(), textContent); | 594 m_sheetToTextCache.add(styleSheet->contents(), textContent); |
580 } | 595 } |
581 } else { | 596 } else { |
582 ASSERT(result.storedValue->value->maybeCacheable()); | 597 StyleSheetContents* contents = result.storedValue->value; |
583 ASSERT(result.storedValue->value->singleOwnerDocument() == e->docume
nt()); | 598 ASSERT(contents); |
584 styleSheet = CSSStyleSheet::createInline(result.storedValue->value,
e, startPosition); | 599 ASSERT(isCacheableForStyleElement(*contents)); |
| 600 ASSERT(contents->singleOwnerDocument() == e->document()); |
| 601 styleSheet = CSSStyleSheet::createInline(contents, e, startPosition)
; |
585 } | 602 } |
586 } else { | 603 } else { |
587 // FIXME: currently we don't cache StyleSheetContents inQuirksMode. | 604 // FIXME: currently we don't cache StyleSheetContents inQuirksMode. |
588 styleSheet = StyleEngine::parseSheet(e, text, startPosition, createdByPa
rser); | 605 styleSheet = StyleEngine::parseSheet(e, text, startPosition, createdByPa
rser); |
589 } | 606 } |
590 | 607 |
591 ASSERT(styleSheet); | 608 ASSERT(styleSheet); |
592 styleSheet->setTitle(e->title()); | 609 styleSheet->setTitle(e->title()); |
593 return styleSheet; | 610 return styleSheet; |
594 } | 611 } |
(...skipping 18 matching lines...) Expand all Loading... |
613 | 630 |
614 void StyleEngine::trace(Visitor* visitor) | 631 void StyleEngine::trace(Visitor* visitor) |
615 { | 632 { |
616 visitor->trace(m_injectedAuthorStyleSheets); | 633 visitor->trace(m_injectedAuthorStyleSheets); |
617 visitor->trace(m_authorStyleSheets); | 634 visitor->trace(m_authorStyleSheets); |
618 visitor->trace(m_documentStyleSheetCollection); | 635 visitor->trace(m_documentStyleSheetCollection); |
619 visitor->trace(m_styleSheetCollectionMap); | 636 visitor->trace(m_styleSheetCollectionMap); |
620 } | 637 } |
621 | 638 |
622 } | 639 } |
OLD | NEW |