Diff
Modified: trunk/LayoutTests/ChangeLog (136977 => 136978)
--- trunk/LayoutTests/ChangeLog 2012-12-07 21:26:48 UTC (rev 136977)
+++ trunk/LayoutTests/ChangeLog 2012-12-07 21:30:12 UTC (rev 136978)
@@ -1,3 +1,15 @@
+2012-12-07 Eric Carlson <[email protected]>
+
+ Captions menu doesn't update to track changes
+ https://bugs.webkit.org/show_bug.cgi?id=104393
+
+ Reviewed by Dean Jackson.
+
+ Test to ensure that the captions menu is updated as tracks added and removed.
+
+ * media/video-controls-captions-trackmenu-expected.txt:
+ * media/video-controls-captions-trackmenu.html:
+
2012-12-07 Stephen White <[email protected]>
CSS url() filters with forward references don't work
Modified: trunk/LayoutTests/media/video-controls-captions-trackmenu-expected.txt (136977 => 136978)
--- trunk/LayoutTests/media/video-controls-captions-trackmenu-expected.txt 2012-12-07 21:26:48 UTC (rev 136977)
+++ trunk/LayoutTests/media/video-controls-captions-trackmenu-expected.txt 2012-12-07 21:30:12 UTC (rev 136978)
@@ -1,24 +1,33 @@
Test that we are able to trigger the list of captions, and select from the list.
EVENT(canplaythrough)
+
+*** Add another text track.
+RUN(video.addTextTrack("captions", "Commentary", "ru"))
+
*** Set the user language preference.
RUN(internals.setUserPreferredLanguages(['en']))
+
*** Click the CC button.
*** Turning captions on
-Found tracklist menu and list of tracks OK
-Found four available tracks in menu OK
-EXPECTED (video.textTracks.length == '3') OK
+Found 5 menu items OK
+EXPECTED (video.textTracks.length == '4') OK
Track 0 should be disabled
EXPECTED (video.textTracks[0].mode == 'disabled') OK
Track 1 should be showing
EXPECTED (video.textTracks[1].mode == 'showing') OK
Track 2 should be disabled
EXPECTED (video.textTracks[2].mode == 'disabled') OK
+Track 3 should be disabled
+EXPECTED (video.textTracks[3].mode == 'disabled') OK
EXPECTED (textTrackDisplayElement(video, 'display').innerText == 'Lorem') OK
+
+*** Remove a track.
+RUN(video.removeChild(document.querySelectorAll("track")[0]))
+
*** Click the CC button.
-*** Turning captions on
-Found tracklist menu and list of tracks OK
-Found four available tracks in menu OK
+*** Turning captions off
+Found 4 menu items OK
EXPECTED (video.textTracks.length == '3') OK
Track 0 should be disabled
EXPECTED (video.textTracks[0].mode == 'disabled') OK
@@ -27,6 +36,5 @@
Track 2 should be disabled
EXPECTED (video.textTracks[2].mode == 'disabled') OK
No text track cue with display id '-webkit-media-text-track-display' is currently visible
-No text track cue with display id '-webkit-media-text-track-display' is currently visible
END OF TEST
Modified: trunk/LayoutTests/media/video-controls-captions-trackmenu.html (136977 => 136978)
--- trunk/LayoutTests/media/video-controls-captions-trackmenu.html 2012-12-07 21:26:48 UTC (rev 136977)
+++ trunk/LayoutTests/media/video-controls-captions-trackmenu.html 2012-12-07 21:30:12 UTC (rev 136978)
@@ -13,7 +13,7 @@
function clickCCButton()
{
- consoleWrite("*** Click the CC button.");
+ consoleWrite("<br>*** Click the CC button.");
eventSender.mouseMoveTo(captionsButtonCoordinates[0], captionsButtonCoordinates[1]);
eventSender.mouseDown();
eventSender.mouseUp();
@@ -21,8 +21,11 @@
function startTest()
{
+ consoleWrite("<br>*** Add another text track.");
+ run('video.addTextTrack("captions", "Commentary", "ru")');
+
if (window.eventSender) {
- consoleWrite("*** Set the user language preference.");
+ consoleWrite("<br>*** Set the user language preference.");
run("internals.setUserPreferredLanguages(['en'])");
try {
@@ -36,7 +39,7 @@
}
}
- function selectCaptionMenuItem(index, nextStep)
+ function trackMenuList()
{
var trackListElement;
try {
@@ -45,24 +48,36 @@
failTest(exception.description);
return;
}
- // Track list should have a <ul> with four <li> children (One of them is "Off").
+ // Track list should have a <ul> with five <li> children (One of them is "Off").
var trackList = trackListElement.querySelector("ul");
if (!trackList) {
failTest("Could not find a child ul element in track list menu");
return;
}
- logResult(true, "Found tracklist menu and list of tracks");
var trackListItems = trackList.querySelectorAll("li");
if (!trackListItems) {
failTest("Could not find a child li elements in track list menu");
return;
}
- if (trackListItems.length != 4) {
- failTest("Expected 4 tracks in menu but found " + trackListItems.length);
+
+ return trackListItems;
+ }
+
+ function testMenu()
+ {
+ var trackListItems = trackMenuList();
+ var expectedItemCount = video.textTracks.length + 1;
+ if (trackListItems.length != expectedItemCount) {
+ failTest("Expected " + expectedItemCount + " items in menu but found " + trackListItems.length);
return;
}
- logResult(true, "Found four available tracks in menu");
+ logResult(true, "Found " + expectedItemCount + " menu items");
+ }
+
+ function selectCaptionMenuItem(index, nextStep)
+ {
// Click on the selected item
+ var trackListItems = trackMenuList();
var selectedTrackItem = trackListItems[index];
var boundingRect = selectedTrackItem.getBoundingClientRect();
var x = boundingRect.left + boundingRect.width / 2;
@@ -70,7 +85,7 @@
eventSender.mouseMoveTo(x, y);
eventSender.mouseDown();
eventSender.mouseUp();
- window.setTimeout(nextStep, 100);
+ window.setTimeout(function() { testMenu(); nextStep(); }, 100);
}
function turnCaptionsOn()
@@ -82,22 +97,27 @@
function testCaptionsVisible()
{
- testExpected("video.textTracks.length", 3);
+ testExpected("video.textTracks.length", 4);
consoleWrite("Track 0 should be disabled");
testExpected("video.textTracks[0].mode", "disabled");
consoleWrite("Track 1 should be showing");
testExpected("video.textTracks[1].mode", "showing");
consoleWrite("Track 2 should be disabled");
testExpected("video.textTracks[2].mode", "disabled");
+ consoleWrite("Track 3 should be disabled");
+ testExpected("video.textTracks[3].mode", "disabled");
testExpected("textTrackDisplayElement(video, 'display').innerText", "Lorem");
+
+ consoleWrite("<br>*** Remove a track.");
+ run('video.removeChild(document.querySelectorAll("track")[0])');
+
clickCCButton();
window.setTimeout(turnCaptionsOff, 100);
}
function turnCaptionsOff()
{
- consoleWrite("*** Turning captions on");
- // Click the Off button
+ consoleWrite("*** Turning captions off");
selectCaptionMenuItem(0, testCaptionsDisabled);
}
@@ -111,7 +131,6 @@
consoleWrite("Track 2 should be disabled");
testExpected("video.textTracks[2].mode", "disabled");
testExpected("textTrackDisplayElement(video, 'display').innerText", "Lorem");
- testExpected("textTrackDisplayElement(video, 'display').innerText", "Lorem");
endTest();
}
Modified: trunk/Source/WebCore/ChangeLog (136977 => 136978)
--- trunk/Source/WebCore/ChangeLog 2012-12-07 21:26:48 UTC (rev 136977)
+++ trunk/Source/WebCore/ChangeLog 2012-12-07 21:30:12 UTC (rev 136978)
@@ -1,3 +1,38 @@
+2012-12-07 Eric Carlson <[email protected]>
+
+ Captions menu doesn't update to track changes
+ https://bugs.webkit.org/show_bug.cgi?id=104393
+
+ Reviewed by Dean Jackson.
+
+ Flag the captions menu as needing an update when tracks are added or removed. Don't actually
+ change the menu until it needs to be displayed.
+
+ No new tests, media/video-controls-captions-trackmenu.html was updated to test this.
+
+ * html/HTMLMediaElement.cpp:
+ (WebCore::HTMLMediaElement::addTextTrack): Call closedCaptionTracksChanged().
+ (WebCore::HTMLMediaElement::didRemoveTrack): Ditto.
+ (WebCore::HTMLMediaElement::configureTextTracks): Ditto.
+
+ * html/shadow/MediaControlElements.cpp:
+ (WebCore::MediaControlClosedCaptionsTrackListElement::MediaControlClosedCaptionsTrackListElement):
+ Intialize m_trackListHasChanged.
+ (WebCore::MediaControlClosedCaptionsTrackListElement::updateDisplay): Call rebuildTrackListMenu if
+ the track list has changed.
+ (WebCore::MediaControlClosedCaptionsTrackListElement::rebuildTrackListMenu): Renamed from resetTrackListMenu.
+ * html/shadow/MediaControlElements.h:
+ (WebCore::MediaControlClosedCaptionsTrackListElement::resetTrackListMenu): Just set m_trackListHasChanged.
+
+ * html/shadow/MediaControls.h:
+ (WebCore::MediaControls::closedCaptionTracksChanged): New, do nothing for base class.
+
+ * html/shadow/MediaControlsApple.cpp:
+ (WebCore::MediaControlsApple::toggleClosedCaptionTrackList): Update the track list before
+ showing it.
+ (WebCore::MediaControlsApple::closedCaptionTracksChanged):
+ * html/shadow/MediaControlsApple.h:
+
2012-12-07 Stephen White <[email protected]>
CSS url() filters with forward references don't work
Modified: trunk/Source/WebCore/html/HTMLMediaElement.cpp (136977 => 136978)
--- trunk/Source/WebCore/html/HTMLMediaElement.cpp 2012-12-07 21:26:48 UTC (rev 136977)
+++ trunk/Source/WebCore/html/HTMLMediaElement.cpp 2012-12-07 21:30:12 UTC (rev 136978)
@@ -2804,6 +2804,9 @@
// ... its text track mode to the text track hidden mode, and its text track list of cues to an empty list ...
textTrack->setMode(TextTrack::hiddenKeyword());
+ if (hasMediaControls())
+ mediaControls()->closedCaptionTracksChanged();
+
return textTrack.release();
}
@@ -2877,6 +2880,9 @@
endIgnoringTrackDisplayUpdateRequests();
}
+ if (hasMediaControls())
+ mediaControls()->closedCaptionTracksChanged();
+
size_t index = m_textTracksWhenResourceSelectionBegan.find(textTrack.get());
if (index != notFound)
m_textTracksWhenResourceSelectionBegan.remove(index);
@@ -3072,6 +3078,9 @@
configureTextTrackGroup(metadataTracks);
if (otherTracks.tracks.size())
configureTextTrackGroup(otherTracks);
+
+ if (hasMediaControls())
+ mediaControls()->closedCaptionTracksChanged();
}
#endif
Modified: trunk/Source/WebCore/html/shadow/MediaControlElements.cpp (136977 => 136978)
--- trunk/Source/WebCore/html/shadow/MediaControlElements.cpp 2012-12-07 21:26:48 UTC (rev 136977)
+++ trunk/Source/WebCore/html/shadow/MediaControlElements.cpp 2012-12-07 21:30:12 UTC (rev 136978)
@@ -727,6 +727,7 @@
MediaControlClosedCaptionsTrackListElement::MediaControlClosedCaptionsTrackListElement(Document* document, MediaControls* controls)
: MediaControlDivElement(document, MediaClosedCaptionsTrackList)
, m_controls(controls)
+ , m_trackListHasChanged(true)
{
}
@@ -795,6 +796,9 @@
if (!trackList || !trackList->length())
return;
+ if (m_trackListHasChanged)
+ rebuildTrackListMenu();
+
bool captionsVisible = mediaElement->closedCaptionsVisible();
for (unsigned i = 0, length = menuItems.size(); i < length; ++i) {
RefPtr<Element> trackItem = menuItems[i];
@@ -819,13 +823,15 @@
#endif
}
-void MediaControlClosedCaptionsTrackListElement::resetTrackListMenu()
+void MediaControlClosedCaptionsTrackListElement::rebuildTrackListMenu()
{
#if ENABLE(VIDEO_TRACK)
// Remove any existing content.
removeChildren();
menuItems.clear();
+ m_trackListHasChanged = false;
+
if (!mediaController()->hasClosedCaptions())
return;
Modified: trunk/Source/WebCore/html/shadow/MediaControlElements.h (136977 => 136978)
--- trunk/Source/WebCore/html/shadow/MediaControlElements.h 2012-12-07 21:26:48 UTC (rev 136977)
+++ trunk/Source/WebCore/html/shadow/MediaControlElements.h 2012-12-07 21:30:12 UTC (rev 136978)
@@ -302,17 +302,20 @@
virtual bool willRespondToMouseClickEvents() OVERRIDE { return true; }
void updateDisplay();
- void resetTrackListMenu();
+ void resetTrackListMenu() { m_trackListHasChanged = true; }
private:
MediaControlClosedCaptionsTrackListElement(Document*, MediaControls*);
+ void rebuildTrackListMenu();
+
virtual const AtomicString& shadowPseudoId() const OVERRIDE;
virtual void defaultEventHandler(Event*) OVERRIDE;
typedef Vector<RefPtr<Element> > TrackMenuItems;
TrackMenuItems menuItems;
MediaControls* m_controls;
+ bool m_trackListHasChanged;
};
// ----------------------------
Modified: trunk/Source/WebCore/html/shadow/MediaControls.h (136977 => 136978)
--- trunk/Source/WebCore/html/shadow/MediaControls.h 2012-12-07 21:26:48 UTC (rev 136977)
+++ trunk/Source/WebCore/html/shadow/MediaControls.h 2012-12-07 21:30:12 UTC (rev 136978)
@@ -89,6 +89,7 @@
virtual void changedClosedCaptionsVisibility();
virtual void toggleClosedCaptionTrackList() { }
+ virtual void closedCaptionTracksChanged() { }
virtual void enteredFullscreen();
virtual void exitedFullscreen();
Modified: trunk/Source/WebCore/html/shadow/MediaControlsApple.cpp (136977 => 136978)
--- trunk/Source/WebCore/html/shadow/MediaControlsApple.cpp 2012-12-07 21:26:48 UTC (rev 136977)
+++ trunk/Source/WebCore/html/shadow/MediaControlsApple.cpp 2012-12-07 21:30:12 UTC (rev 136978)
@@ -488,11 +488,20 @@
if (m_closedCaptionsContainer) {
if (m_closedCaptionsContainer->isShowing())
m_closedCaptionsContainer->hide();
- else
+ else {
+ if (m_closedCaptionsTrackList)
+ m_closedCaptionsTrackList->updateDisplay();
m_closedCaptionsContainer->show();
+ }
}
}
+void MediaControlsApple::closedCaptionTracksChanged()
+{
+ if (m_closedCaptionsTrackList)
+ m_closedCaptionsTrackList->resetTrackListMenu();
}
+}
+
#endif
Modified: trunk/Source/WebCore/html/shadow/MediaControlsApple.h (136977 => 136978)
--- trunk/Source/WebCore/html/shadow/MediaControlsApple.h 2012-12-07 21:26:48 UTC (rev 136977)
+++ trunk/Source/WebCore/html/shadow/MediaControlsApple.h 2012-12-07 21:30:12 UTC (rev 136978)
@@ -59,12 +59,12 @@
virtual void updateStatusDisplay() OVERRIDE;
virtual void changedClosedCaptionsVisibility() OVERRIDE;
- void toggleClosedCaptionTrackList();
+ virtual void toggleClosedCaptionTrackList() OVERRIDE;
+ virtual void closedCaptionTracksChanged() OVERRIDE;
private:
MediaControlsApple(Document*);
-
MediaControlRewindButtonElement* m_rewindButton;
MediaControlReturnToRealtimeButtonElement* m_returnToRealTimeButton;
MediaControlStatusDisplayElement* m_statusDisplay;