Title: [98860] trunk
Revision
98860
Author
[email protected]
Date
2011-10-31 09:35:56 -0700 (Mon, 31 Oct 2011)

Log Message

Implement load notification and events for <track>.
https://bugs.webkit.org/show_bug.cgi?id=71054

Reviewed by Eric Carlson.

Source/WebCore:

Tests: media/track/track-load-error-readyState.html
       media/track/track-load-from-element-readyState.html
       media/track/track-load-from-src-readyState.html

* html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::trackWasAdded):
(WebCore::HTMLMediaElement::trackWillBeRemoved):
(WebCore::HTMLMediaElement::trackSourceChanged):
* html/HTMLMediaElement.h:
* html/HTMLTrackElement.cpp:
(WebCore::HTMLTrackElement::insertedIntoTree):
(WebCore::HTMLTrackElement::willRemove):
(WebCore::HTMLTrackElement::parseMappedAttribute):
(WebCore::HTMLTrackElement::attributeChanged):
* html/HTMLTrackElement.h:
* html/LoadableTextTrack.cpp:
(WebCore::LoadableTextTrack::cueLoadingCompleted):

LayoutTests:

* media/track/track-load-error-readyState-expected.txt: Added.
* media/track/track-load-error-readyState.html: Added.
* media/track/track-load-from-element-readyState-expected.txt: Added.
* media/track/track-load-from-element-readyState.html: Added.
* media/track/track-load-from-src-readyState-expected.txt: Added.
* media/track/track-load-from-src-readyState.html: Added.
* platform/mac/Skipped:
* platform/win/Skipped:

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (98859 => 98860)


--- trunk/LayoutTests/ChangeLog	2011-10-31 15:53:14 UTC (rev 98859)
+++ trunk/LayoutTests/ChangeLog	2011-10-31 16:35:56 UTC (rev 98860)
@@ -1,3 +1,19 @@
+2011-10-31  Anna Cavender  <[email protected]>
+
+        Implement load notification and events for <track>.
+        https://bugs.webkit.org/show_bug.cgi?id=71054
+
+        Reviewed by Eric Carlson.
+
+        * media/track/track-load-error-readyState-expected.txt: Added.
+        * media/track/track-load-error-readyState.html: Added.
+        * media/track/track-load-from-element-readyState-expected.txt: Added.
+        * media/track/track-load-from-element-readyState.html: Added.
+        * media/track/track-load-from-src-readyState-expected.txt: Added.
+        * media/track/track-load-from-src-readyState.html: Added.
+        * platform/mac/Skipped:
+        * platform/win/Skipped:
+
 2011-10-31  Nikolas Zimmermann  <[email protected]>
 
         CSS 2.1 failure: background-intrinsic-*

Added: trunk/LayoutTests/media/track/track-load-error-readyState-expected.txt (0 => 98860)


--- trunk/LayoutTests/media/track/track-load-error-readyState-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/media/track/track-load-error-readyState-expected.txt	2011-10-31 16:35:56 UTC (rev 98860)
@@ -0,0 +1,6 @@
+Tests the error event on HTMLTrackElement and ERROR readyState on TextTrack.
+
+EVENT(error)
+EXPECTED (track.track.readyState == '3') OK
+END OF TEST
+
Property changes on: trunk/LayoutTests/media/track/track-load-error-readyState-expected.txt
___________________________________________________________________

Added: svn:eol-style

Added: trunk/LayoutTests/media/track/track-load-error-readyState.html (0 => 98860)


--- trunk/LayoutTests/media/track/track-load-error-readyState.html	                        (rev 0)
+++ trunk/LayoutTests/media/track/track-load-error-readyState.html	2011-10-31 16:35:56 UTC (rev 98860)
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+
+        <script src=""
+        <script src=""
+        <script>
+
+            function trackError()
+            {
+                consoleWrite("EVENT(error)");
+                track = document.getElementById('testTrackError'); 
+                testExpected("track.track.readyState", TextTrack.Error);
+                endTest();
+            }
+
+        </script>
+    </head>
+    <body>
+        <p>Tests the error event on HTMLTrackElement and ERROR readyState on TextTrack.</p>
+        <video id="videotests">
+            <track id="testTrackError" src="" _onerror_="trackError()">
+        </video>
+    </body>
+</html>
Property changes on: trunk/LayoutTests/media/track/track-load-error-readyState.html
___________________________________________________________________

Added: svn:eol-style

Added: trunk/LayoutTests/media/track/track-load-from-element-readyState-expected.txt (0 => 98860)


