https://bugs.webkit.org/show_bug.cgi?id=75192
authoreric.carlson@apple.com <eric.carlson@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 19 Jan 2012 20:28:55 +0000 (20:28 +0000)
committereric.carlson@apple.com <eric.carlson@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 19 Jan 2012 20:28:55 +0000 (20:28 +0000)
Reviewed by Darin Adler.

Notify the media element when tracks are added to and removed from a document instead of
a tree because we don't want to trigger loading unless a track element is in the document.

Test: media/track/track-delete-during-setup.html

* html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::trackWasRemoved): Renamed from trackWillBeRemoved because it is
    now called after removal.
* html/HTMLMediaElement.h:

* html/HTMLTrackElement.cpp:
(WebCore::HTMLTrackElement::insertedIntoDocument): Was insertedIntoTree. Use this instead
    because we care about when a track is inserted and removed from a document, not a tree.
(WebCore::HTMLTrackElement::removedFromDocument): Ditto.
* html/HTMLTrackElement.h:

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@105434 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/media/track/track-delete-during-setup-expected.txt [new file with mode: 0644]
LayoutTests/media/track/track-delete-during-setup.html [new file with mode: 0644]
Source/WebCore/ChangeLog
Source/WebCore/html/HTMLMediaElement.cpp
Source/WebCore/html/HTMLMediaElement.h
Source/WebCore/html/HTMLTrackElement.cpp
Source/WebCore/html/HTMLTrackElement.h

index dada9e0..70abcde 100644 (file)
@@ -1,3 +1,12 @@
+2012-01-19  Eric Carlson  <eric.carlson@apple.com>
+
+        https://bugs.webkit.org/show_bug.cgi?id=75192
+
+        Reviewed by Darin Adler.
+
+        * media/track/track-delete-during-setup-expected.txt: Added.
+        * media/track/track-delete-during-setup.html: Added.
+
 2012-01-18  Robert Hogan  <robert@webkit.org>
 
         Hit ASSERTION FAILED: table()->collapseBorders() on techcrunch.com
diff --git a/LayoutTests/media/track/track-delete-during-setup-expected.txt b/LayoutTests/media/track/track-delete-during-setup-expected.txt
new file mode 100644 (file)
index 0000000..6859137
--- /dev/null
@@ -0,0 +1,7 @@
+>
+
+EXPECTED (track1.readyState == '0') OK
+EXPECTED (track1.track.mode == '0') OK
+
+END OF TEST
+
diff --git a/LayoutTests/media/track/track-delete-during-setup.html b/LayoutTests/media/track/track-delete-during-setup.html
new file mode 100644 (file)
index 0000000..b7a7527
--- /dev/null
@@ -0,0 +1,41 @@
+        >
+
+        <script src=../media-file.js></script>
+<script></script>
+<script></script>
+<script>setTimeout("try { var v = document.querySelector('video'); v.parentNode.removeChild(v); } catch(e) {}", 61);</script>
+<meta><script src=../video-test.js></script>
+        <script>
+
+            {
+            }
+
+            function metadataTrackLoaded()
+            {
+                track2 = document.createElement('track');
+                video.appendChild(track2);
+                setTimeout("endTest()", 100);
+            }
+
+            function canplaythrough()
+            {
+                track1.track.mode = TextTrack.HIDDEN;
+                setTimeout("endTest()", 100);
+            }
+
+            function start()
+            {
+                consoleWrite("<feOffset>");
+                findMediaElement();
+
+                track1 = document.querySelectorAll('track')[0]; 
+                testExpected("track1.readyState", HTMLTrackElement.NONE);
+                testExpected("track1.track.mode", TextTrack.DISABLED);
+
+                video.src = findMediaFile("video", "../content/test");
+                consoleWrite("");
+            }
+        </script>
+    <body onload="start()">
+<command><aside><kbd><video oncanplaythrough="canplaythrough()" > 
+            <track src="captions-webvtt/metadata.vtt" onload="metadataTrackLoaded()">
index efab1ba..f3c2cec 100755 (executable)
@@ -1,3 +1,25 @@
+2012-01-19  Eric Carlson  <eric.carlson@apple.com>
+
+        https://bugs.webkit.org/show_bug.cgi?id=75192
+
+        Reviewed by Darin Adler.
+
+        Notify the media element when tracks are added to and removed from a document instead of
+        a tree because we don't want to trigger loading unless a track element is in the document.
+
+        Test: media/track/track-delete-during-setup.html
+
+        * html/HTMLMediaElement.cpp:
+        (WebCore::HTMLMediaElement::trackWasRemoved): Renamed from trackWillBeRemoved because it is
+            now called after removal.
+        * html/HTMLMediaElement.h:
+
+        * html/HTMLTrackElement.cpp:
+        (WebCore::HTMLTrackElement::insertedIntoDocument): Was insertedIntoTree. Use this instead
+            because we care about when a track is inserted and removed from a document, not a tree.
+        (WebCore::HTMLTrackElement::removedFromDocument): Ditto.
+        * html/HTMLTrackElement.h:
+
 2012-01-18  Robert Hogan  <robert@webkit.org>
 
         Hit ASSERTION FAILED: table()->collapseBorders() on techcrunch.com
