110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch// found in the LICENSE file.
410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch
510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch#ifndef SizesAttributeParser_h
610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch#define SizesAttributeParser_h
710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch
810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch#include "core/css/MediaValues.h"
910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch#include "core/css/parser/MediaQueryParser.h"
1010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch#include "platform/heap/Handle.h"
1110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch#include "wtf/text/WTFString.h"
1210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch
13c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink {
1410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch
1510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochclass SizesAttributeParser {
1610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    STACK_ALLOCATED();
1710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochpublic:
18c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    SizesAttributeParser(PassRefPtr<MediaValues>, const String&);
1910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch
20c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    bool viewportDependant() const { return m_viewportDependant; }
21c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    unsigned length();
2210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch
23c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)private:
2410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    bool parse(Vector<MediaQueryToken>& tokens);
25f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    bool parseMediaConditionAndLength(MediaQueryTokenIterator startToken, MediaQueryTokenIterator endToken);
2610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    unsigned effectiveSize();
27f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    bool calculateLengthInPixels(MediaQueryTokenIterator startToken, MediaQueryTokenIterator endToken, unsigned& result);
2810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    bool mediaConditionMatches(PassRefPtrWillBeRawPtr<MediaQuerySet> mediaCondition);
2910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    unsigned effectiveSizeDefaultValue();
3010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch
3110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    RefPtrWillBeMember<MediaQuerySet> m_mediaCondition;
3210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    RefPtr<MediaValues> m_mediaValues;
3310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    unsigned m_length;
34f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    bool m_lengthWasSet;
35c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    bool m_viewportDependant;
36c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    Vector<MediaQueryToken> m_tokens;
37c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    bool m_isValid;
3810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch};
3910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch
4010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch} // namespace
4110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch
4210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch#endif
4310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch
44