#ifndef MediaQueryExp_h
#define MediaQueryExp_h
#include "CSSValue.h"
#include "MediaFeatureNames.h"
#include <memory>
#include <wtf/text/AtomicString.h>
namespace WebCore {
class CSSParserValueList;
class MediaQueryExp {
WTF_MAKE_FAST_ALLOCATED;
public:
explicit MediaQueryExp(const AtomicString& mediaFeature = emptyAtom, CSSParserValueList* values = nullptr);
const AtomicString& mediaFeature() const;
CSSValue* value() const;
bool isValid() const;
bool isViewportDependent() const;
String serialize() const;
bool operator==(const MediaQueryExp&) const;
private:
AtomicString m_mediaFeature;
RefPtr<CSSValue> m_value;
bool m_isValid { false };
mutable String m_serializationCache;
};
inline const AtomicString& MediaQueryExp::mediaFeature() const
{
return m_mediaFeature;
}
inline CSSValue* MediaQueryExp::value() const
{
return m_value.get();
}
inline bool MediaQueryExp::operator==(const MediaQueryExp& other) const
{
return (other.m_mediaFeature == m_mediaFeature)
&& ((!other.m_value && !m_value)
|| (other.m_value && m_value && other.m_value->equals(*m_value)));
}
inline bool MediaQueryExp::isValid() const
{
return m_isValid;
}
inline bool MediaQueryExp::isViewportDependent() const
{
return m_mediaFeature == MediaFeatureNames::widthMediaFeature
|| m_mediaFeature == MediaFeatureNames::heightMediaFeature
|| m_mediaFeature == MediaFeatureNames::min_widthMediaFeature
|| m_mediaFeature == MediaFeatureNames::min_heightMediaFeature
|| m_mediaFeature == MediaFeatureNames::max_widthMediaFeature
|| m_mediaFeature == MediaFeatureNames::max_heightMediaFeature
|| m_mediaFeature == MediaFeatureNames::orientationMediaFeature
|| m_mediaFeature == MediaFeatureNames::aspect_ratioMediaFeature
|| m_mediaFeature == MediaFeatureNames::min_aspect_ratioMediaFeature
|| m_mediaFeature == MediaFeatureNames::max_aspect_ratioMediaFeature;
}
}
#endif