index e698346..05cc5b2 100644 (file)
@@ -2300,7 +2300,7 @@ void HTMLMediaElement::trackWasAdded(HTMLTrackElement* trackElement)
         scheduleLoad(TextTrackResource);
 }
 
-void HTMLMediaElement::trackWillBeRemoved(HTMLTrackElement* trackElement)
+void HTMLMediaElement::trackWasRemoved(HTMLTrackElement* trackElement)
 {
     ASSERT(trackElement->hasTagName(trackTag));
 
@@ -2310,7 +2310,7 @@ void HTMLMediaElement::trackWillBeRemoved(HTMLTrackElement* trackElement)
 #if !LOG_DISABLED
     if (trackElement->hasTagName(trackTag)) {
         KURL url = trackElement->getNonEmptyURLAttribute(srcAttr);
-        LOG(Media, "HTMLMediaElement::trackWillBeRemoved - 'src' is %s", urlForLogging(url).utf8().data());
+        LOG(Media, "HTMLMediaElement::trackWasRemoved - 'src' is %s", urlForLogging(url).utf8().data());
     }
 #endif
 
index 22b6af0..da49c40 100644 (file)
@@ -204,7 +204,7 @@ public:
     CueList currentlyActiveCues() const { return m_currentlyActiveCues; }
 
     virtual void trackWasAdded(HTMLTrackElement*);
-    virtual void trackWillBeRemoved(HTMLTrackElement*);
+    virtual void trackWasRemoved(HTMLTrackElement*);
     
     void configureTextTrack(HTMLTrackElement*);
     void configureTextTracks();
index 13a77a8..af5f09e 100644 (file)
@@ -72,20 +72,20 @@ PassRefPtr<HTMLTrackElement> HTMLTrackElement::create(const QualifiedName& tagNa
     return adoptRef(new HTMLTrackElement(tagName, document));
 }
 
-void HTMLTrackElement::insertedIntoTree(bool deep)
+void HTMLTrackElement::insertedIntoDocument()
 {
-    HTMLElement::insertedIntoTree(deep);
+    HTMLElement::insertedIntoDocument();
 
     if (HTMLMediaElement* parent = mediaElement())
         parent->trackWasAdded(this);
 }
 
-void HTMLTrackElement::willRemove()
+void HTMLTrackElement::removedFromDocument()
 {
     if (HTMLMediaElement* parent = mediaElement())
-        parent->trackWillBeRemoved(this);
+        parent->trackWasRemoved(this);
 
-    HTMLElement::willRemove();
+    HTMLElement::removedFromDocument();
 }
 
 void HTMLTrackElement::parseMappedAttribute(Attribute* attribute)
index 86d2aec..965e396 100644 (file)
@@ -78,8 +78,8 @@ private:
     virtual void parseMappedAttribute(Attribute*);
     virtual void attributeChanged(Attribute*, bool preserveDecls);
 
-    virtual void insertedIntoTree(bool);
-    virtual void willRemove();
+    virtual void insertedIntoDocument() OVERRIDE;
+    virtual void removedFromDocument() OVERRIDE;
     virtual bool isURLAttribute(Attribute*) const;
 
 #if ENABLE(MICRODATA)