StyleSheetList.cpp [plain text]
#include "config.h"
#include "StyleSheetList.h"
#include "CSSStyleSheet.h"
#include "Document.h"
#include "HTMLNames.h"
#include "HTMLStyleElement.h"
#include "ShadowRoot.h"
#include "StyleScope.h"
#include <wtf/text/WTFString.h>
namespace WebCore {
using namespace HTMLNames;
StyleSheetList::StyleSheetList(Document& document)
: m_document(&document)
{
}
StyleSheetList::StyleSheetList(ShadowRoot& shadowRoot)
: m_shadowRoot(&shadowRoot)
{
}
StyleSheetList::~StyleSheetList() = default;
inline const Vector<RefPtr<StyleSheet>>& StyleSheetList::styleSheets() const
{
if (m_document)
return m_document->styleScope().styleSheetsForStyleSheetList();
if (m_shadowRoot)
return m_shadowRoot->styleScope().styleSheetsForStyleSheetList();
return m_detachedStyleSheets;
}
Node* StyleSheetList::ownerNode() const
{
if (m_document)
return m_document;
return m_shadowRoot;
}
void StyleSheetList::detach()
{
if (m_document) {
ASSERT(!m_shadowRoot);
m_detachedStyleSheets = m_document->styleScope().styleSheetsForStyleSheetList();
m_document = nullptr;
} else if (m_shadowRoot) {
ASSERT(!m_document);
m_detachedStyleSheets = m_shadowRoot->styleScope().styleSheetsForStyleSheetList();
m_shadowRoot = nullptr;
} else
ASSERT_NOT_REACHED();
}
unsigned StyleSheetList::length() const
{
return styleSheets().size();
}
StyleSheet* StyleSheetList::item(unsigned index)
{
const Vector<RefPtr<StyleSheet>>& sheets = styleSheets();
return index < sheets.size() ? sheets[index].get() : 0;
}
CSSStyleSheet* StyleSheetList::namedItem(const AtomicString& name) const
{
if (!m_document)
return nullptr;
Element* element = m_document->getElementById(name);
if (is<HTMLStyleElement>(element))
return downcast<HTMLStyleElement>(element)->sheet();
return nullptr;
}
Vector<AtomicString> StyleSheetList::supportedPropertyNames()
{
return Vector<AtomicString>();
}
}