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

Side by Side Diff: third_party/WebKit/Source/core/css/parser/MediaQueryParser.cpp

Issue 2873433003: Move MediaQuery classes off BlinkGC heap (Closed)
Patch Set: Created 3 years, 7 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
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "core/css/parser/MediaQueryParser.h" 5 #include "core/css/parser/MediaQueryParser.h"
6 6
7 #include "core/MediaTypeNames.h" 7 #include "core/MediaTypeNames.h"
8 #include "core/css/parser/CSSTokenizer.h" 8 #include "core/css/parser/CSSTokenizer.h"
9 #include "wtf/Vector.h" 9 #include "wtf/Vector.h"
10 10
11 namespace blink { 11 namespace blink {
12 12
13 MediaQuerySet* MediaQueryParser::parseMediaQuerySet(const String& queryString) { 13 RefPtr<MediaQuerySet> MediaQueryParser::parseMediaQuerySet(
14 const String& queryString) {
14 return parseMediaQuerySet(CSSTokenizer(queryString).tokenRange()); 15 return parseMediaQuerySet(CSSTokenizer(queryString).tokenRange());
15 } 16 }
16 17
17 MediaQuerySet* MediaQueryParser::parseMediaQuerySet(CSSParserTokenRange range) { 18 RefPtr<MediaQuerySet> MediaQueryParser::parseMediaQuerySet(
19 CSSParserTokenRange range) {
18 return MediaQueryParser(MediaQuerySetParser).parseImpl(range); 20 return MediaQueryParser(MediaQuerySetParser).parseImpl(range);
19 } 21 }
20 22
21 MediaQuerySet* MediaQueryParser::parseMediaCondition( 23 RefPtr<MediaQuerySet> MediaQueryParser::parseMediaCondition(
22 CSSParserTokenRange range) { 24 CSSParserTokenRange range) {
23 return MediaQueryParser(MediaConditionParser).parseImpl(range); 25 return MediaQueryParser(MediaConditionParser).parseImpl(range);
24 } 26 }
25 27
26 const MediaQueryParser::State MediaQueryParser::ReadRestrictor = 28 const MediaQueryParser::State MediaQueryParser::ReadRestrictor =
27 &MediaQueryParser::readRestrictor; 29 &MediaQueryParser::readRestrictor;
28 const MediaQueryParser::State MediaQueryParser::ReadMediaNot = 30 const MediaQueryParser::State MediaQueryParser::ReadMediaNot =
29 &MediaQueryParser::readMediaNot; 31 &MediaQueryParser::readMediaNot;
30 const MediaQueryParser::State MediaQueryParser::ReadMediaType = 32 const MediaQueryParser::State MediaQueryParser::ReadMediaType =
31 &MediaQueryParser::readMediaType; 33 &MediaQueryParser::readMediaType;
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after
218 220
219 handleBlocks(token); 221 handleBlocks(token);
220 m_blockWatcher.handleToken(token); 222 m_blockWatcher.handleToken(token);
221 223
222 // Call the function that handles current state 224 // Call the function that handles current state
223 if (type != WhitespaceToken) 225 if (type != WhitespaceToken)
224 ((this)->*(m_state))(type, token); 226 ((this)->*(m_state))(type, token);
225 } 227 }
226 228
227 // The state machine loop 229 // The state machine loop
228 MediaQuerySet* MediaQueryParser::parseImpl(CSSParserTokenRange range) { 230 RefPtr<MediaQuerySet> MediaQueryParser::parseImpl(CSSParserTokenRange range) {
229 while (!range.atEnd()) 231 while (!range.atEnd())
230 processToken(range.consume()); 232 processToken(range.consume());
231 233
232 // FIXME: Can we get rid of this special case? 234 // FIXME: Can we get rid of this special case?
233 if (m_parserType == MediaQuerySetParser) 235 if (m_parserType == MediaQuerySetParser)
234 processToken(CSSParserToken(EOFToken)); 236 processToken(CSSParserToken(EOFToken));
235 237
236 if (m_state != ReadAnd && m_state != ReadRestrictor && m_state != Done && 238 if (m_state != ReadAnd && m_state != ReadRestrictor && m_state != Done &&
237 m_state != ReadMediaNot) 239 m_state != ReadMediaNot)
238 m_querySet->addMediaQuery(MediaQuery::createNotAll()); 240 m_querySet->addMediaQuery(MediaQuery::createNotAll());
(...skipping 10 matching lines...) Expand all
249 251
250 void MediaQueryData::clear() { 252 void MediaQueryData::clear() {
251 m_restrictor = MediaQuery::None; 253 m_restrictor = MediaQuery::None;
252 m_mediaType = MediaTypeNames::all; 254 m_mediaType = MediaTypeNames::all;
253 m_mediaTypeSet = false; 255 m_mediaTypeSet = false;
254 m_mediaFeature = String(); 256 m_mediaFeature = String();
255 m_valueList.clear(); 257 m_valueList.clear();
256 m_expressions.clear(); 258 m_expressions.clear();
257 } 259 }
258 260
259 MediaQuery* MediaQueryData::takeMediaQuery() { 261 std::unique_ptr<MediaQuery> MediaQueryData::takeMediaQuery() {
260 MediaQuery* mediaQuery = MediaQuery::create( 262 std::unique_ptr<MediaQuery> mediaQuery = MediaQuery::create(
261 m_restrictor, std::move(m_mediaType), std::move(m_expressions)); 263 m_restrictor, std::move(m_mediaType), std::move(m_expressions));
262 clear(); 264 clear();
263 return mediaQuery; 265 return mediaQuery;
264 } 266 }
265 267
266 bool MediaQueryData::addExpression() { 268 bool MediaQueryData::addExpression() {
267 MediaQueryExp* expression = 269 MediaQueryExp expression = MediaQueryExp::create(m_mediaFeature, m_valueList);
268 MediaQueryExp::createIfValid(m_mediaFeature, m_valueList);
269 bool isValid = !!expression;
270 m_expressions.push_back(expression); 270 m_expressions.push_back(expression);
271 m_valueList.clear(); 271 m_valueList.clear();
272 return isValid; 272 return expression.isValid();
273 } 273 }
274 274
275 bool MediaQueryData::tryAddParserToken(CSSParserTokenType type, 275 bool MediaQueryData::tryAddParserToken(CSSParserTokenType type,
276 const CSSParserToken& token) { 276 const CSSParserToken& token) {
277 if (type == NumberToken || type == PercentageToken || 277 if (type == NumberToken || type == PercentageToken ||
278 type == DimensionToken || type == DelimiterToken || type == IdentToken) { 278 type == DimensionToken || type == DelimiterToken || type == IdentToken) {
279 m_valueList.push_back(token); 279 m_valueList.push_back(token);
280 return true; 280 return true;
281 } 281 }
282 282
283 return false; 283 return false;
284 } 284 }
285 285
286 void MediaQueryData::setMediaType(const String& mediaType) { 286 void MediaQueryData::setMediaType(const String& mediaType) {
287 m_mediaType = mediaType; 287 m_mediaType = mediaType;
288 m_mediaTypeSet = true; 288 m_mediaTypeSet = true;
289 } 289 }
290 290
291 } // namespace blink 291 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698