Implement CSS Custom Properties and Values Skeleton
[WebKit-https.git] / Source / WebCore / css / parser / CSSParserContext.cpp
1 /*
2  * Copyright (C) 2018 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #include "config.h"
27 #include "CSSParserContext.h"
28
29 #include "Document.h"
30 #include "Page.h"
31 #include "Settings.h"
32 #include <wtf/NeverDestroyed.h>
33
34 namespace WebCore {
35
36 const CSSParserContext& strictCSSParserContext()
37 {
38     static NeverDestroyed<CSSParserContext> strictContext(HTMLStandardMode);
39     return strictContext;
40 }
41
42 CSSParserContext::CSSParserContext(CSSParserMode mode, const URL& baseURL)
43     : baseURL(baseURL)
44     , mode(mode)
45 {
46 #if PLATFORM(IOS)
47     // FIXME: Force the site specific quirk below to work on iOS. Investigating other site specific quirks
48     // to see if we can enable the preference all together is to be handled by:
49     // <rdar://problem/8493309> Investigate Enabling Site Specific Quirks in MobileSafari and UIWebView
50     needsSiteSpecificQuirks = true;
51 #endif
52 }
53
54 CSSParserContext::CSSParserContext(Document& document, const URL& sheetBaseURL, const String& charset)
55     : baseURL(sheetBaseURL.isNull() ? document.baseURL() : sheetBaseURL)
56     , charset(charset)
57     , mode(document.inQuirksMode() ? HTMLQuirksMode : HTMLStandardMode)
58     , isHTMLDocument(document.isHTMLDocument())
59     , hasDocumentSecurityOrigin(sheetBaseURL.isNull() || document.securityOrigin().canRequest(baseURL))
60 {
61
62     needsSiteSpecificQuirks = document.settings().needsSiteSpecificQuirks();
63     enforcesCSSMIMETypeInNoQuirksMode = document.settings().enforceCSSMIMETypeInNoQuirksMode();
64     useLegacyBackgroundSizeShorthandBehavior = document.settings().useLegacyBackgroundSizeShorthandBehavior();
65 #if ENABLE(TEXT_AUTOSIZING)
66     textAutosizingEnabled = document.settings().textAutosizingEnabled();
67 #endif
68     springTimingFunctionEnabled = document.settings().springTimingFunctionEnabled();
69     constantPropertiesEnabled = document.settings().constantPropertiesEnabled();
70     conicGradientsEnabled = document.settings().conicGradientsEnabled();
71     colorFilterEnabled = document.settings().colorFilterEnabled();
72     deferredCSSParserEnabled = document.settings().deferredCSSParserEnabled();
73     useSystemAppearance = document.page() ? document.page()->useSystemAppearance() : false;
74
75 #if PLATFORM(IOS)
76     // FIXME: Force the site specific quirk below to work on iOS. Investigating other site specific quirks
77     // to see if we can enable the preference all together is to be handled by:
78     // <rdar://problem/8493309> Investigate Enabling Site Specific Quirks in MobileSafari and UIWebView
79     needsSiteSpecificQuirks = true;
80 #endif
81 }
82
83 bool operator==(const CSSParserContext& a, const CSSParserContext& b)
84 {
85     return a.baseURL == b.baseURL
86         && a.charset == b.charset
87         && a.mode == b.mode
88         && a.isHTMLDocument == b.isHTMLDocument
89 #if ENABLE(TEXT_AUTOSIZING)
90         && a.textAutosizingEnabled == b.textAutosizingEnabled
91 #endif
92         && a.needsSiteSpecificQuirks == b.needsSiteSpecificQuirks
93         && a.enforcesCSSMIMETypeInNoQuirksMode == b.enforcesCSSMIMETypeInNoQuirksMode
94         && a.useLegacyBackgroundSizeShorthandBehavior == b.useLegacyBackgroundSizeShorthandBehavior
95         && a.springTimingFunctionEnabled == b.springTimingFunctionEnabled
96         && a.constantPropertiesEnabled == b.constantPropertiesEnabled
97         && a.conicGradientsEnabled == b.conicGradientsEnabled
98         && a.colorFilterEnabled == b.colorFilterEnabled
99         && a.deferredCSSParserEnabled == b.deferredCSSParserEnabled
100         && a.hasDocumentSecurityOrigin == b.hasDocumentSecurityOrigin
101         && a.useSystemAppearance == b.useSystemAppearance;
102 }
103
104 }