--- trunk/LayoutTests/media/track/track-load-from-element-readyState-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/media/track/track-load-from-element-readyState-expected.txt	2011-10-31 16:35:56 UTC (rev 98860)
@@ -0,0 +1,6 @@
+Tests the load event on HTMLTrackElement and LOADED readyState on TextTrack when src is set on the element.
+
+EVENT(load)
+EXPECTED (track.track.readyState == '2') OK
+END OF TEST
+
Property changes on: trunk/LayoutTests/media/track/track-load-from-element-readyState-expected.txt
___________________________________________________________________

Added: svn:eol-style

Added: trunk/LayoutTests/media/track/track-load-from-element-readyState.html (0 => 98860)


--- trunk/LayoutTests/media/track/track-load-from-element-readyState.html	                        (rev 0)
+++ trunk/LayoutTests/media/track/track-load-from-element-readyState.html	2011-10-31 16:35:56 UTC (rev 98860)
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+
+        <script src=""
+        <script src=""
+        <script>
+
+            function trackLoaded()
+            {
+                consoleWrite("EVENT(load)");
+                track = document.getElementById('testTrackSrc'); 
+                testExpected("track.track.readyState", TextTrack.Loaded);
+                endTest();
+            }
+
+        </script>
+    </head>
+    <body>
+        <p>Tests the load event on HTMLTrackElement and LOADED readyState on TextTrack when src is set on the element.</p>
+        <video>
+            <track id="testTrackSrc" src="" _onload_="trackLoaded()">
+	      </video>
+    </body>
+</html>
Property changes on: trunk/LayoutTests/media/track/track-load-from-element-readyState.html
___________________________________________________________________

Added: svn:eol-style

Added: trunk/LayoutTests/media/track/track-load-from-src-readyState-expected.txt (0 => 98860)


--- trunk/LayoutTests/media/track/track-load-from-src-readyState-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/media/track/track-load-from-src-readyState-expected.txt	2011-10-31 16:35:56 UTC (rev 98860)
@@ -0,0 +1,7 @@
+Tests the load event on HTMLTrackElement and LOADED readyState on TextTrack when src is set from _javascript_.
+
+EXPECTED (track.track.readyState == '0') OK
+EVENT(load)
+EXPECTED (track.track.readyState == '2') OK
+END OF TEST
+
Property changes on: trunk/LayoutTests/media/track/track-load-from-src-readyState-expected.txt
___________________________________________________________________

Added: svn:eol-style

Added: trunk/LayoutTests/media/track/track-load-from-src-readyState.html (0 => 98860)


--- trunk/LayoutTests/media/track/track-load-from-src-readyState.html	                        (rev 0)
+++ trunk/LayoutTests/media/track/track-load-from-src-readyState.html	2011-10-31 16:35:56 UTC (rev 98860)
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+
+        <script src=""
+        <script src=""
+    </head>
+    <body>
+        <p>Tests the load event on HTMLTrackElement and LOADED readyState on TextTrack when src is set from _javascript_.</p>
+        <video>
+            <track id="testTrackEmpty">
+        </video>
+        <script>
+
+            function trackLoaded()
+            {
+                consoleWrite("EVENT(load)");
+                testExpected("track.track.readyState", TextTrack.Loaded);
+                endTest();
+            }
+
+            track = document.getElementById('testTrackEmpty');
+            testExpected("track.track.readyState", TextTrack.None);
+            track.addEventListener("load", function () { trackLoaded(); }, true);
+            track.src = ""   
+
+        </script>
+    </body>
+</html>
Property changes on: trunk/LayoutTests/media/track/track-load-from-src-readyState.html
___________________________________________________________________

Added: svn:eol-style

Modified: trunk/LayoutTests/platform/mac/Skipped (98859 => 98860)


--- trunk/LayoutTests/platform/mac/Skipped	2011-10-31 15:53:14 UTC (rev 98859)
+++ trunk/LayoutTests/platform/mac/Skipped	2011-10-31 16:35:56 UTC (rev 98860)
@@ -421,6 +421,9 @@
 
 # Tests for <track>.  Feature is not yet functional.
 # https://bugs.webkit.org/show_bug.cgi?id=43668
+media/track/track-load-error-readyState.html
+media/track/track-load-from-element-readyState.html
+media/track/track-load-from-src-readyState.html
 media/track/track-mutable.html
 media/track/track-text-track-cue-list.html
 media/track/track-text-track-destructor-crash.html

Modified: trunk/LayoutTests/platform/win/Skipped (98859 => 98860)


--- trunk/LayoutTests/platform/win/Skipped	2011-10-31 15:53:14 UTC (rev 98859)
+++ trunk/LayoutTests/platform/win/Skipped	2011-10-31 16:35:56 UTC (rev 98860)
@@ -1405,6 +1405,9 @@
 
 # Tests for <track>.  Feature is not yet functional.
 # https://bugs.webkit.org/show_bug.cgi?id=43668
