diff options
Diffstat (limited to 'Source/WebCore/css/CSSValueList.h')
-rw-r--r-- | Source/WebCore/css/CSSValueList.h | 88 |
1 files changed, 34 insertions, 54 deletions
diff --git a/Source/WebCore/css/CSSValueList.h b/Source/WebCore/css/CSSValueList.h index fa82a9ad0..b3300affe 100644 --- a/Source/WebCore/css/CSSValueList.h +++ b/Source/WebCore/css/CSSValueList.h @@ -18,99 +18,79 @@ * Boston, MA 02110-1301, USA. */ -#ifndef CSSValueList_h -#define CSSValueList_h +#pragma once #include "CSSValue.h" -#include <wtf/PassRefPtr.h> #include <wtf/Vector.h> namespace WebCore { +class CSSCustomPropertyValue; +struct CSSParserValue; class CSSParserValueList; class CSSValueList : public CSSValue { public: - static PassRef<CSSValueList> createCommaSeparated() + typedef Vector<Ref<CSSValue>, 4>::iterator iterator; + typedef Vector<Ref<CSSValue>, 4>::const_iterator const_iterator; + + static Ref<CSSValueList> createCommaSeparated() { return adoptRef(*new CSSValueList(CommaSeparator)); } - static PassRef<CSSValueList> createSpaceSeparated() + static Ref<CSSValueList> createSpaceSeparated() { return adoptRef(*new CSSValueList(SpaceSeparator)); } - static PassRef<CSSValueList> createSlashSeparated() + static Ref<CSSValueList> createSlashSeparated() { return adoptRef(*new CSSValueList(SlashSeparator)); } - static PassRef<CSSValueList> createFromParserValueList(CSSParserValueList& list) - { - return adoptRef(*new CSSValueList(list)); - } size_t length() const { return m_values.size(); } - CSSValue* item(size_t index) { return index < m_values.size() ? m_values[index].get() : 0; } - const CSSValue* item(size_t index) const { return index < m_values.size() ? m_values[index].get() : 0; } - CSSValue* itemWithoutBoundsCheck(size_t index) { return m_values[index].get(); } - const CSSValue* itemWithoutBoundsCheck(size_t index) const { ASSERT(index < m_values.size()); return m_values[index].get(); } - - void append(PassRefPtr<CSSValue> value) { m_values.append(value); } - void prepend(PassRefPtr<CSSValue> value) { m_values.insert(0, value); } + CSSValue* item(size_t index) { return index < m_values.size() ? m_values[index].ptr() : nullptr; } + const CSSValue* item(size_t index) const { return index < m_values.size() ? m_values[index].ptr() : nullptr; } + CSSValue* itemWithoutBoundsCheck(size_t index) { return m_values[index].ptr(); } + const CSSValue* itemWithoutBoundsCheck(size_t index) const { ASSERT(index < m_values.size()); return m_values[index].ptr(); } + + const_iterator begin() const { return m_values.begin(); } + const_iterator end() const { return m_values.end(); } + iterator begin() { return m_values.begin(); } + iterator end() { return m_values.end(); } + + void append(Ref<CSSValue>&&); + void prepend(Ref<CSSValue>&&); bool removeAll(CSSValue*); bool hasValue(CSSValue*) const; - PassRefPtr<CSSValueList> copy(); + Ref<CSSValueList> copy(); String customCSSText() const; bool equals(const CSSValueList&) const; bool equals(const CSSValue&) const; - void addSubresourceStyleURLs(ListHashSet<URL>&, const StyleSheetContents*) const; + bool traverseSubresources(const std::function<bool (const CachedResource&)>& handler) const; - bool hasFailedOrCanceledSubresources() const; - - PassRefPtr<CSSValueList> cloneForCSSOM() const; + unsigned separator() const { return m_valueListSeparator; } protected: CSSValueList(ClassType, ValueListSeparator); - CSSValueList(const CSSValueList& cloneFrom); private: explicit CSSValueList(ValueListSeparator); - explicit CSSValueList(CSSParserValueList&); - Vector<RefPtr<CSSValue>, 4> m_values; + Vector<Ref<CSSValue>, 4> m_values; }; -CSS_VALUE_TYPE_CASTS(CSSValueList, isValueList()) +inline void CSSValueList::append(Ref<CSSValue>&& value) +{ + m_values.append(WTFMove(value)); +} -// Objects of this class are intended to be stack-allocated and scoped to a single function. -// Please take care not to pass these around as they do hold onto a raw pointer. -class CSSValueListInspector { -public: - CSSValueListInspector(CSSValue* value) : m_list((value && value->isValueList()) ? toCSSValueList(value) : 0) { } - CSSValue* item(size_t index) const { ASSERT_WITH_SECURITY_IMPLICATION(index < length()); return m_list->itemWithoutBoundsCheck(index); } - CSSValue* first() const { return item(0); } - CSSValue* second() const { return item(1); } - size_t length() const { return m_list ? m_list->length() : 0; } -private: - CSSValueList* m_list; -}; +inline void CSSValueList::prepend(Ref<CSSValue>&& value) +{ + m_values.insert(0, WTFMove(value)); +} -// Wrapper that can be used to iterate over any CSSValue. Non-list values and 0 behave as zero-length lists. -// Objects of this class are intended to be stack-allocated and scoped to a single function. -// Please take care not to pass these around as they do hold onto a raw pointer. -class CSSValueListIterator { -public: - CSSValueListIterator(CSSValue* value) : m_inspector(value), m_position(0) { } - bool hasMore() const { return m_position < m_inspector.length(); } - CSSValue* value() const { return m_inspector.item(m_position); } - bool isPrimitiveValue() const { return value()->isPrimitiveValue(); } - void advance() { m_position++; ASSERT(m_position <= m_inspector.length());} - size_t index() const { return m_position; } -private: - CSSValueListInspector m_inspector; - size_t m_position; -}; } // namespace WebCore -#endif // CSSValueList_h +SPECIALIZE_TYPE_TRAITS_CSS_VALUE(CSSValueList, isValueList()) |