Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(614)

Side by Side Diff: Source/core/css/parser/MediaQueryParser.h

Issue 171383002: A thread-safe Media Query Parser (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Fix a debug build error Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef MediaQueryParser_h
6 #define MediaQueryParser_h
7
8 #include "core/css/CSSParserValues.h"
9 #include "core/css/MediaList.h"
10 #include "core/css/MediaQuery.h"
11 #include "core/css/MediaQueryExp.h"
12 #include "core/css/parser/MediaQueryToken.h"
13 #include "wtf/Vector.h"
14 #include "wtf/text/WTFString.h"
15
16 namespace WebCore {
17
18 class MediaQuerySet;
19
20 class MediaQueryData {
21 private:
22 MediaQuery::Restrictor m_restrictor;
23 String m_mediaType;
24 OwnPtr<ExpressionHeapVector> m_expressions;
25 String m_mediaFeature;
26 CSSParserValueList m_valueList;
27 bool m_mediaTypeSet;
28
29 public:
30 MediaQueryData();
31 void resetCurrentQuery();
32 bool addExpression();
33 void addParserValue(MediaQueryTokenType, MediaQueryToken&);
34 void setMediaType(const String&);
35 PassOwnPtr<MediaQuery> takeMediaQueryAndClear();
36
37 inline bool currentMediaQueryChanged() const
38 {
39 return (m_restrictor != MediaQuery::None || m_mediaTypeSet || m_expressi ons->size() > 0);
40 }
41
42 inline void setRestrictor(MediaQuery::Restrictor restrictor) { m_restrictor = restrictor; }
43
44 inline void setMediaFeature(const String& str) { m_mediaFeature = str; }
45 };
46
47 class MediaQueryParser {
48 public:
49 static PassRefPtrWillBeRawPtr<MediaQuerySet> parse(const String&);
50
51 private:
52 MediaQueryParser(const String&);
53 virtual ~MediaQueryParser() { };
54
55 PassRefPtrWillBeRawPtr<MediaQuerySet> parseImpl();
56
57 typedef Vector<MediaQueryToken>::iterator TokenIterator;
58
59 void processToken(TokenIterator&);
60
61 void readRestrictor(MediaQueryTokenType, TokenIterator&);
62 void readMediaType(MediaQueryTokenType, TokenIterator&);
63 void readAnd(MediaQueryTokenType, TokenIterator&);
64 void readFeatureStart(MediaQueryTokenType, TokenIterator&);
65 void readFeature(MediaQueryTokenType, TokenIterator&);
66 void readFeatureColon(MediaQueryTokenType, TokenIterator&);
67 void readFeatureValue(MediaQueryTokenType, TokenIterator&);
68 void readFeatureEnd(MediaQueryTokenType, TokenIterator&);
69 void skipUntilComma(MediaQueryTokenType, TokenIterator&);
70 void skipUntilParenthesis(MediaQueryTokenType, TokenIterator&);
71 void done(MediaQueryTokenType, TokenIterator&);
72
73 typedef void (MediaQueryParser::*State)(MediaQueryTokenType, TokenIterator&) ;
74
75 void setStateAndRestrict(State, MediaQuery::Restrictor);
76
77 const State ReadRestrictor = &MediaQueryParser::readRestrictor;
78 const State ReadMediaType = &MediaQueryParser::readMediaType;
79 const State ReadAnd = &MediaQueryParser::readAnd;
80 const State ReadFeatureStart = &MediaQueryParser::readFeatureStart;
81 const State ReadFeature = &MediaQueryParser::readFeature;
82 const State ReadFeatureColon = &MediaQueryParser::readFeatureColon;
83 const State ReadFeatureValue = &MediaQueryParser::readFeatureValue;
84 const State ReadFeatureEnd = &MediaQueryParser::readFeatureEnd;
85 const State SkipUntilComma = &MediaQueryParser::skipUntilComma;
86 const State SkipUntilParenthesis = &MediaQueryParser::skipUntilParenthesis;
87 const State Done = &MediaQueryParser::done;
88
89 State m_state;
90 Vector<MediaQueryToken> m_tokens;
91 MediaQueryData m_mediaQueryData;
92 RefPtrWillBeMember<MediaQuerySet> m_querySet;
93 };
94
95 } // namespace WebCore
96
97 #endif // MediaQueryParser_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698