Use NeverDestroyed instead of DEPRECATED_DEFINE_STATIC_LOCAL
[WebKit-https.git] / Source / WebCore / svg / SVGStyleElement.cpp
index 2ecc242..045ae6d 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Copyright (C) 2004, 2005 Nikolas Zimmermann <zimmermann@kde.org>
  * Copyright (C) 2004, 2005, 2006, 2007 Rob Buis <buis@kde.org>
- * Copyright (C) 2006 Apple Inc. All rights reserved.
+ * Copyright (C) 2006, 2013 Apple Inc. All rights reserved.
  * Copyright (C) 2009 Cameron McCormack <cam@mcc.id.au>
  *
  * This library is free software; you can redistribute it and/or
  */
 
 #include "config.h"
-
-#if ENABLE(SVG)
 #include "SVGStyleElement.h"
 
-#include "Attribute.h"
 #include "CSSStyleSheet.h"
 #include "Document.h"
 #include "ExceptionCode.h"
 
 namespace WebCore {
 
-inline SVGStyleElement::SVGStyleElement(const QualifiedName& tagName, Document* document, bool createdByParser)
+inline SVGStyleElement::SVGStyleElement(const QualifiedName& tagName, Document& document, bool createdByParser)
     : SVGElement(tagName, document)
-    , StyleElement(document, createdByParser)
+    , m_styleSheetOwner(document, createdByParser)
+    , m_svgLoadEventTimer(*this, &SVGElement::svgLoadEventTimerFired)
 {
     ASSERT(hasTagName(SVGNames::styleTag));
 }
 
 SVGStyleElement::~SVGStyleElement()
 {
-    StyleElement::clearDocumentData(document(), this);
+    m_styleSheetOwner.clearDocumentData(document(), *this);
+}
+
+Ref<SVGStyleElement> SVGStyleElement::create(const QualifiedName& tagName, Document& document, bool createdByParser)
+{
+    return adoptRef(*new SVGStyleElement(tagName, document, createdByParser));
 }
 
-PassRefPtr<SVGStyleElement> SVGStyleElement::create(const QualifiedName& tagName, Document* document, bool createdByParser)
+bool SVGStyleElement::disabled() const
 {
-    return adoptRef(new SVGStyleElement(tagName, document, createdByParser));
+    return sheet() && sheet()->disabled();
+}
+
+void SVGStyleElement::setDisabled(bool setDisabled)
+{
+    if (CSSStyleSheet* styleSheet = sheet())
+        styleSheet->setDisabled(setDisabled);
 }
 
 const AtomicString& SVGStyleElement::type() const
 {
-    DEFINE_STATIC_LOCAL(const AtomicString, defaultValue, ("text/css"));
-    const AtomicString& n = fastGetAttribute(SVGNames::typeAttr);
-    return n.isNull() ? defaultValue : n;
+    static NeverDestroyed<const AtomicString> defaultValue("text/css", AtomicString::ConstructFromLiteral);
+    const AtomicString& n = getAttribute(SVGNames::typeAttr);
+    return n.isNull() ? defaultValue.get() : n;
 }
 
-void SVGStyleElement::setType(const AtomicString& type, ExceptionCode& ec)
+void SVGStyleElement::setType(const AtomicString& type, ExceptionCode&)
 {
-    setAttribute(SVGNames::typeAttr, type, ec);
+    setAttribute(SVGNames::typeAttr, type);
 }
 
 const AtomicString& SVGStyleElement::media() const
 {
-    DEFINE_STATIC_LOCAL(const AtomicString, defaultValue, ("all"));
+    static NeverDestroyed<const AtomicString> defaultValue("all", AtomicString::ConstructFromLiteral);
     const AtomicString& n = fastGetAttribute(SVGNames::mediaAttr);
-    return n.isNull() ? defaultValue : n;
+    return n.isNull() ? defaultValue.get() : n;
 }
 
-void SVGStyleElement::setMedia(const AtomicString& media, ExceptionCode& ec)
+void SVGStyleElement::setMedia(const AtomicString& media, ExceptionCode&)
 {
-    setAttribute(SVGNames::mediaAttr, media, ec);
+    setAttribute(SVGNames::mediaAttr, media);
 }
 
 String SVGStyleElement::title() const
@@ -80,64 +89,55 @@ String SVGStyleElement::title() const
     return fastGetAttribute(SVGNames::titleAttr);
 }
 
