Title: [159950] trunk
Revision
159950
Author
[email protected]
Date
2013-12-02 12:11:27 -0800 (Mon, 02 Dec 2013)

Log Message

Use GenericEventQueue in TrackListBase and reduce code duplication with scheduleTrackEvent()
https://bugs.webkit.org/show_bug.cgi?id=124811

Patch by Brendan Long <[email protected]> on 2013-12-02
Reviewed by Eric Carlson.

Source/WebCore:

No new tests because this is just refactoring.

* html/track/TrackListBase.cpp:
(TrackListBase::TrackListBase): Replace event code with a GenericEventQueue.
(TrackListBase::scheduleTrackEvent): Factor out duplicate code in schedule{Add,Remove}TrackEvent functions.
(TrackListBase::scheduleAddTrackEvent): Same.
(TrackListBase::scheduleRemoveTrackEvent): Same.
(TrackListBase::scheduleChangeEvent): Use GenericEventQueue.
* html/track/TrackListBase.h: Replace event code with GenericEventQueue.

LayoutTests:

* platform/mac/TestExpectations: Unskip onremovetrack test which was fixed a long time ago.

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (159949 => 159950)


--- trunk/LayoutTests/ChangeLog	2013-12-02 20:05:26 UTC (rev 159949)
+++ trunk/LayoutTests/ChangeLog	2013-12-02 20:11:27 UTC (rev 159950)
@@ -1,3 +1,12 @@
+2013-12-02  Brendan Long  <[email protected]>
+
+        Use GenericEventQueue in TrackListBase and reduce code duplication with scheduleTrackEvent()
+        https://bugs.webkit.org/show_bug.cgi?id=124811
+
+        Reviewed by Eric Carlson.
+
+        * platform/mac/TestExpectations: Unskip onremovetrack test which was fixed a long time ago.
+
 2013-12-02  Alexey Proskuryakov  <[email protected]>
 
         Add support for WebCrypto RSA-OAEP

Modified: trunk/LayoutTests/platform/mac/TestExpectations (159949 => 159950)


--- trunk/LayoutTests/platform/mac/TestExpectations	2013-12-02 20:05:26 UTC (rev 159949)
+++ trunk/LayoutTests/platform/mac/TestExpectations	2013-12-02 20:11:27 UTC (rev 159950)
@@ -375,7 +375,6 @@
 webkit.org/b/103926 media/track/opera/interfaces/TextTrackCue/vertical.html [ Skip ]
 webkit.org/b/103926 media/track/opera/interfaces/TextTrackCueList/getter.html [ Skip ]
 webkit.org/b/103926 media/track/opera/interfaces/TextTrackList/getter.html [ Skip ]
-webkit.org/b/103926 media/track/opera/interfaces/TextTrackList/onremovetrack.html [ Skip ]
 webkit.org/b/103926 media/track/opera/track/track-element/cloneNode.html [ Skip ]
 webkit.org/b/103926 media/track/opera/track/track-element/src-clear-cues.html [ Skip ]
 webkit.org/b/103926 media/track/opera/track/webvtt/parsing/001.html [ Skip ]

Modified: trunk/Source/WebCore/ChangeLog (159949 => 159950)


--- trunk/Source/WebCore/ChangeLog	2013-12-02 20:05:26 UTC (rev 159949)
+++ trunk/Source/WebCore/ChangeLog	2013-12-02 20:11:27 UTC (rev 159950)
@@ -1,3 +1,20 @@
+2013-12-02  Brendan Long  <[email protected]>
+
+        Use GenericEventQueue in TrackListBase and reduce code duplication with scheduleTrackEvent()
+        https://bugs.webkit.org/show_bug.cgi?id=124811
+
+        Reviewed by Eric Carlson.
+
+        No new tests because this is just refactoring.
+
+        * html/track/TrackListBase.cpp:
+        (TrackListBase::TrackListBase): Replace event code with a GenericEventQueue.
+        (TrackListBase::scheduleTrackEvent): Factor out duplicate code in schedule{Add,Remove}TrackEvent functions.
+        (TrackListBase::scheduleAddTrackEvent): Same.
+        (TrackListBase::scheduleRemoveTrackEvent): Same.
+        (TrackListBase::scheduleChangeEvent): Use GenericEventQueue.
+        * html/track/TrackListBase.h: Replace event code with GenericEventQueue.
+
 2013-12-02  Alexey Proskuryakov  <[email protected]>
 
         Add support for WebCrypto RSA-OAEP

Modified: trunk/Source/WebCore/html/track/TrackListBase.cpp (159949 => 159950)


--- trunk/Source/WebCore/html/track/TrackListBase.cpp	2013-12-02 20:05:26 UTC (rev 159949)
+++ trunk/Source/WebCore/html/track/TrackListBase.cpp	2013-12-02 20:11:27 UTC (rev 159950)
@@ -39,8 +39,7 @@
 TrackListBase::TrackListBase(HTMLMediaElement* element, ScriptExecutionContext* context)
     : m_context(context)
     , m_element(element)
-    , m_pendingEventTimer(this, &TrackListBase::asyncEventTimerFired)
-    , m_dispatchingEvents(0)
+    , m_asyncEventQueue(*this)
 {
     ASSERT(context->isDocument());
 }
@@ -79,6 +78,16 @@
     return m_inbandTracks.find(track) != notFound;
 }
 
+void TrackListBase::scheduleTrackEvent(const AtomicString& eventName, PassRefPtr<TrackBase> track)
+{
+    TrackEventInit initializer;
+    initializer.track = track;
+    initializer.bubbles = false;
+    initializer.cancelable = false;
+
+    m_asyncEventQueue.enqueueEvent(TrackEvent::create(eventName, initializer));
+}
+
 void TrackListBase::scheduleAddTrackEvent(PassRefPtr<TrackBase> track)
 {
     // 4.8.10.5 Loading the media resource
@@ -98,17 +107,8 @@
     // ... then queue a task to fire an event with the name addtrack, that does not
     // bubble and is not cancelable, and that uses the TrackEvent interface, with
     // the track attribute initialized to the text track's TextTrack object, at
-    // the media element's textTracks attribute's TextTrackList object. 
-
-    RefPtr<TrackBase> trackRef = track;
-    TrackEventInit initializer;
-    initializer.track = trackRef;
-    initializer.bubbles = false;
-    initializer.cancelable = false;
-
-    m_pendingEvents.append(TrackEvent::create(eventNames().addtrackEvent, initializer));
-    if (!m_pendingEventTimer.isActive())
-        m_pendingEventTimer.startOneShot(0);
+    // the media element's textTracks attribute's TextTrackList object.
+    scheduleTrackEvent(eventNames().addtrackEvent, track);
 }
 
 void TrackListBase::scheduleRemoveTrackEvent(PassRefPtr<TrackBase> track)
@@ -135,16 +135,7 @@
     // interface, with the track attribute initialized to the text track's
     // TextTrack object, at the media element's textTracks attribute's
     // TextTrackList object.
-
-    RefPtr<TrackBase> trackRef = track;
-    TrackEventInit initializer;
-    initializer.track = trackRef;
-    initializer.bubbles = false;
-    initializer.cancelable = false;
-
-    m_pendingEvents.append(TrackEvent::create(eventNames().removetrackEvent, initializer));
-    if (!m_pendingEventTimer.isActive())
-        m_pendingEventTimer.startOneShot(0);
+    scheduleTrackEvent(eventNames().removetrackEvent, track);
 }
 
 void TrackListBase::scheduleChangeEvent()
@@ -162,23 +153,9 @@
     initializer.bubbles = false;
     initializer.cancelable = false;
 
-    m_pendingEvents.append(Event::create(eventNames().changeEvent, initializer));
-    if (!m_pendingEventTimer.isActive())
-        m_pendingEventTimer.startOneShot(0);
+    m_asyncEventQueue.enqueueEvent(Event::create(eventNames().changeEvent, initializer));
 }
 
-void TrackListBase::asyncEventTimerFired(Timer<TrackListBase>*)
-{
-    Vector<RefPtr<Event>> pendingEvents;
-
-    ++m_dispatchingEvents;
-    m_pendingEvents.swap(pendingEvents);
-    size_t count = pendingEvents.size();
-    for (size_t index = 0; index < count; ++index)
-        dispatchEvent(pendingEvents[index].release(), IGNORE_EXCEPTION);
-    --m_dispatchingEvents;
-}
-
 bool TrackListBase::isAnyTrackEnabled() const
 {
     for (size_t i = 0; i < m_inbandTracks.size(); ++i) {

Modified: trunk/Source/WebCore/html/track/TrackListBase.h (159949 => 159950)


--- trunk/Source/WebCore/html/track/TrackListBase.h	2013-12-02 20:05:26 UTC (rev 159949)
+++ trunk/Source/WebCore/html/track/TrackListBase.h	2013-12-02 20:11:27 UTC (rev 159950)
@@ -30,6 +30,7 @@
 
 #include "EventListener.h"
 #include "EventTarget.h"
+#include "GenericEventQueue.h"
 #include "Timer.h"
 #include <wtf/PassRefPtr.h>
 #include <wtf/RefCounted.h>
@@ -63,8 +64,6 @@
     Element* element() const;
     HTMLMediaElement* mediaElement() const { return m_element; }
 
-    bool isFiringEventListeners() { return m_dispatchingEvents; }
-
     // Needs to be public so tracks can call it
     void scheduleChangeEvent();
 
@@ -79,20 +78,16 @@
     Vector<RefPtr<TrackBase>> m_inbandTracks;
 
 private:
+    void scheduleTrackEvent(const AtomicString& eventName, PassRefPtr<TrackBase>);
 
     // EventTarget
     virtual void refEventTarget() OVERRIDE FINAL { ref(); }
     virtual void derefEventTarget() OVERRIDE FINAL { deref(); }
 
-    void asyncEventTimerFired(Timer<TrackListBase>*);
-
     ScriptExecutionContext* m_context;
     HTMLMediaElement* m_element;
 
-    Vector<RefPtr<Event>> m_pendingEvents;
-    Timer<TrackListBase> m_pendingEventTimer;
-
-    int m_dispatchingEvents;
+    GenericEventQueue m_asyncEventQueue;
 };
 
 } // namespace WebCore
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to