Diff
Modified: trunk/LayoutTests/ChangeLog (158759 => 158760)
--- trunk/LayoutTests/ChangeLog 2013-11-06 18:51:58 UTC (rev 158759)
+++ trunk/LayoutTests/ChangeLog 2013-11-06 18:53:17 UTC (rev 158760)
@@ -1,3 +1,13 @@
+2013-11-06 Brendan Long <[email protected]>
+
+ Add "id" attribute to TextTrack
+ https://bugs.webkit.org/show_bug.cgi?id=123825
+
+ Reviewed by Eric Carlson.
+
+ * media/track/track-id-expected.txt: Added.
+ * media/track/track-id.html: Added.
+
2013-11-06 Michał Pakuła vel Rutka <[email protected]>
[ATK] accessibility/title-ui-element-correctness.html fails
Added: trunk/LayoutTests/media/track/track-id-expected.txt (0 => 158760)
--- trunk/LayoutTests/media/track/track-id-expected.txt (rev 0)
+++ trunk/LayoutTests/media/track/track-id-expected.txt 2013-11-06 18:53:17 UTC (rev 158760)
@@ -0,0 +1,7 @@
+Tests that the 'id' attribute on a TextTrack matches the track element.
+
+
+EXPECTED (video.textTracks[0].id == 'Test-ID-123') OK
+
+END OF TEST
+
Added: trunk/LayoutTests/media/track/track-id.html (0 => 158760)
--- trunk/LayoutTests/media/track/track-id.html (rev 0)
+++ trunk/LayoutTests/media/track/track-id.html 2013-11-06 18:53:17 UTC (rev 158760)
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <script src=""
+ <script src=""
+ <script>
+
+ function loaded()
+ {
+ findMediaElement();
+ var trackElement = video.firstElementChild;
+
+ testExpected("video.textTracks[0].id", trackElement.id);
+
+ consoleWrite("");
+ endTest();
+ }
+
+ setCaptionDisplayMode('Automatic');
+
+ </script>
+ </head>
+ <body _onload_="loaded()">
+ <p>Tests that the 'id' attribute on a TextTrack matches the track element.</p>
+ <video>
+ <track id="Test-ID-123" src=""
+ </video>
+ </body>
+</html>
Modified: trunk/Source/WebCore/ChangeLog (158759 => 158760)
--- trunk/Source/WebCore/ChangeLog 2013-11-06 18:51:58 UTC (rev 158759)
+++ trunk/Source/WebCore/ChangeLog 2013-11-06 18:53:17 UTC (rev 158760)
@@ -1,3 +1,41 @@
+2013-11-06 Brendan Long <[email protected]>
+
+ Add "id" attribute to TextTrack
+ https://bugs.webkit.org/show_bug.cgi?id=123825
+
+ Reviewed by Eric Carlson.
+
+ Test: media/track/track-id.html
+
+ * html/HTMLMediaElement.cpp:
+ (HTMLMediaElement::addTextTrack): Add emptyString() for track id.
+ * html/track/AudioTrack.cpp:
+ (WebCore::AudioTrack::AudioTrack): Pass trackPrivate->id() to TrackBase.
+ (WebCore::AudioTrack::idChanged): Added, set id.
+ * html/track/AudioTrack.h: Move m_id to TrackBase.
+ * html/track/InbandTextTrack.cpp:
+ (WebCore::InbandTextTrack::InbandTextTrack): Pass trackPrivate->id() to TrackBase.
+ (WebCore::InbandTextTrack::idChanged): Added, set id.
+ * html/track/InbandTextTrack.h: Add idChanged().
+ * html/track/LoadableTextTrack.cpp:
+ (WebCore::LoadableTextTrack::LoadableTextTrack): Add emptyString() for track id.
+ (WebCore::LoadableTextTrack::id): Override to return the track element's id.
+ * html/track/TextTrack.cpp:
+ (WebCore::TextTrack::captionMenuOffItem): Add empty string for track id.
+ (WebCore::TextTrack::captionMenuAutomaticItem): Add empty string for track id.
+ (WebCore::TextTrack::TextTrack): Pass id to TrackBase.
+ * html/track/TextTrack.h:
+ (WebCore::TextTrack::create): Add id parameter.
+ * html/track/TextTrack.idl: Add id attribute.
+ * html/track/TrackBase.cpp:
+ (WebCore::TrackBase::TrackBase): Add m_id.
+ * html/track/TrackBase.h: Add id attribute / m_id.
+ * html/track/VideoTrack.cpp:
+ (WebCore::VideoTrack::VideoTrack): Pass trackPrivate->id() to TrackBase.
+ (WebCore::VideoTrack::idChanged): Added, set id.
+ * html/track/VideoTrack.h: Move m_id to TrackBase.
+ * platform/graphics/TrackPrivateBase.h: Add idChanged() callback.
+
2013-11-06 Antti Koivisto <[email protected]>
Move array position caching out from HTMLCollection
Modified: trunk/Source/WebCore/html/HTMLMediaElement.cpp (158759 => 158760)
--- trunk/Source/WebCore/html/HTMLMediaElement.cpp 2013-11-06 18:51:58 UTC (rev 158759)
+++ trunk/Source/WebCore/html/HTMLMediaElement.cpp 2013-11-06 18:53:17 UTC (rev 158760)
@@ -3121,7 +3121,7 @@
// 5. Create a new text track corresponding to the new object, and set its text track kind to kind, its text
// track label to label, its text track language to language...
- RefPtr<TextTrack> textTrack = TextTrack::create(ActiveDOMObject::scriptExecutionContext(), this, kind, label, language);
+ RefPtr<TextTrack> textTrack = TextTrack::create(ActiveDOMObject::scriptExecutionContext(), this, kind, emptyString(), label, language);
// Note, due to side effects when changing track parameters, we have to
// first append the track to the text track list.
Modified: trunk/Source/WebCore/html/track/AudioTrack.cpp (158759 => 158760)
--- trunk/Source/WebCore/html/track/AudioTrack.cpp 2013-11-06 18:51:58 UTC (rev 158759)
+++ trunk/Source/WebCore/html/track/AudioTrack.cpp 2013-11-06 18:53:17 UTC (rev 158760)
@@ -78,8 +78,7 @@
}
AudioTrack::AudioTrack(AudioTrackClient* client, PassRefPtr<AudioTrackPrivate> trackPrivate)
- : TrackBase(TrackBase::AudioTrack, trackPrivate->label(), trackPrivate->language())
- , m_id(trackPrivate->id())
+ : TrackBase(TrackBase::AudioTrack, trackPrivate->id(), trackPrivate->label(), trackPrivate->language())
, m_enabled(trackPrivate->enabled())
, m_client(client)
, m_private(trackPrivate)
@@ -161,6 +160,12 @@
setEnabled(enabled);
}
+void AudioTrack::idChanged(TrackPrivateBase* trackPrivate, const String& id)
+{
+ ASSERT_UNUSED(trackPrivate, trackPrivate == m_private);
+ setId(id);
+}
+
void AudioTrack::labelChanged(TrackPrivateBase* trackPrivate, const String& label)
{
ASSERT_UNUSED(trackPrivate, trackPrivate == m_private);
Modified: trunk/Source/WebCore/html/track/AudioTrack.h (158759 => 158760)
--- trunk/Source/WebCore/html/track/AudioTrack.h 2013-11-06 18:51:58 UTC (rev 158759)
+++ trunk/Source/WebCore/html/track/AudioTrack.h 2013-11-06 18:53:17 UTC (rev 158760)
@@ -54,9 +54,6 @@
}
virtual ~AudioTrack();
- AtomicString id() const { return m_id; }
- void setId(const AtomicString& id) { m_id = id; }
-
static const AtomicString& alternativeKeyword();
static const AtomicString& descriptionKeyword();
static const AtomicString& mainKeyword();
@@ -80,11 +77,11 @@
virtual bool isValidKind(const AtomicString&) const OVERRIDE;
virtual void enabledChanged(AudioTrackPrivate*, bool) OVERRIDE;
+ virtual void idChanged(TrackPrivateBase*, const String&) OVERRIDE;
virtual void labelChanged(TrackPrivateBase*, const String&) OVERRIDE;
virtual void languageChanged(TrackPrivateBase*, const String&) OVERRIDE;
virtual void willRemove(TrackPrivateBase*) OVERRIDE;
- AtomicString m_id;
bool m_enabled;
AudioTrackClient* m_client;
Modified: trunk/Source/WebCore/html/track/InbandTextTrack.cpp (158759 => 158760)
--- trunk/Source/WebCore/html/track/InbandTextTrack.cpp 2013-11-06 18:51:58 UTC (rev 158759)
+++ trunk/Source/WebCore/html/track/InbandTextTrack.cpp 2013-11-06 18:53:17 UTC (rev 158760)
@@ -57,9 +57,9 @@
}
}
-InbandTextTrack::InbandTextTrack(ScriptExecutionContext* context, TextTrackClient* client, PassRefPtr<InbandTextTrackPrivate> tracksPrivate)
- : TextTrack(context, client, emptyString(), tracksPrivate->label(), tracksPrivate->language(), InBand)
- , m_private(tracksPrivate)
+InbandTextTrack::InbandTextTrack(ScriptExecutionContext* context, TextTrackClient* client, PassRefPtr<InbandTextTrackPrivate> trackPrivate)
+ : TextTrack(context, client, emptyString(), trackPrivate->id(), trackPrivate->label(), trackPrivate->language(), InBand)
+ , m_private(trackPrivate)
{
m_private->setClient(this);
@@ -154,6 +154,12 @@
return m_private->trackIndex();
}
+void InbandTextTrack::idChanged(TrackPrivateBase* trackPrivate, const String& id)
+{
+ ASSERT_UNUSED(trackPrivate, trackPrivate == m_private);
+ setId(id);
+}
+
void InbandTextTrack::labelChanged(TrackPrivateBase* trackPrivate, const String& label)
{
ASSERT_UNUSED(trackPrivate, trackPrivate == m_private);
Modified: trunk/Source/WebCore/html/track/InbandTextTrack.h (158759 => 158760)
--- trunk/Source/WebCore/html/track/InbandTextTrack.h 2013-11-06 18:51:58 UTC (rev 158759)
+++ trunk/Source/WebCore/html/track/InbandTextTrack.h 2013-11-06 18:53:17 UTC (rev 158760)
@@ -55,6 +55,7 @@
private:
+ virtual void idChanged(TrackPrivateBase*, const String&) OVERRIDE;
virtual void labelChanged(TrackPrivateBase*, const String&) OVERRIDE;
virtual void languageChanged(TrackPrivateBase*, const String&) OVERRIDE;
virtual void willRemove(TrackPrivateBase*) OVERRIDE;
Modified: trunk/Source/WebCore/html/track/LoadableTextTrack.cpp (158759 => 158760)
--- trunk/Source/WebCore/html/track/LoadableTextTrack.cpp 2013-11-06 18:51:58 UTC (rev 158759)
+++ trunk/Source/WebCore/html/track/LoadableTextTrack.cpp 2013-11-06 18:53:17 UTC (rev 158760)
@@ -37,7 +37,7 @@
namespace WebCore {
LoadableTextTrack::LoadableTextTrack(HTMLTrackElement* track, const String& kind, const String& label, const String& language)
- : TextTrack(&track->document(), track, kind, label, language, TrackElement)
+ : TextTrack(&track->document(), track, kind, emptyString(), label, language, TrackElement)
, m_trackElement(track)
, m_loadTimer(this, &LoadableTextTrack::loadTimerFired)
, m_isDefault(false)
@@ -148,6 +148,13 @@
}
#endif
+AtomicString LoadableTextTrack::id() const
+{
+ if (m_trackElement)
+ return m_trackElement->getAttribute("id");
+ return emptyString();
+}
+
size_t LoadableTextTrack::trackElementIndex()
{
ASSERT(m_trackElement);
Modified: trunk/Source/WebCore/html/track/LoadableTextTrack.h (158759 => 158760)
--- trunk/Source/WebCore/html/track/LoadableTextTrack.h 2013-11-06 18:51:58 UTC (rev 158759)
+++ trunk/Source/WebCore/html/track/LoadableTextTrack.h 2013-11-06 18:53:17 UTC (rev 158760)
@@ -57,6 +57,8 @@
virtual void clearClient();
+ virtual AtomicString id() const OVERRIDE;
+
size_t trackElementIndex();
HTMLTrackElement* trackElement() { return m_trackElement; }
void setTrackElement(HTMLTrackElement*);
Modified: trunk/Source/WebCore/html/track/TextTrack.cpp (158759 => 158760)
--- trunk/Source/WebCore/html/track/TextTrack.cpp 2013-11-06 18:51:58 UTC (rev 158759)
+++ trunk/Source/WebCore/html/track/TextTrack.cpp 2013-11-06 18:53:17 UTC (rev 158760)
@@ -101,18 +101,18 @@
TextTrack* TextTrack::captionMenuOffItem()
{
- static TextTrack* off = TextTrack::create(0, 0, "off menu item", "", "").leakRef();
+ static TextTrack* off = TextTrack::create(0, 0, "off menu item", "", "", "").leakRef();
return off;
}
TextTrack* TextTrack::captionMenuAutomaticItem()
{
- static TextTrack* automatic = TextTrack::create(0, 0, "automatic menu item", "", "").leakRef();
+ static TextTrack* automatic = TextTrack::create(0, 0, "automatic menu item", "", "", "").leakRef();
return automatic;
}
-TextTrack::TextTrack(ScriptExecutionContext* context, TextTrackClient* client, const AtomicString& kind, const AtomicString& label, const AtomicString& language, TextTrackType type)
- : TrackBase(TrackBase::TextTrack, label, language)
+TextTrack::TextTrack(ScriptExecutionContext* context, TextTrackClient* client, const AtomicString& kind, const AtomicString& id, const AtomicString& label, const AtomicString& language, TextTrackType type)
+ : TrackBase(TrackBase::TextTrack, id, label, language)
, m_cues(0)
, m_scriptExecutionContext(context)
#if ENABLE(WEBVTT_REGIONS)
Modified: trunk/Source/WebCore/html/track/TextTrack.h (158759 => 158760)
--- trunk/Source/WebCore/html/track/TextTrack.h 2013-11-06 18:51:58 UTC (rev 158759)
+++ trunk/Source/WebCore/html/track/TextTrack.h 2013-11-06 18:53:17 UTC (rev 158760)
@@ -67,9 +67,9 @@
#endif
{
public:
- static PassRefPtr<TextTrack> create(ScriptExecutionContext* context, TextTrackClient* client, const AtomicString& kind, const AtomicString& label, const AtomicString& language)
+ static PassRefPtr<TextTrack> create(ScriptExecutionContext* context, TextTrackClient* client, const AtomicString& kind, const AtomicString& id, const AtomicString& label, const AtomicString& language)
{
- return adoptRef(new TextTrack(context, client, kind, label, language, AddTrack));
+ return adoptRef(new TextTrack(context, client, kind, id, label, language, AddTrack));
}
virtual ~TextTrack();
@@ -154,7 +154,7 @@
using RefCounted<TrackBase>::deref;
protected:
- TextTrack(ScriptExecutionContext*, TextTrackClient*, const AtomicString& kind, const AtomicString& label, const AtomicString& language, TextTrackType);
+ TextTrack(ScriptExecutionContext*, TextTrackClient*, const AtomicString& kind, const AtomicString& id, const AtomicString& label, const AtomicString& language, TextTrackType);
#if ENABLE(VIDEO_TRACK) && ENABLE(WEBVTT_REGIONS)
TextTrackRegionList* regionList();
#endif
Modified: trunk/Source/WebCore/html/track/TextTrack.idl (158759 => 158760)
--- trunk/Source/WebCore/html/track/TextTrack.idl 2013-11-06 18:51:58 UTC (rev 158759)
+++ trunk/Source/WebCore/html/track/TextTrack.idl 2013-11-06 18:53:17 UTC (rev 158760)
@@ -31,6 +31,7 @@
SkipVTableValidation,
OperationsNotDeletable
] interface TextTrack {
+ readonly attribute DOMString id;
readonly attribute DOMString kind;
readonly attribute DOMString label;
readonly attribute DOMString language;
Modified: trunk/Source/WebCore/html/track/TrackBase.cpp (158759 => 158760)
--- trunk/Source/WebCore/html/track/TrackBase.cpp 2013-11-06 18:51:58 UTC (rev 158759)
+++ trunk/Source/WebCore/html/track/TrackBase.cpp 2013-11-06 18:53:17 UTC (rev 158760)
@@ -32,8 +32,9 @@
namespace WebCore {
-TrackBase::TrackBase(Type type, const AtomicString& label, const AtomicString& language)
+TrackBase::TrackBase(Type type, const AtomicString& id, const AtomicString& label, const AtomicString& language)
: m_mediaElement(0)
+ , m_id(id)
, m_label(label)
, m_language(language)
{
Modified: trunk/Source/WebCore/html/track/TrackBase.h (158759 => 158760)
--- trunk/Source/WebCore/html/track/TrackBase.h 2013-11-06 18:51:58 UTC (rev 158759)
+++ trunk/Source/WebCore/html/track/TrackBase.h 2013-11-06 18:53:17 UTC (rev 158760)
@@ -47,6 +47,9 @@
HTMLMediaElement* mediaElement() { return m_mediaElement; }
virtual Element* element();
+ virtual AtomicString id() const { return m_id; }
+ virtual void setId(const AtomicString& id) { m_id = id; }
+
AtomicString kind() const { return m_kind; }
virtual void setKind(const AtomicString&);
@@ -59,7 +62,7 @@
virtual void clearClient() = 0;
protected:
- TrackBase(Type, const AtomicString& label, const AtomicString& language);
+ TrackBase(Type, const AtomicString& id, const AtomicString& label, const AtomicString& language);
virtual bool isValidKind(const AtomicString&) const = 0;
virtual const AtomicString& defaultKindKeyword() const = 0;
@@ -68,6 +71,7 @@
private:
Type m_type;
+ AtomicString m_id;
AtomicString m_kind;
AtomicString m_label;
AtomicString m_language;
Modified: trunk/Source/WebCore/html/track/VideoTrack.cpp (158759 => 158760)
--- trunk/Source/WebCore/html/track/VideoTrack.cpp 2013-11-06 18:51:58 UTC (rev 158759)
+++ trunk/Source/WebCore/html/track/VideoTrack.cpp 2013-11-06 18:53:17 UTC (rev 158760)
@@ -78,8 +78,7 @@
}
VideoTrack::VideoTrack(VideoTrackClient* client, PassRefPtr<VideoTrackPrivate> trackPrivate)
- : TrackBase(TrackBase::VideoTrack, trackPrivate->label(), trackPrivate->language())
- , m_id(trackPrivate->id())
+ : TrackBase(TrackBase::VideoTrack, trackPrivate->id(), trackPrivate->label(), trackPrivate->language())
, m_selected(trackPrivate->selected())
, m_client(client)
, m_private(trackPrivate)
@@ -161,6 +160,12 @@
setSelected(selected);
}
+void VideoTrack::idChanged(TrackPrivateBase* trackPrivate, const String& id)
+{
+ ASSERT_UNUSED(trackPrivate, trackPrivate == m_private);
+ setId(id);
+}
+
void VideoTrack::labelChanged(TrackPrivateBase* trackPrivate, const String& label)
{
ASSERT_UNUSED(trackPrivate, trackPrivate == m_private);
Modified: trunk/Source/WebCore/html/track/VideoTrack.h (158759 => 158760)
--- trunk/Source/WebCore/html/track/VideoTrack.h 2013-11-06 18:51:58 UTC (rev 158759)
+++ trunk/Source/WebCore/html/track/VideoTrack.h 2013-11-06 18:53:17 UTC (rev 158760)
@@ -54,9 +54,6 @@
}
virtual ~VideoTrack();
- AtomicString id() const { return m_id; }
- void setId(const AtomicString& id) { m_id = id; }
-
static const AtomicString& alternativeKeyword();
static const AtomicString& captionsKeyword();
static const AtomicString& mainKeyword();
@@ -80,11 +77,11 @@
virtual bool isValidKind(const AtomicString&) const OVERRIDE;
virtual void selectedChanged(VideoTrackPrivate*, bool) OVERRIDE;
+ virtual void idChanged(TrackPrivateBase*, const String&) OVERRIDE;
virtual void labelChanged(TrackPrivateBase*, const String&) OVERRIDE;
virtual void languageChanged(TrackPrivateBase*, const String&) OVERRIDE;
virtual void willRemove(TrackPrivateBase*) OVERRIDE;
- AtomicString m_id;
bool m_selected;
VideoTrackClient* m_client;
Modified: trunk/Source/WebCore/platform/graphics/TrackPrivateBase.h (158759 => 158760)
--- trunk/Source/WebCore/platform/graphics/TrackPrivateBase.h 2013-11-06 18:51:58 UTC (rev 158759)
+++ trunk/Source/WebCore/platform/graphics/TrackPrivateBase.h 2013-11-06 18:53:17 UTC (rev 158760)
@@ -42,6 +42,7 @@
class TrackPrivateBaseClient {
public:
virtual ~TrackPrivateBaseClient() { }
+ virtual void idChanged(TrackPrivateBase*, const String&) = 0;
virtual void labelChanged(TrackPrivateBase*, const String&) = 0;
virtual void languageChanged(TrackPrivateBase*, const String&) = 0;
virtual void willRemove(TrackPrivateBase*) = 0;