+media/track/track-load-error-readyState.html
+media/track/track-load-from-element-readyState.html
+media/track/track-load-from-src-readyState.html
 media/track/track-mutable.html
 media/track/track-text-track-cue-list.html
 media/track/track-text-track-destructor-crash.html

Modified: trunk/Source/WebCore/ChangeLog (98859 => 98860)


--- trunk/Source/WebCore/ChangeLog	2011-10-31 15:53:14 UTC (rev 98859)
+++ trunk/Source/WebCore/ChangeLog	2011-10-31 16:35:56 UTC (rev 98860)
@@ -1,3 +1,28 @@
+2011-10-31  Anna Cavender  <[email protected]>
+
+        Implement load notification and events for <track>.
+        https://bugs.webkit.org/show_bug.cgi?id=71054
+
+        Reviewed by Eric Carlson.
+
+        Tests: media/track/track-load-error-readyState.html
+               media/track/track-load-from-element-readyState.html
+               media/track/track-load-from-src-readyState.html
+
+        * html/HTMLMediaElement.cpp:
+        (WebCore::HTMLMediaElement::trackWasAdded):
+        (WebCore::HTMLMediaElement::trackWillBeRemoved):
+        (WebCore::HTMLMediaElement::trackSourceChanged):
+        * html/HTMLMediaElement.h:
+        * html/HTMLTrackElement.cpp:
+        (WebCore::HTMLTrackElement::insertedIntoTree):
+        (WebCore::HTMLTrackElement::willRemove):
+        (WebCore::HTMLTrackElement::parseMappedAttribute):
+        (WebCore::HTMLTrackElement::attributeChanged):
+        * html/HTMLTrackElement.h:
+        * html/LoadableTextTrack.cpp:
+        (WebCore::LoadableTextTrack::cueLoadingCompleted):
+
 2011-10-31  Andreas Kling  <[email protected]>
 
         CSSRule: Devirtualize type() and isFooRule()

Modified: trunk/Source/WebCore/html/HTMLMediaElement.cpp (98859 => 98860)


--- trunk/Source/WebCore/html/HTMLMediaElement.cpp	2011-10-31 15:53:14 UTC (rev 98859)
+++ trunk/Source/WebCore/html/HTMLMediaElement.cpp	2011-10-31 16:35:56 UTC (rev 98860)
@@ -1993,8 +1993,40 @@
     m_textTracks.append(textTrack);
     return textTrack.release();
 }
+
+void HTMLMediaElement::trackWasAdded(HTMLTrackElement* track)
+{
+#if !LOG_DISABLED
+    if (track->hasTagName(trackTag)) {
+        KURL url = ""
+        LOG(Media, "HTMLMediaElement::trackWasAdded - 'src' is %s", urlForLogging(url).utf8().data());
+    }
 #endif
+    loadNextTextTrack(track);
+}
+ 
+void HTMLMediaElement::trackWillBeRemoved(HTMLTrackElement* track)
+{
+#if !LOG_DISABLED
+    if (track->hasTagName(trackTag)) {
+        KURL url = ""
+        LOG(Media, "HTMLMediaElement::trackWillBeRemoved - 'src' is %s", urlForLogging(url).utf8().data());
+    }
+#endif
+}
 
