Title: [281230] trunk/Source/WebCore
- Revision
- 281230
- Author
- [email protected]
- Date
- 2021-08-19 02:15:03 -0700 (Thu, 19 Aug 2021)
Log Message
Port HTMLDetailsElement to use modern event handling code
https://bugs.webkit.org/show_bug.cgi?id=228863
Reviewed by Antti Koivisto.
No behaviour change, follows: https://html.spec.whatwg.org/#details-notification-task-steps
* html/HTMLDetailsElement.cpp:
(WebCore::HTMLDetailsElement::parseAttribute):
(WebCore::HTMLDetailsElement::toggleOpen):
(WebCore::detailToggleEventSender): Deleted.
(WebCore::HTMLDetailsElement::~HTMLDetailsElement): Deleted.
(WebCore::HTMLDetailsElement::dispatchPendingEvent): Deleted.
* html/HTMLDetailsElement.h:
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (281229 => 281230)
--- trunk/Source/WebCore/ChangeLog 2021-08-19 09:02:02 UTC (rev 281229)
+++ trunk/Source/WebCore/ChangeLog 2021-08-19 09:15:03 UTC (rev 281230)
@@ -1,5 +1,22 @@
2021-08-19 Tim Nguyen <[email protected]>
+ Port HTMLDetailsElement to use modern event handling code
+ https://bugs.webkit.org/show_bug.cgi?id=228863
+
+ Reviewed by Antti Koivisto.
+
+ No behaviour change, follows: https://html.spec.whatwg.org/#details-notification-task-steps
+
+ * html/HTMLDetailsElement.cpp:
+ (WebCore::HTMLDetailsElement::parseAttribute):
+ (WebCore::HTMLDetailsElement::toggleOpen):
+ (WebCore::detailToggleEventSender): Deleted.
+ (WebCore::HTMLDetailsElement::~HTMLDetailsElement): Deleted.
+ (WebCore::HTMLDetailsElement::dispatchPendingEvent): Deleted.
+ * html/HTMLDetailsElement.h:
+
+2021-08-19 Tim Nguyen <[email protected]>
+
Implement ::backdrop pseudo element
https://bugs.webkit.org/show_bug.cgi?id=227801
Modified: trunk/Source/WebCore/html/HTMLDetailsElement.cpp (281229 => 281230)
--- trunk/Source/WebCore/html/HTMLDetailsElement.cpp 2021-08-19 09:02:02 UTC (rev 281229)
+++ trunk/Source/WebCore/html/HTMLDetailsElement.cpp 2021-08-19 09:15:03 UTC (rev 281230)
@@ -24,8 +24,8 @@
#include "AXObjectCache.h"
#include "ElementIterator.h"
+#include "EventLoop.h"
#include "EventNames.h"
-#include "EventSender.h"
#include "HTMLSlotElement.h"
#include "HTMLSummaryElement.h"
#include "LocalizedStrings.h"
@@ -43,12 +43,6 @@
using namespace HTMLNames;
-static DetailEventSender& detailToggleEventSender()
-{
- static NeverDestroyed<DetailEventSender> sharedToggleEventSender(eventNames().toggleEvent);
- return sharedToggleEventSender;
-}
-
static const AtomString& summarySlotName()
{
static MainThreadNeverDestroyed<const AtomString> summarySlot("summarySlot");
@@ -98,11 +92,6 @@
ASSERT(hasTagName(detailsTag));
}
-HTMLDetailsElement::~HTMLDetailsElement()
-{
- detailToggleEventSender().cancelEvent(*this);
-}
-
RenderPtr<RenderElement> HTMLDetailsElement::createElementRenderer(RenderStyle&& style, const RenderTreePosition&)
{
return createRenderer<RenderBlockFlow>(*this, WTFMove(style));
@@ -139,12 +128,6 @@
return slot == m_summarySlot;
}
-void HTMLDetailsElement::dispatchPendingEvent(DetailEventSender* eventSender)
-{
- ASSERT_UNUSED(eventSender, eventSender == &detailToggleEventSender());
- dispatchEvent(Event::create(eventNames().toggleEvent, Event::CanBubble::No, Event::IsCancelable::No));
-}
-
void HTMLDetailsElement::parseAttribute(const QualifiedName& name, const AtomString& value)
{
if (name == openAttr) {
@@ -158,9 +141,15 @@
else
root->removeChild(*m_defaultSlot);
- // https://html.spec.whatwg.org/#details-notification-task-steps.
- detailToggleEventSender().cancelEvent(*this);
- detailToggleEventSender().dispatchEventSoon(*this);
+ // https://html.spec.whatwg.org/#details-notification-task-steps
+ if (m_isToggleEventTaskQueued)
+ return;
+
+ document().eventLoop().queueTask(TaskSource::DOMManipulation, [protectedThis = GCReachableRef { *this }] {
+ protectedThis->dispatchEvent(Event::create(eventNames().toggleEvent, Event::CanBubble::No, Event::IsCancelable::No));
+ protectedThis->m_isToggleEventTaskQueued = false;
+ });
+ m_isToggleEventTaskQueued = true;
}
} else
HTMLElement::parseAttribute(name, value);
@@ -169,7 +158,7 @@
void HTMLDetailsElement::toggleOpen()
{
- setAttributeWithoutSynchronization(openAttr, m_isOpen ? nullAtom() : emptyAtom());
+ setBooleanAttribute(openAttr, !m_isOpen);
// We need to post to the document because toggling this element will delete it.
if (AXObjectCache* cache = document().existingAXObjectCache())
Modified: trunk/Source/WebCore/html/HTMLDetailsElement.h (281229 => 281230)
--- trunk/Source/WebCore/html/HTMLDetailsElement.h 2021-08-19 09:02:02 UTC (rev 281229)
+++ trunk/Source/WebCore/html/HTMLDetailsElement.h 2021-08-19 09:15:03 UTC (rev 281230)
@@ -27,14 +27,10 @@
class HTMLSlotElement;
-template<typename T> class EventSender;
-using DetailEventSender = EventSender<HTMLDetailsElement>;
-
class HTMLDetailsElement final : public HTMLElement {
WTF_MAKE_ISO_ALLOCATED(HTMLDetailsElement);
public:
static Ref<HTMLDetailsElement> create(const QualifiedName& tagName, Document&);
- ~HTMLDetailsElement();
void toggleOpen();
@@ -41,8 +37,6 @@
bool isOpen() const { return m_isOpen; }
bool isActiveSummary(const HTMLSummaryElement&) const;
- void dispatchPendingEvent(DetailEventSender*);
-
private:
HTMLDetailsElement(const QualifiedName&, Document&);
@@ -57,6 +51,7 @@
HTMLSlotElement* m_summarySlot { nullptr };
HTMLSummaryElement* m_defaultSummary { nullptr };
RefPtr<HTMLSlotElement> m_defaultSlot;
+ bool m_isToggleEventTaskQueued { false };
};
} // namespace WebCore
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes