diff options
Diffstat (limited to 'Source/WebCore/css/CSSValueList.cpp')
-rw-r--r-- | Source/WebCore/css/CSSValueList.cpp | 94 |
1 files changed, 37 insertions, 57 deletions
diff --git a/Source/WebCore/css/CSSValueList.cpp b/Source/WebCore/css/CSSValueList.cpp index 4b459603b..b6f65b77a 100644 --- a/Source/WebCore/css/CSSValueList.cpp +++ b/Source/WebCore/css/CSSValueList.cpp @@ -21,8 +21,10 @@ #include "config.h" #include "CSSValueList.h" -#include "CSSParserValues.h" -#include <wtf/PassOwnPtr.h> +#include "CSSCustomPropertyValue.h" +#include "CSSFunctionValue.h" +#include "CSSPrimitiveValue.h" +#include "DeprecatedCSSOMValue.h" #include <wtf/text/StringBuilder.h> namespace WebCore { @@ -39,40 +41,31 @@ CSSValueList::CSSValueList(ValueListSeparator listSeparator) m_valueListSeparator = listSeparator; } -CSSValueList::CSSValueList(CSSParserValueList& parserValues) - : CSSValue(ValueListClass) -{ - m_valueListSeparator = SpaceSeparator; - m_values.reserveInitialCapacity(parserValues.size()); - for (unsigned i = 0, size = parserValues.size(); i < size; ++i) - m_values.uncheckedAppend(parserValues.valueAt(i)->createCSSValue()); -} - -bool CSSValueList::removeAll(CSSValue* val) +bool CSSValueList::removeAll(CSSValue* value) { - bool found = false; - for (size_t index = 0; index < m_values.size(); index++) { - RefPtr<CSSValue>& value = m_values.at(index); - if (value && val && value->equals(*val)) { - m_values.remove(index); - found = true; - } - } + // FIXME: Why even take a pointer? + if (!value) + return false; - return found; + return m_values.removeAllMatching([value](auto& current) { + return current->equals(*value); + }) > 0; } bool CSSValueList::hasValue(CSSValue* val) const { - for (size_t index = 0; index < m_values.size(); index++) { - const RefPtr<CSSValue>& value = m_values.at(index); - if (value && val && value->equals(*val)) + // FIXME: Why even take a pointer? + if (!val) + return false; + + for (unsigned i = 0, size = m_values.size(); i < size; ++i) { + if (m_values[i].get().equals(*val)) return true; } return false; } -PassRefPtr<CSSValueList> CSSValueList::copy() +Ref<CSSValueList> CSSValueList::copy() { RefPtr<CSSValueList> newList; switch (m_valueListSeparator) { @@ -88,9 +81,9 @@ PassRefPtr<CSSValueList> CSSValueList::copy() default: ASSERT_NOT_REACHED(); } - for (size_t index = 0; index < m_values.size(); index++) - newList->append(m_values[index]); - return newList.release(); + for (auto& value : m_values) + newList->append(value.get()); + return newList.releaseNonNull(); } String CSSValueList::customCSSText() const @@ -111,11 +104,10 @@ String CSSValueList::customCSSText() const ASSERT_NOT_REACHED(); } - unsigned size = m_values.size(); - for (unsigned i = 0; i < size; i++) { + for (auto& value : m_values) { if (!result.isEmpty()) result.append(separator); - result.append(m_values[i]->cssText()); + result.append(value.get().cssText()); } return result.toString(); @@ -123,7 +115,17 @@ String CSSValueList::customCSSText() const bool CSSValueList::equals(const CSSValueList& other) const { - return m_valueListSeparator == other.m_valueListSeparator && compareCSSValueVector<CSSValue>(m_values, other.m_values); + if (m_valueListSeparator != other.m_valueListSeparator) + return false; + + if (m_values.size() != other.m_values.size()) + return false; + + for (unsigned i = 0, size = m_values.size(); i < size; ++i) { + if (!m_values[i].get().equals(other.m_values[i])) + return false; + } + return true; } bool CSSValueList::equals(const CSSValue& other) const @@ -131,38 +133,16 @@ bool CSSValueList::equals(const CSSValue& other) const if (m_values.size() != 1) return false; - const RefPtr<CSSValue>& value = m_values[0]; - return value && value->equals(other); -} - -void CSSValueList::addSubresourceStyleURLs(ListHashSet<URL>& urls, const StyleSheetContents* styleSheet) const -{ - size_t size = m_values.size(); - for (size_t i = 0; i < size; ++i) - m_values[i]->addSubresourceStyleURLs(urls, styleSheet); + return m_values[0].get().equals(other); } -bool CSSValueList::hasFailedOrCanceledSubresources() const +bool CSSValueList::traverseSubresources(const std::function<bool (const CachedResource&)>& handler) const { for (unsigned i = 0; i < m_values.size(); ++i) { - if (m_values[i]->hasFailedOrCanceledSubresources()) + if (m_values[i].get().traverseSubresources(handler)) return true; } return false; } -CSSValueList::CSSValueList(const CSSValueList& cloneFrom) - : CSSValue(cloneFrom.classType(), /* isCSSOMSafe */ true) -{ - m_valueListSeparator = cloneFrom.m_valueListSeparator; - m_values.resize(cloneFrom.m_values.size()); - for (unsigned i = 0; i < m_values.size(); ++i) - m_values[i] = cloneFrom.m_values[i]->cloneForCSSOM(); -} - -PassRefPtr<CSSValueList> CSSValueList::cloneForCSSOM() const -{ - return adoptRef(new CSSValueList(*this)); -} - } // namespace WebCore |