-void SVGStyleElement::setTitle(const AtomicString& title, ExceptionCode& ec)
+void SVGStyleElement::setTitle(const AtomicString& title, ExceptionCode&)
 {
-    setAttribute(SVGNames::titleAttr, title, ec);
+    setAttribute(SVGNames::titleAttr, title);
 }
 
-bool SVGStyleElement::isSupportedAttribute(const QualifiedName& attrName)
+void SVGStyleElement::parseAttribute(const QualifiedName& name, const AtomicString& value)
 {
-    DEFINE_STATIC_LOCAL(HashSet<QualifiedName>, supportedAttributes, ());
-    if (supportedAttributes.isEmpty()) {
-        SVGLangSpace::addSupportedAttributes(supportedAttributes);
-        supportedAttributes.add(SVGNames::titleAttr);
-    }
-    return supportedAttributes.contains<QualifiedName, SVGAttributeHashTranslator>(attrName);
-}
-
-void SVGStyleElement::parseMappedAttribute(Attribute* attr)
-{
-    if (!isSupportedAttribute(attr->name())) {
-        SVGElement::parseMappedAttribute(attr);
+    if (name == SVGNames::titleAttr) {
+        if (sheet())
+            sheet()->setTitle(value);
         return;
     }
-
-    if (attr->name() == SVGNames::titleAttr) {
-        if (m_sheet)
-            m_sheet->setTitle(attr->value());
+    if (name == SVGNames::typeAttr) {
+        m_styleSheetOwner.setContentType(value);
         return;
     }
-
-    if (SVGLangSpace::parseMappedAttribute(attr))
+    if (name == SVGNames::mediaAttr) {
+        m_styleSheetOwner.setMedia(value);
         return;
+    }
 
-    ASSERT_NOT_REACHED();
+    SVGElement::parseAttribute(name, value);
 }
 
 void SVGStyleElement::finishParsingChildren()
 {
-    StyleElement::finishParsingChildren(this);
+    m_styleSheetOwner.finishParsingChildren(*this);
     SVGElement::finishParsingChildren();
 }
 
-void SVGStyleElement::insertedIntoDocument()
+Node::InsertionNotificationRequest SVGStyleElement::insertedInto(ContainerNode& rootParent)
 {
-    SVGElement::insertedIntoDocument();
-    StyleElement::insertedIntoDocument(document(), this);
+    SVGElement::insertedInto(rootParent);
+    if (rootParent.inDocument())
+        m_styleSheetOwner.insertedIntoDocument(document(), *this);
+    return InsertionDone;
 }
 
-void SVGStyleElement::removedFromDocument()
+void SVGStyleElement::removedFrom(ContainerNode& rootParent)
 {
-    SVGElement::removedFromDocument();
-    StyleElement::removedFromDocument(document(), this);
+    SVGElement::removedFrom(rootParent);
+    if (rootParent.inDocument())
+        m_styleSheetOwner.removedFromDocument(document(), *this);
 }
 
-void SVGStyleElement::childrenChanged(bool changedByParser, Node* beforeChange, Node* afterChange, int childCountDelta)
+void SVGStyleElement::childrenChanged(const ChildChange& change)
 {
-    StyleElement::childrenChanged(this);
-    SVGElement::childrenChanged(changedByParser, beforeChange, afterChange, childCountDelta);
+    SVGElement::childrenChanged(change);
+    m_styleSheetOwner.childrenChanged(*this);
 }
 
 }
-
-#endif // ENABLE(SVG)