blob: 6a40a5f72271dec843a0741b48c4960b6052e072 [file] [log] [blame]
Torne (Richard Coles)53e740f2013-05-09 18:38:43 +01001/*
2 * Copyright (C) 2012 Adobe Systems Incorporated. All rights reserved.
3 * Copyright (C) 2012 Apple Inc. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * 1. Redistributions of source code must retain the above
10 * copyright notice, this list of conditions and the following
11 * disclaimer.
12 * 2. Redistributions in binary form must reproduce the above
13 * copyright notice, this list of conditions and the following
14 * disclaimer in the documentation and/or other materials
15 * provided with the distribution.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
18 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
20 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
21 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
22 * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
23 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
24 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
26 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
27 * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28 * SUCH DAMAGE.
29 */
30
31#ifndef CSSParserMode_h
32#define CSSParserMode_h
33
Torne (Richard Coles)521d96e2013-06-19 11:58:24 +010034#include "weborigin/KURL.h"
Torne (Richard Coles)53e740f2013-05-09 18:38:43 +010035
36namespace WebCore {
37
38class Document;
39
40enum CSSParserMode {
41 CSSQuirksMode,
42 CSSStrictMode,
43 // SVG should always be in strict mode. For SVG attributes, the rules differ to strict sometimes.
Torne (Richard Coles)5267f702013-06-11 10:57:24 +010044 SVGAttributeMode,
45 // User agent style sheet should always be in strict mode. Enables internal
46 // only properties and values.
Torne (Richard Coles)9bbd2f52013-09-19 22:37:05 +010047 UASheetMode,
48 // Parsing @viewport descriptors. Always strict. Set as mode on StylePropertySet
49 // to make sure CSSOM modifications use CSSParser::parseViewportProperty.
50 ViewportMode
Torne (Richard Coles)53e740f2013-05-09 18:38:43 +010051};
52
53inline CSSParserMode strictToCSSParserMode(bool inStrictMode)
54{
55 return inStrictMode ? CSSStrictMode : CSSQuirksMode;
56}
57
58inline bool isStrictParserMode(CSSParserMode cssParserMode)
59{
Torne (Richard Coles)9bbd2f52013-09-19 22:37:05 +010060 return cssParserMode != CSSQuirksMode;
Torne (Richard Coles)53e740f2013-05-09 18:38:43 +010061}
62
63struct CSSParserContext {
64 WTF_MAKE_FAST_ALLOCATED;
65public:
66 CSSParserContext(CSSParserMode, const KURL& baseURL = KURL());
Torne (Richard Coles)8abfc582013-09-12 12:10:38 +010067 CSSParserContext(const Document&, const KURL& baseURL = KURL(), const String& charset = emptyString());
Torne (Richard Coles)53e740f2013-05-09 18:38:43 +010068
69 KURL baseURL;
70 String charset;
71 CSSParserMode mode;
72 bool isHTMLDocument;
73 bool isCSSCustomFilterEnabled;
74 bool isCSSStickyPositionEnabled;
75 bool isCSSCompositingEnabled;
Torne (Richard Coles)93ac45c2013-05-29 14:40:20 +010076 bool isCSSTouchActionEnabled;
Torne (Richard Coles)53e740f2013-05-09 18:38:43 +010077 bool needsSiteSpecificQuirks;
Torne (Richard Coles)c0e19a62013-08-30 15:15:11 +010078 // This quirk is to maintain compatibility with Android apps built on
Torne (Richard Coles)8abfc582013-09-12 12:10:38 +010079 // the Android SDK prior to and including version 18. Presumably, this
Torne (Richard Coles)c0e19a62013-08-30 15:15:11 +010080 // can be removed any time after 2015. See http://crbug.com/277157.
81 bool useLegacyBackgroundSizeShorthandBehavior;
Torne (Richard Coles)53e740f2013-05-09 18:38:43 +010082};
83
84bool operator==(const CSSParserContext&, const CSSParserContext&);
85inline bool operator!=(const CSSParserContext& a, const CSSParserContext& b) { return !(a == b); }
86
87const CSSParserContext& strictCSSParserContext();
88
89};
90
91#endif // CSSParserMode_h