#ifndef HTMLStyleElement_h
#define HTMLStyleElement_h
#include "core/dom/StyleElement.h"
#include "core/html/HTMLElement.h"
namespace WebCore {
class HTMLStyleElement;
class StyleSheet;
template<typename T> class EventSender;
typedef EventSender<HTMLStyleElement> StyleEventSender;
class HTMLStyleElement FINAL : public HTMLElement, private StyleElement {
public:
static PassRefPtr<HTMLStyleElement> create(Document&, bool createdByParser);
virtual ~HTMLStyleElement();
void setType(const AtomicString&);
bool scoped() const;
void setScoped(bool);
ContainerNode* scopingNode();
bool isRegisteredAsScoped() const
{
if (m_scopedStyleRegistrationState == NotRegistered)
return false;
return true;
}
bool isRegisteredInShadowRoot() const
{
return m_scopedStyleRegistrationState == RegisteredInShadowRoot;
}
using StyleElement::sheet;
bool disabled() const;
void setDisabled(bool);
void dispatchPendingEvent(StyleEventSender*);
static void dispatchPendingLoadEvents();
private:
HTMLStyleElement(Document&, bool createdByParser);
virtual void parseAttribute(const QualifiedName&, const AtomicString&) OVERRIDE;
virtual InsertionNotificationRequest insertedInto(ContainerNode*) OVERRIDE;
virtual void didNotifySubtreeInsertionsToDocument() OVERRIDE;
virtual void removedFrom(ContainerNode*) OVERRIDE;
virtual void childrenChanged(bool changedByParser = false, Node* beforeChange = 0, Node* afterChange = 0, int childCountDelta = 0) OVERRIDE;
virtual void finishParsingChildren() OVERRIDE;
virtual bool sheetLoaded() OVERRIDE { return StyleElement::sheetLoaded(document()); }
virtual void notifyLoadedSheetAndAllCriticalSubresources(bool errorOccurred) OVERRIDE;
virtual void startLoadingDynamicSheet() OVERRIDE { StyleElement::startLoadingDynamicSheet(document()); }
virtual const AtomicString& media() const OVERRIDE;
virtual const AtomicString& type() const OVERRIDE;
void scopedAttributeChanged(bool);
void registerWithScopingNode(bool);
void unregisterWithScopingNode(ContainerNode*);
bool m_firedLoad;
bool m_loadedSheet;
enum ScopedStyleRegistrationState {
NotRegistered,
RegisteredAsScoped,
RegisteredInShadowRoot
};
ScopedStyleRegistrationState m_scopedStyleRegistrationState;
};
}
#endif