summaryrefslogtreecommitdiff
path: root/Source/WebCore/css/CSSValueList.h
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/css/CSSValueList.h')
-rw-r--r--Source/WebCore/css/CSSValueList.h88
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())