+void HTMLMediaElement::trackSourceChanged(HTMLTrackElement* track)
+{
+#if !LOG_DISABLED
+    if (track->hasTagName(trackTag)) {
+        KURL url = ""
+        LOG(Media, "HTMLMediaElement::trackSourceChanged - 'src' is %s", urlForLogging(url).utf8().data());
+    }
+#endif
+    loadNextTextTrack(track);
+}
+#endif
+
 bool HTMLMediaElement::havePotentialSourceChild()
 {
     // Stash the current <source> node and next nodes so we can restore them after checking

Modified: trunk/Source/WebCore/html/HTMLMediaElement.h (98859 => 98860)


--- trunk/Source/WebCore/html/HTMLMediaElement.h	2011-10-31 15:53:14 UTC (rev 98859)
+++ trunk/Source/WebCore/html/HTMLMediaElement.h	2011-10-31 16:35:56 UTC (rev 98860)
@@ -181,6 +181,9 @@
 
 #if ENABLE(VIDEO_TRACK)
     PassRefPtr<TextTrack> addTrack(const String& kind, const String& label = "", const String& language = "");
+    virtual void trackWasAdded(HTMLTrackElement*);
+    virtual void trackWillBeRemoved(HTMLTrackElement*);
+    virtual void trackSourceChanged(HTMLTrackElement*);
 #endif
 
 #if ENABLE(PLUGIN_PROXY_FOR_VIDEO)

Modified: trunk/Source/WebCore/html/HTMLTrackElement.cpp (98859 => 98860)


--- trunk/Source/WebCore/html/HTMLTrackElement.cpp	2011-10-31 15:53:14 UTC (rev 98859)
+++ trunk/Source/WebCore/html/HTMLTrackElement.cpp	2011-10-31 16:35:56 UTC (rev 98860)
@@ -32,6 +32,7 @@
 #include "HTMLMediaElement.h"
 #include "HTMLNames.h"
 #include "Logging.h"
+#include "ScriptEventListener.h"
 
 using namespace std;
 
@@ -59,22 +60,41 @@
 {
     HTMLElement::insertedIntoTree(deep);
     Element* parent = parentElement();
-    if (parent && parent->isMediaElement()) {
-        // TODO(annacc):
-        // static_cast<HTMLMediaElement*>(parentNode())->trackWasAdded(this);
-    }
+    if (parent && parent->isMediaElement())
+        static_cast<HTMLMediaElement*>(parentNode())->trackWasAdded(this);
 }
 
 void HTMLTrackElement::willRemove()
 {
     Element* parent = parentElement();
-    if (parent && parent->isMediaElement()) {
-        // TODO(annacc):
-        // static_cast<HTMLMediaElement*>(parentNode())->trackWillBeRemoved(this);
-    }
+    if (parent && parent->isMediaElement())
+        static_cast<HTMLMediaElement*>(parentNode())->trackWillBeRemoved(this);
     HTMLElement::willRemove();
 }
 
+void HTMLTrackElement::parseMappedAttribute(Attribute* attribute)
+{
+    const QualifiedName& attrName = attribute->name();
+
+    if (attrName == onloadAttr)
+        setAttributeEventListener(eventNames().loadEvent, createAttributeEventListener(this, attribute));
+    else if (attrName == onerrorAttr)
+        setAttributeEventListener(eventNames().errorEvent, createAttributeEventListener(this, attribute));
+    else
+        HTMLElement::parseMappedAttribute(attribute);
+}
+
+void HTMLTrackElement::attributeChanged(Attribute* attr, bool preserveDecls)
+{
+    HTMLElement::attributeChanged(attr, preserveDecls);
+
+    const QualifiedName& attrName = attr->name();
+    if (attrName == srcAttr) {
+        if (!getAttribute(srcAttr).isEmpty() && parentNode())
+            static_cast<HTMLMediaElement*>(parentNode())->trackSourceChanged(this);
+    }
+}
+
 KURL HTMLTrackElement::src() const
 {
     return document()->completeURL(getAttribute(srcAttr));

Modified: trunk/Source/WebCore/html/HTMLTrackElement.h (98859 => 98860)


--- trunk/Source/WebCore/html/HTMLTrackElement.h	2011-10-31 15:53:14 UTC (rev 98859)
+++ trunk/Source/WebCore/html/HTMLTrackElement.h	2011-10-31 16:35:56 UTC (rev 98860)
@@ -59,6 +59,9 @@
 
     HTMLTrackElement(const QualifiedName&, Document*);
     virtual ~HTMLTrackElement();
+    
+    virtual void parseMappedAttribute(Attribute*);
+    virtual void attributeChanged(Attribute*, bool preserveDecls);
 
     virtual void insertedIntoTree(bool);
     virtual void willRemove();

Modified: trunk/Source/WebCore/html/LoadableTextTrack.cpp (98859 => 98860)


--- trunk/Source/WebCore/html/LoadableTextTrack.cpp	2011-10-31 15:53:14 UTC (rev 98859)
+++ trunk/Source/WebCore/html/LoadableTextTrack.cpp	2011-10-31 16:35:56 UTC (rev 98860)
@@ -63,11 +63,14 @@
     setReadyState(TextTrack::Loading);
 }
 
-void LoadableTextTrack::cueLoadingCompleted(TextTrackLoader* loader, bool)
+void LoadableTextTrack::cueLoadingCompleted(TextTrackLoader* loader, bool loadingFailed)
 {
     ASSERT_UNUSED(loader, m_loader == loader);
 
-    // FIXME(62885): Implement.
+    loadingFailed ? setReadyState(TextTrack::Error) : setReadyState(TextTrack::Loaded);
+
+    if (m_loadingClient)
+        m_loadingClient->textTrackLoadingCompleted(this, loadingFailed);
 }
 
 } // namespace WebCore
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to