[Conic Gradients] Add support for parsing conic gradients
[WebKit-https.git] / Source / WebCore / css / parser / CSSParserMode.h
index 50a3285..fcb5794 100644 (file)
  * SUCH DAMAGE.
  */
 
  * SUCH DAMAGE.
  */
 
-#ifndef CSSParserMode_h
-#define CSSParserMode_h
+#pragma once
 
 
+#include "TextEncoding.h"
 #include "URL.h"
 #include "URL.h"
+#include "URLHash.h"
+#include <wtf/HashFunctions.h>
+#include <wtf/text/StringHash.h>
 
 namespace WebCore {
 
 
 namespace WebCore {
 
@@ -93,17 +96,26 @@ public:
     String charset;
     CSSParserMode mode { HTMLStandardMode };
     bool isHTMLDocument { false };
     String charset;
     CSSParserMode mode { HTMLStandardMode };
     bool isHTMLDocument { false };
-#if ENABLE(CSS_GRID_LAYOUT)
     bool cssGridLayoutEnabled { false };
     bool cssGridLayoutEnabled { false };
-#endif
-#if ENABLE(IOS_TEXT_AUTOSIZING)
+#if ENABLE(TEXT_AUTOSIZING)
     bool textAutosizingEnabled { false };
 #endif
     bool needsSiteSpecificQuirks { false };
     bool enforcesCSSMIMETypeInNoQuirksMode { true };
     bool useLegacyBackgroundSizeShorthandBehavior { false };
     bool springTimingFunctionEnabled { false };
     bool textAutosizingEnabled { false };
 #endif
     bool needsSiteSpecificQuirks { false };
     bool enforcesCSSMIMETypeInNoQuirksMode { true };
     bool useLegacyBackgroundSizeShorthandBehavior { false };
     bool springTimingFunctionEnabled { false };
-    bool useNewParser { false };
+    bool constantPropertiesEnabled { false };
+    bool conicGradientsEnabled { false };
+    bool deferredCSSParserEnabled { false };
+
+    URL completeURL(const String& url) const
+    {
+        if (url.isNull())
+            return URL();
+        if (charset.isEmpty())
+            return URL(baseURL, url);
+        return URL(baseURL, url, TextEncoding(charset));
+    }
 };
 
 bool operator==(const CSSParserContext&, const CSSParserContext&);
 };
 
 bool operator==(const CSSParserContext&, const CSSParserContext&);
@@ -111,6 +123,45 @@ inline bool operator!=(const CSSParserContext& a, const CSSParserContext& b) { r
 
 WEBCORE_EXPORT const CSSParserContext& strictCSSParserContext();
 
 
 WEBCORE_EXPORT const CSSParserContext& strictCSSParserContext();
 
+struct CSSParserContextHash {
+    static unsigned hash(const CSSParserContext& key)
+    {
+        auto hash = URLHash::hash(key.baseURL);
+        if (!key.charset.isEmpty())
+            hash ^= StringHash::hash(key.charset);
+        unsigned bits = key.isHTMLDocument                  << 0
+            & key.isHTMLDocument                            << 1
+            & key.cssGridLayoutEnabled                      << 2
+#if ENABLE(TEXT_AUTOSIZING)
+            & key.textAutosizingEnabled                     << 3
+#endif
+            & key.needsSiteSpecificQuirks                   << 4
+            & key.enforcesCSSMIMETypeInNoQuirksMode         << 5
+            & key.useLegacyBackgroundSizeShorthandBehavior  << 6
+            & key.springTimingFunctionEnabled               << 7
+            & key.conicGradientsEnabled                     << 8
+            & key.deferredCSSParserEnabled                  << 9
+            & key.mode                                      << 10;
+        hash ^= WTF::intHash(bits);
+        return hash;
+    }
+    static bool equal(const CSSParserContext& a, const CSSParserContext& b)
+    {
+        return a == b;
+    }
+    static const bool safeToCompareToEmptyOrDeleted = false;
+};
+
+} // namespace WebCore
+
+namespace WTF {
+template<> struct HashTraits<WebCore::CSSParserContext> : GenericHashTraits<WebCore::CSSParserContext> {
+    static void constructDeletedValue(WebCore::CSSParserContext& slot) { new (NotNull, &slot.baseURL) WebCore::URL(WTF::HashTableDeletedValue); }
+    static bool isDeletedValue(const WebCore::CSSParserContext& value) { return value.baseURL.isHashTableDeletedValue(); }
+    static WebCore::CSSParserContext emptyValue() { return WebCore::CSSParserContext(WebCore::HTMLStandardMode); }
 };
 
 };
 
-#endif // CSSParserMode_h
+template<> struct DefaultHash<WebCore::CSSParserContext> {
+    typedef WebCore::CSSParserContextHash Hash;
+};
+} // namespace WTF