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

Unified 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: Moar rebase 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 side-by-side diff with in-line comments
Download patch
Index: Source/core/css/parser/MediaQueryParser.h
diff --git a/Source/core/css/parser/MediaQueryParser.h b/Source/core/css/parser/MediaQueryParser.h
new file mode 100644
index 0000000000000000000000000000000000000000..5a9a3780453ebe70fc1ae9346da7d72c90394bd0
--- /dev/null
+++ b/Source/core/css/parser/MediaQueryParser.h
@@ -0,0 +1,98 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef MediaQueryParser_h
+#define MediaQueryParser_h
+
+#include "core/css/CSSParserValues.h"
+#include "core/css/MediaList.h"
+#include "core/css/MediaQuery.h"
+#include "core/css/MediaQueryExp.h"
+#include "core/css/parser/MediaQueryToken.h"
+#include "wtf/Vector.h"
+#include "wtf/text/WTFString.h"
+
+namespace WebCore {
+
+class MediaQuerySet;
+
+class MediaQueryData {
+private:
+ MediaQuery::Restrictor m_restrictor;
+ String m_mediaType;
+ OwnPtr<ExpressionHeapVector> m_expressions;
+ String m_mediaFeature;
+ CSSParserValueList m_valueList;
+ bool m_mediaTypeSet;
+
+public:
+ MediaQueryData();
+ void clear();
+ bool addExpression();
+ void addParserValue(MediaQueryTokenType, MediaQueryToken&);
+ void setMediaType(const String&);
+ PassOwnPtr<MediaQuery> takeMediaQuery();
+
+ inline bool currentMediaQueryChanged() const
+ {
+ return (m_restrictor != MediaQuery::None || m_mediaTypeSet || m_expressions->size() > 0);
+ }
+
+ inline void setRestrictor(MediaQuery::Restrictor restrictor) { m_restrictor = restrictor; }
+
+ inline void setMediaFeature(const String& str) { m_mediaFeature = str; }
+};
+
+class MediaQueryParser {
+public:
+ static PassRefPtrWillBeRawPtr<MediaQuerySet> parse(const String&);
+
+private:
+ MediaQueryParser(const String&);
+ virtual ~MediaQueryParser() { };
+
+ PassRefPtrWillBeRawPtr<MediaQuerySet> parseImpl();
+
+ typedef Vector<MediaQueryToken>::iterator TokenIterator;
+
+ void processToken(TokenIterator&);
+
+ void readRestrictor(MediaQueryTokenType, TokenIterator&);
+ void readMediaType(MediaQueryTokenType, TokenIterator&);
+ void readAnd(MediaQueryTokenType, TokenIterator&);
+ void readFeatureStart(MediaQueryTokenType, TokenIterator&);
+ void readFeature(MediaQueryTokenType, TokenIterator&);
+ void readFeatureColon(MediaQueryTokenType, TokenIterator&);
+ void readFeatureValue(MediaQueryTokenType, TokenIterator&);
+ void readFeatureEnd(MediaQueryTokenType, TokenIterator&);
+ void skipUntilComma(MediaQueryTokenType, TokenIterator&);
+ void skipUntilParenthesis(MediaQueryTokenType, TokenIterator&);
+ void done(MediaQueryTokenType, TokenIterator&);
+
+ typedef void (MediaQueryParser::*State)(MediaQueryTokenType, TokenIterator&);
+
+ void setStateAndRestrict(State, MediaQuery::Restrictor);
+
+ State m_state;
+ Vector<MediaQueryToken> m_tokens;
+ MediaQueryData m_mediaQueryData;
+ RefPtrWillBeMember<MediaQuerySet> m_querySet;
+
+ const static State ReadRestrictor;
+ const static State ReadMediaType;
+ const static State ReadAnd;
+ const static State ReadFeatureStart;
+ const static State ReadFeature;
+ const static State ReadFeatureColon;
+ const static State ReadFeatureValue;
+ const static State ReadFeatureEnd;
+ const static State SkipUntilComma;
+ const static State SkipUntilParenthesis;
+ const static State Done;
+
+};
+
+} // namespace WebCore
+
+#endif // MediaQueryParser_h

Powered by Google App Engine
This is Rietveld 408576698