1// Copyright 2015 The Chromium Authors. All rights reserved.
2// Copyright (C) 2016 Apple Inc. All rights reserved.
3//
4// Redistribution and use in source and binary forms, with or without
5// modification, are permitted provided that the following conditions are
6// met:
7//
8// * Redistributions of source code must retain the above copyright
9// notice, this list of conditions and the following disclaimer.
10// * Redistributions in binary form must reproduce the above
11// copyright notice, this list of conditions and the following disclaimer
12// in the documentation and/or other materials provided with the
13// distribution.
14// * Neither the name of Google Inc. nor the names of its
15// contributors may be used to endorse or promote products derived from
16// this software without specific prior written permission.
17//
18// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
30#pragma once
31
32#include "CSSParserToken.h"
33#include "CSSParserTokenRange.h"
34#include "CSSValue.h"
35#include "CSSVariableData.h"
36#include <wtf/HashSet.h>
37#include <wtf/RefPtr.h>
38#include <wtf/text/WTFString.h>
39
40namespace WebCore {
41
42struct ApplyCascadedPropertyState;
43class CSSParserTokenRange;
44
45class CSSVariableReferenceValue : public CSSValue {
46public:
47 static Ref<CSSVariableReferenceValue> create(const CSSParserTokenRange& range)
48 {
49 return adoptRef(*new CSSVariableReferenceValue(CSSVariableData::create(range)));
50 }
51
52 bool equals(const CSSVariableReferenceValue& other) const { return m_data.get() == other.m_data.get(); }
53 String customCSSText() const;
54
55 RefPtr<CSSVariableData> resolveVariableReferences(ApplyCascadedPropertyState&) const;
56
57private:
58 CSSVariableReferenceValue(Ref<CSSVariableData>&& data)
59 : CSSValue(VariableReferenceClass)
60 , m_data(WTFMove(data))
61 {
62 }
63
64 Ref<CSSVariableData> m_data;
65 mutable String m_stringValue;
66 mutable bool m_serialized { false };
67};
68
69} // namespace WebCore
70
71SPECIALIZE_TYPE_TRAITS_CSS_VALUE(CSSVariableReferenceValue, isVariableReferenceValue())
72