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

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

Issue 2837023005: Move MediaQuery classes off BlinkGC heap (Closed)
Patch Set: fix 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 "platform/wtf/Vector.h" 9 #include "platform/wtf/Vector.h"
10 10
11 namespace blink { 11 namespace blink {
12 12
13 MediaQuerySet* MediaQueryParser::ParseMediaQuerySet( 13 RefPtr<MediaQuerySet> MediaQueryParser::ParseMediaQuerySet(
14 const String& query_string) { 14 const String& query_string) {
15 return ParseMediaQuerySet(CSSTokenizer(query_string).TokenRange()); 15 return ParseMediaQuerySet(CSSTokenizer(query_string).TokenRange());
16 } 16 }
17 17
18 MediaQuerySet* MediaQueryParser::ParseMediaQuerySet(CSSParserTokenRange range) { 18 RefPtr<MediaQuerySet> MediaQueryParser::ParseMediaQuerySet(
19 CSSParserTokenRange range) {
19 return MediaQueryParser(kMediaQuerySetParser).ParseImpl(range); 20 return MediaQueryParser(kMediaQuerySetParser).ParseImpl(range);
20 } 21 }
21 22
22 MediaQuerySet* MediaQueryParser::ParseMediaCondition( 23 RefPtr<MediaQuerySet> MediaQueryParser::ParseMediaCondition(
23 CSSParserTokenRange range) { 24 CSSParserTokenRange range) {
24 return MediaQueryParser(kMediaConditionParser).ParseImpl(range); 25 return MediaQueryParser(kMediaConditionParser).ParseImpl(range);
25 } 26 }
26 27
27 const MediaQueryParser::State MediaQueryParser::kReadRestrictor = 28 const MediaQueryParser::State MediaQueryParser::kReadRestrictor =
28 &MediaQueryParser::ReadRestrictor; 29 &MediaQueryParser::ReadRestrictor;
29 const MediaQueryParser::State MediaQueryParser::kReadMediaNot = 30 const MediaQueryParser::State MediaQueryParser::kReadMediaNot =
30 &MediaQueryParser::ReadMediaNot; 31 &MediaQueryParser::ReadMediaNot;
31 const MediaQueryParser::State MediaQueryParser::kReadMediaType = 32 const MediaQueryParser::State MediaQueryParser::kReadMediaType =
32 &MediaQueryParser::ReadMediaType; 33 &MediaQueryParser::ReadMediaType;
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after
219 220
220 HandleBlocks(token); 221 HandleBlocks(token);
221 block_watcher_.HandleToken(token); 222 block_watcher_.HandleToken(token);
222 223
223 // Call the function that handles current state 224 // Call the function that handles current state
224 if (type != kWhitespaceToken) 225 if (type != kWhitespaceToken)
225 ((this)->*(state_))(type, token); 226 ((this)->*(state_))(type, token);
226 } 227 }
227 228
228 // The state machine loop 229 // The state machine loop
229 MediaQuerySet* MediaQueryParser::ParseImpl(CSSParserTokenRange range) { 230 RefPtr<MediaQuerySet> MediaQueryParser::ParseImpl(CSSParserTokenRange range) {
230 while (!range.AtEnd()) 231 while (!range.AtEnd())
231 ProcessToken(range.Consume()); 232 ProcessToken(range.Consume());
232 233
233 // FIXME: Can we get rid of this special case? 234 // FIXME: Can we get rid of this special case?
234 if (parser_type_ == kMediaQuerySetParser) 235 if (parser_type_ == kMediaQuerySetParser)
235 ProcessToken(CSSParserToken(kEOFToken)); 236 ProcessToken(CSSParserToken(kEOFToken));
236 237
237 if (state_ != kReadAnd && state_ != kReadRestrictor && state_ != kDone && 238 if (state_ != kReadAnd && state_ != kReadRestrictor && state_ != kDone &&
238 state_ != kReadMediaNot) 239 state_ != kReadMediaNot)
239 query_set_->AddMediaQuery(MediaQuery::CreateNotAll()); 240 query_set_->AddMediaQuery(MediaQuery::CreateNotAll());
(...skipping 10 matching lines...) Expand all
250 251
251 void MediaQueryData::Clear() { 252 void MediaQueryData::Clear() {
252 restrictor_ = MediaQuery::kNone; 253 restrictor_ = MediaQuery::kNone;
253 media_type_ = MediaTypeNames::all; 254 media_type_ = MediaTypeNames::all;
254 media_type_set_ = false; 255 media_type_set_ = false;
255 media_feature_ = String(); 256 media_feature_ = String();
256 value_list_.clear(); 257 value_list_.clear();
257 expressions_.clear(); 258 expressions_.clear();
258 } 259 }
259 260
260 MediaQuery* MediaQueryData::TakeMediaQuery() { 261 std::unique_ptr<MediaQuery> MediaQueryData::TakeMediaQuery() {
261 MediaQuery* media_query = MediaQuery::Create( 262 std::unique_ptr<MediaQuery> media_query = MediaQuery::Create(
262 restrictor_, std::move(media_type_), std::move(expressions_)); 263 restrictor_, std::move(media_type_), std::move(expressions_));
263 Clear(); 264 Clear();
264 return media_query; 265 return media_query;
265 } 266 }
266 267
267 bool MediaQueryData::AddExpression() { 268 bool MediaQueryData::AddExpression() {
268 MediaQueryExp* expression = 269 MediaQueryExp expression = MediaQueryExp::Create(media_feature_, value_list_);
269 MediaQueryExp::CreateIfValid(media_feature_, value_list_);
270 bool is_valid = !!expression;
271 expressions_.push_back(expression); 270 expressions_.push_back(expression);
272 value_list_.clear(); 271 value_list_.clear();
273 return is_valid; 272 return expression.IsValid();
274 } 273 }
275 274
276 bool MediaQueryData::TryAddParserToken(CSSParserTokenType type, 275 bool MediaQueryData::TryAddParserToken(CSSParserTokenType type,
277 const CSSParserToken& token) { 276 const CSSParserToken& token) {
278 if (type == kNumberToken || type == kPercentageToken || 277 if (type == kNumberToken || type == kPercentageToken ||
279 type == kDimensionToken || type == kDelimiterToken || 278 type == kDimensionToken || type == kDelimiterToken ||
280 type == kIdentToken) { 279 type == kIdentToken) {
281 value_list_.push_back(token); 280 value_list_.push_back(token);
282 return true; 281 return true;
283 } 282 }
284 283
285 return false; 284 return false;
286 } 285 }
287 286
288 void MediaQueryData::SetMediaType(const String& media_type) { 287 void MediaQueryData::SetMediaType(const String& media_type) {
289 media_type_ = media_type; 288 media_type_ = media_type;
290 media_type_set_ = true; 289 media_type_set_ = true;
291 } 290 }
292 291
293 } // namespace blink 292 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698