[WTF] Import std::optional reference implementation as WTF::Optional
[WebKit-https.git] / Source / WebCore / dom / PseudoElement.h
index 8a6bc84..367ada5 100644 (file)
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ifndef PseudoElement_h
-#define PseudoElement_h
+#pragma once
 
 #include "Element.h"
 #include "Event.h"
-#include "RenderStyle.h"
 #include <wtf/Forward.h>
 
 namespace WebCore {
 
-class PseudoElement FINAL : public Element {
+class PseudoElement final : public Element {
 public:
-    static PassRefPtr<PseudoElement> create(Element* host, PseudoId pseudoId)
+    static Ref<PseudoElement> create(Element& host, PseudoId pseudoId)
     {
-        return adoptRef(new PseudoElement(host, pseudoId));
+        return adoptRef(*new PseudoElement(host, pseudoId));
     }
-    ~PseudoElement();
+    virtual ~PseudoElement();
 
     Element* hostElement() const { return m_hostElement; }
-    void clearHostElement() { m_hostElement = 0; }
+    void clearHostElement();
 
-    virtual PassRefPtr<RenderStyle> customStyleForRenderer() OVERRIDE;
-    virtual void attach(const AttachContext& = AttachContext()) OVERRIDE;
-    virtual bool rendererIsNeeded(const NodeRenderingContext&) OVERRIDE;
+    std::optional<ElementStyle> resolveCustomStyle(const RenderStyle& parentStyle, const RenderStyle* shadowHostStyle) override;
+    void didAttachRenderers() override;
+    void didRecalcStyle(Style::Change) override;
+    bool rendererIsNeeded(const RenderStyle&) override;
 
     // As per http://dev.w3.org/csswg/css3-regions/#flow-into, pseudo-elements such as ::first-line, ::first-letter, ::before or ::after
     // cannot be directly collected into a named flow.
 #if ENABLE(CSS_REGIONS)
-    virtual bool shouldMoveToFlowThread(RenderStyle*) const OVERRIDE { return false; }
+    bool shouldMoveToFlowThread(const RenderStyle&) const override { return false; }
 #endif
 
-    virtual bool canStartSelection() const OVERRIDE { return false; }
-    virtual bool canContainRangeEndPoint() const OVERRIDE { return false; }
+    bool canStartSelection() const override { return false; }
+    bool canContainRangeEndPoint() const override { return false; }
 
     static String pseudoElementNameForEvents(PseudoId);
 
 private:
-    PseudoElement(Element*, PseudoId);
+    PseudoElement(Element&, PseudoId);
 
-    virtual void didRecalcStyle(Style::Change) OVERRIDE;
-    virtual PseudoId customPseudoId() const OVERRIDE { return m_pseudoId; }
+    PseudoId customPseudoId() const override { return m_pseudoId; }
 
     Element* m_hostElement;
     PseudoId m_pseudoId;
@@ -72,23 +70,8 @@ private:
 
 const QualifiedName& pseudoElementTagName();
 
-inline bool pseudoElementRendererIsNeeded(const RenderStyle* style)
-{
-    return style && style->display() != NONE && (style->contentData() || !style->regionThread().isEmpty());
-}
+} // namespace WebCore
 
-inline PseudoElement* toPseudoElement(Node* node)
-{
-    ASSERT_WITH_SECURITY_IMPLICATION(!node || node->isPseudoElement());
-    return static_cast<PseudoElement*>(node);
-}
-
-inline const PseudoElement* toPseudoElement(const Node* node)
-{
-    ASSERT_WITH_SECURITY_IMPLICATION(!node || node->isPseudoElement());
-    return static_cast<const PseudoElement*>(node);
-}
-
-} // namespace
-
-#endif
+SPECIALIZE_TYPE_TRAITS_BEGIN(WebCore::PseudoElement)
+    static bool isType(const WebCore::Node& node) { return node.isPseudoElement(); }
+SPECIALIZE_TYPE_TRAITS_END()