Changeset 207291 in webkit


Ignore:
Timestamp:
Oct 13, 2016 10:25:24 AM (8 years ago)
Author:
Ryan Haddad
Message:

Unreviewed, rolling out r207286.

Caused LayoutTest http/tests/misc/acid3.html to fail.

Reverted changeset:

"Share inline stylesheets between shadow trees"
https://bugs.webkit.org/show_bug.cgi?id=163353
http://trac.webkit.org/changeset/207286

Location:
trunk/Source/WebCore
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r207290 r207291  
     12016-10-13  Ryan Haddad  <ryanhaddad@apple.com>
     2
     3        Unreviewed, rolling out r207286.
     4
     5        Caused LayoutTest http/tests/misc/acid3.html to fail.
     6
     7        Reverted changeset:
     8
     9        "Share inline stylesheets between shadow trees"
     10        https://bugs.webkit.org/show_bug.cgi?id=163353
     11        http://trac.webkit.org/changeset/207286
     12
    1132016-10-13  Sergio Villar Senin  <svillar@igalia.com>
    214
  • trunk/Source/WebCore/css/parser/CSSParserMode.h

    r207286 r207291  
    3333
    3434#include "URL.h"
    35 #include "URLHash.h"
    36 #include <wtf/HashFunctions.h>
    37 #include <wtf/text/StringHash.h>
    3835
    3936namespace WebCore {
     
    118115WEBCORE_EXPORT const CSSParserContext& strictCSSParserContext();
    119116
    120 struct CSSParserContextHash {
    121     static unsigned hash(const CSSParserContext& key)
    122     {
    123         auto hash = URLHash::hash(key.baseURL);
    124         hash ^= StringHash::hash(key.charset);
    125         unsigned bits = key.isHTMLDocument                  << 0
    126             & key.isHTMLDocument                            << 1
    127 #if ENABLE(CSS_GRID_LAYOUT)
    128             & key.cssGridLayoutEnabled                      << 2
    129 #endif
    130 #if ENABLE(TEXT_AUTOSIZING)
    131             & key.textAutosizingEnabled                     << 3
    132 #endif
    133             & key.needsSiteSpecificQuirks                   << 4
    134             & key.enforcesCSSMIMETypeInNoQuirksMode         << 5
    135             & key.useLegacyBackgroundSizeShorthandBehavior  << 6
    136             & key.springTimingFunctionEnabled               << 7
    137             & key.useNewParser                              << 8
    138 #if ENABLE(VARIATION_FONTS)
    139             & key.variationFontsEnabled                     << 9
    140 #endif
    141             & key.mode                                      << 10;
    142         hash ^= WTF::intHash(bits);
    143         return hash;
    144     }
    145     static bool equal(const CSSParserContext& a, const CSSParserContext& b)
    146     {
    147         return a == b;
    148     }
    149     static const bool safeToCompareToEmptyOrDeleted = false;
    150117};
    151118
    152 }
    153 
    154 namespace WTF {
    155 template<> struct HashTraits<WebCore::CSSParserContext> : GenericHashTraits<WebCore::CSSParserContext> {
    156     static void constructDeletedValue(WebCore::CSSParserContext& slot) { new (NotNull, &slot.baseURL) WebCore::URL(WTF::HashTableDeletedValue); }
    157     static bool isDeletedValue(const WebCore::CSSParserContext& value) { return value.baseURL.isHashTableDeletedValue(); }
    158     static WebCore::CSSParserContext emptyValue() { return WebCore::CSSParserContext(WebCore::HTMLStandardMode); }
    159 };
    160 
    161 template<> struct DefaultHash<WebCore::CSSParserContext> {
    162     typedef WebCore::CSSParserContextHash Hash;
    163 };
    164 }
    165 
    166119#endif // CSSParserMode_h
  • trunk/Source/WebCore/dom/InlineStyleSheetOwner.cpp

    r207286 r207291  
    3131#include "StyleSheetContents.h"
    3232#include "TextNodeTraversal.h"
    33 #include <wtf/HashMap.h>
    3433#include <wtf/NeverDestroyed.h>
    3534
    3635namespace WebCore {
    37 
    38 using InlineStyleSheetCacheKey = std::pair<String, CSSParserContext>;
    39 using InlineStyleSheetCache = HashMap<InlineStyleSheetCacheKey, RefPtr<StyleSheetContents>>;
    40 
    41 static InlineStyleSheetCache& inlineStyleSheetCache()
    42 {
    43     static NeverDestroyed<InlineStyleSheetCache> cache;
    44     return cache;
    45 }
    46 
    47 static URL inlineStyleSheetBaseURLForElement(const Element& element)
    48 {
    49     auto* shadowRoot = element.containingShadowRoot();
    50     // User agent shadow trees can't contain document-relative URLs. Use blank URL as base allowing cross-document sharing.
    51     return shadowRoot && shadowRoot->mode() == ShadowRoot::Mode::UserAgent ? blankURL() : element.document().baseURL();
    52 }
    53 
    54 static Optional<InlineStyleSheetCacheKey> makeInlineStyleSheetCacheKey(const String& text, const Element& element)
    55 {
    56     if (text.isEmpty())
    57         return { };
    58     // Only cache for shadow trees. Main document inline stylesheets are generally unique and can't be shared between documents.
    59     // FIXME: This could be relaxed when a stylesheet does not contain document-relative URLs (or #urls).
    60     if (!element.isInShadowTree())
    61         return { };
    62 
    63     CSSParserContext context { element.document(), inlineStyleSheetBaseURLForElement(element) };
    64     return std::make_pair(text, context);
    65 }
    6636
    6737InlineStyleSheetOwner::InlineStyleSheetOwner(Document& document, bool createdByParser)
     
    183153        m_styleScope->addPendingSheet();
    184154
    185     auto cacheKey = makeInlineStyleSheetCacheKey(text, element);
    186     if (cacheKey) {
    187         if (auto* cachedSheet = inlineStyleSheetCache().get(*cacheKey)) {
    188             ASSERT(cachedSheet->isCacheable());
    189             m_sheet = CSSStyleSheet::create(*cachedSheet, element);
    190             sheetLoaded(element);
    191             element.notifyLoadedSheetAndAllCriticalSubresources(false);
    192             return;
    193         }
    194     }
    195 
    196155    m_loading = true;
    197156
    198     m_sheet = CSSStyleSheet::createInline(element, inlineStyleSheetBaseURLForElement(element), m_startTextPosition, document.encoding());
     157    m_sheet = CSSStyleSheet::createInline(element, URL(), m_startTextPosition, document.encoding());
    199158    m_sheet->setMediaQueries(mediaQueries.releaseNonNull());
    200159    m_sheet->setTitle(element.title());
     
    205164    if (m_sheet)
    206165        m_sheet->contents().checkLoaded();
    207 
    208     if (cacheKey && m_sheet && m_sheet->contents().isCacheable()) {
    209         inlineStyleSheetCache().add(*cacheKey, &m_sheet->contents());
    210 
    211         // Prevent pathological growth.
    212         const size_t maximumInlineStyleSheetCacheSize = 50;
    213         if (inlineStyleSheetCache().size() > maximumInlineStyleSheetCacheSize)
    214             inlineStyleSheetCache().remove(inlineStyleSheetCache().begin());
    215     }
    216166}
    217167
     
    240190}
    241191
    242 void InlineStyleSheetOwner::clearCache()
    243 {
    244     inlineStyleSheetCache().clear();
    245192}
    246 
    247 }
  • trunk/Source/WebCore/dom/InlineStyleSheetOwner.h

    r207286 r207291  
    5353    Style::Scope* styleScope() { return m_styleScope; }
    5454
    55     static void clearCache();
    56 
    5755private:
    5856    void createSheet(Element&, const String& text);
  • trunk/Source/WebCore/platform/MemoryPressureHandler.cpp

    r207286 r207291  
    3434#include "GCController.h"
    3535#include "HTMLMediaElement.h"
    36 #include "InlineStyleSheetOwner.h"
    3736#include "InspectorInstrumentation.h"
    3837#include "Logging.h"
     
    105104        StyledElement::clearPresentationAttributeCache();
    106105    }
    107 
    108     {
    109         ReliefLogger log("Clear inline stylesheet cache");
    110         InlineStyleSheetOwner::clearCache();
    111     }
    112106}
    113107
Note: See TracChangeset for help on using the changeset viewer.