Source/WebCore/ChangeLog

 12011-11-17 Anna Cavender <annacc@chromium.org>
 2
 3 Move readyState from TextTrack to HTMLTrackElement
 4 https://bugs.webkit.org/show_bug.cgi?id=72553
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 * html/HTMLTrackElement.cpp:
 9 (WebCore::HTMLTrackElement::HTMLTrackElement):
 10 Set initial readyState to NONE.
 11 (WebCore::HTMLTrackElement::setReadyState):
 12 This replaces textTrackReadyStateChanged() because only LoadableTextTrack
 13 needs to notify HTMLTrackElement of readyState changes (i.e.
 14 textTrackReadyStateChanged() is no longer required of TextTrackClient).
 15 * html/HTMLTrackElement.h:
 16 ReadyState enum and m_readyState member variable moved from TextTrack.
 17 (WebCore::HTMLTrackElement::readyState):
 18 New: readyState() getter.
 19 * html/HTMLTrackElement.idl:
 20 Add readyState attribute and associated constants.
 21
 22 * html/LoadableTextTrack.cpp:
 23 (WebCore::LoadableTextTrack::loadTimerFired): Set readyState on HTMLTrackElement.
 24 (WebCore::LoadableTextTrack::cueLoadingStarted): Ditto.
 25 (WebCore::LoadableTextTrack::cueLoadingCompleted): Ditto.
 26
 27 * html/TextTrack.cpp: Remove readyState from TextTrack.
 28 (WebCore::TextTrack::TextTrack): Ditto.
 29 * html/TextTrack.h: Ditto.
 30 * html/TextTrack.idl: Ditto.
 31
1322011-11-17 Adam Barth <abarth@webkit.org>
233
334 Remove bogus ASSERT.

Source/WebCore/html/HTMLTrackElement.cpp

@@using namespace HTMLNames;
4343
4444inline HTMLTrackElement::HTMLTrackElement(const QualifiedName& tagName, Document* document)
4545 : HTMLElement(tagName, document)
 46 , m_readyState(HTMLTrackElement::NONE)
4647{
4748 LOG(Media, "HTMLTrackElement::HTMLTrackElement - %p", this);
4849 ASSERT(hasTagName(trackTag));

@@void HTMLTrackElement::didCompleteLoad(LoadableTextTrack*, bool loadingFailed)
209210 ExceptionCode ec = 0;
210211 dispatchEvent(Event::create(loadingFailed ? eventNames().errorEvent : eventNames().loadEvent, false, false), ec);
211212}
212 
213 void HTMLTrackElement::textTrackReadyStateChanged(TextTrack* track)
 213
 214void HTMLTrackElement::setReadyState(ReadyState state)
214215{
 216 m_readyState = state;
215217 if (HTMLMediaElement* parent = mediaElement())
216  return parent->textTrackReadyStateChanged(track);
 218 return parent->textTrackReadyStateChanged(m_track.get());
217219}
218220
219221void HTMLTrackElement::textTrackKindChanged(TextTrack* track)

Source/WebCore/html/HTMLTrackElement.h

@@public:
5353
5454 bool isDefault() const;
5555 void setIsDefault(bool);
 56
 57 enum ReadyState { NONE = 0, LOADING = 1, LOADED = 2, ERROR = 3 };
 58 ReadyState readyState() const { return m_readyState; }
5659
5760 TextTrack* track();
5861
5962 void scheduleLoad();
6063 virtual bool canLoadUrl(LoadableTextTrack*, const KURL&);
6164 virtual void didCompleteLoad(LoadableTextTrack*, bool /* loadingFailed */);
 65
 66 void setReadyState(ReadyState);
6267
6368private:
6469 HTMLTrackElement(const QualifiedName&, Document*);

@@private:
7984 HTMLMediaElement* mediaElement() const;
8085
8186 // TextTrackClient
82  virtual void textTrackReadyStateChanged(TextTrack*);
8387 virtual void textTrackModeChanged(TextTrack*);
8488 virtual void textTrackKindChanged(TextTrack*);
8589 virtual void textTrackAddCues(TextTrack*, const TextTrackCueList*);

@@private:
8993
9094 LoadableTextTrack* ensureTrack();
9195
 96 HTMLTrackElement::ReadyState m_readyState;
9297 RefPtr<LoadableTextTrack> m_track;
9398};
9499

Source/WebCore/html/HTMLTrackElement.idl

@@module html {
2828 Conditional=VIDEO_TRACK,
2929 EnabledAtRuntime=webkitVideoTrack
3030 ] HTMLTrackElement : HTMLElement {
31  attribute [Reflect, URL] DOMString src;
32  attribute DOMString kind;
33  attribute DOMString srclang;
34  attribute DOMString label;
35  attribute [Reflect=default] boolean isDefault;
 31 attribute [Reflect, URL] DOMString src;
 32 attribute DOMString kind;
 33 attribute DOMString srclang;
 34 attribute DOMString label;
 35 attribute [Reflect=default] boolean isDefault;
3636
37  readonly attribute TextTrack track;
 37 const unsigned short NONE = 0;
 38 const unsigned short LOADING = 1;
 39 const unsigned short LOADED = 2;
 40 const unsigned short ERROR = 3;
 41 readonly attribute unsigned short readyState;
 42
 43 readonly attribute TextTrack track;
3844};
3945}

Source/WebCore/html/LoadableTextTrack.cpp

@@void LoadableTextTrack::scheduleLoad(const KURL& url)
6464
6565void LoadableTextTrack::loadTimerFired(Timer<LoadableTextTrack>*)
6666{
67  setReadyState(TextTrack::LOADING);
 67 m_trackElement->setReadyState(HTMLTrackElement::LOADING);
6868
6969 if (m_loader)
7070 m_loader->cancelLoad();
7171
7272 if (!m_trackElement || !m_trackElement->canLoadUrl(this, m_url)) {
73  setReadyState(TextTrack::HTML_ERROR);
 73 m_trackElement->setReadyState(HTMLTrackElement::ERROR);
7474 return;
7575 }
7676

@@void LoadableTextTrack::cueLoadingStarted(TextTrackLoader* loader)
100100{
101101 ASSERT_UNUSED(loader, m_loader == loader);
102102
103  setReadyState(TextTrack::LOADING);
 103 m_trackElement->setReadyState(HTMLTrackElement::LOADING);
104104}
105105
106106void LoadableTextTrack::cueLoadingCompleted(TextTrackLoader* loader, bool loadingFailed)
107107{
108108 ASSERT_UNUSED(loader, m_loader == loader);
109109
110  loadingFailed ? setReadyState(TextTrack::HTML_ERROR) : setReadyState(TextTrack::LOADED);
 110 loadingFailed ? m_trackElement->setReadyState(HTMLTrackElement::ERROR) : m_trackElement->setReadyState(HTMLTrackElement::LOADED);
111111
112112 if (m_trackElement)
113113 m_trackElement->didCompleteLoad(this, loadingFailed);

Source/WebCore/html/TextTrack.cpp

@@TextTrack::TextTrack(ScriptExecutionContext* context, TextTrackClient* client, c
7575 : TrackBase(context, TrackBase::TextTrack)
7676 , m_label(label)
7777 , m_language(language)
78  , m_readyState(TextTrack::NONE)
7978 , m_mode(TextTrack::HIDDEN)
8079 , m_client(client)
8180 , m_trackType(type)

@@void TextTrack::setKind(const String& kind)
119118 m_client->textTrackKindChanged(this);
120119}
121120
122 void TextTrack::setReadyState(ReadyState state)
123 {
124  m_readyState = state;
125  if (m_client)
126  m_client->textTrackReadyStateChanged(this);
127 }
128 
129121void TextTrack::setMode(unsigned short mode, ExceptionCode& ec)
130122{
131123 // 4.8.10.12.5 On setting the mode, if the new value is not either 0, 1, or 2,

Source/WebCore/html/TextTrack.h

@@class TextTrackCueList;
4343class TextTrackClient {
4444public:
4545 virtual ~TextTrackClient() { }
46  virtual void textTrackReadyStateChanged(TextTrack*) = 0;
4746 virtual void textTrackKindChanged(TextTrack*) = 0;
4847 virtual void textTrackModeChanged(TextTrack*) = 0;
4948 virtual void textTrackAddCues(TextTrack*, const TextTrackCueList*) = 0;

@@public:
7675 String language() const { return m_language; }
7776 void setLanguage(const String& language) { m_language = language; }
7877
79  enum ReadyState { NONE = 0, LOADING = 1, LOADED = 2, HTML_ERROR = 3 };
80  ReadyState readyState() const { return m_readyState; }
81 
8278 enum Mode { DISABLED = 0, HIDDEN = 1, SHOWING = 2 };
8379 Mode mode() const { return m_mode; }
8480 void setMode(unsigned short, ExceptionCode&);

@@public:
107103protected:
108104 TextTrack(ScriptExecutionContext*, TextTrackClient*, const String& kind, const String& label, const String& language, TextTrackType);
109105
110  void setReadyState(ReadyState);
111 
112106 RefPtr<TextTrackCueList> m_cues;
113107
114108private:
115109 String m_kind;
116110 String m_label;
117111 String m_language;
118  TextTrack::ReadyState m_readyState;
119112 TextTrack::Mode m_mode;
120113 TextTrackClient* m_client;
121114 TextTrackType m_trackType;

Source/WebCore/html/TextTrack.idl

@@module html {
3434 readonly attribute DOMString label;
3535 readonly attribute DOMString language;
3636
37  const unsigned short NONE = 0;
38  const unsigned short LOADING = 1;
39  const unsigned short LOADED = 2;
40  // Reflect is used for TextTrack::ERROR because it conflicts with a windows define.
41  const [Reflect=HTML_ERROR] unsigned short ERROR = 3;
42  readonly attribute unsigned short readyState;
43 
4437 const unsigned short DISABLED = 0;
4538 const unsigned short HIDDEN = 1;
4639 const unsigned short SHOWING = 2;

LayoutTests/ChangeLog

 12011-11-17 Anna Cavender <annacc@chromium.org>
 2
 3 Move readyState from TextTrack to HTMLTrackElement
 4 https://bugs.webkit.org/show_bug.cgi?id=72553
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 * media/track/track-add-track-expected.txt:
 9 * media/track/track-add-track.html:
 10 * media/track/track-constants-expected.txt:
 11 * media/track/track-constants.html:
 12 * media/track/track-load-error-readyState-expected.txt:
 13 * media/track/track-load-error-readyState.html:
 14 * media/track/track-load-from-element-readyState-expected.txt:
 15 * media/track/track-load-from-element-readyState.html:
 16 * media/track/track-load-from-src-readyState-expected.txt:
 17 * media/track/track-load-from-src-readyState.html:
 18
1192011-11-16 Peter Kasting <pkasting@google.com>
220
321 [chromium] Mark some inspector tests as flakily crashing.

LayoutTests/media/track/track-add-track-expected.txt

@@RUN(trackElement = document.createElement('track'))
55RUN(video.appendChild(trackElement))
66RUN(trackElement.src = 'captions-webvtt/tc004-webvtt-file.vtt')
77EXPECTED (video.textTracks.length == '1') OK
8 EXPECTED (tracks[0].readyState == '0') OK
 8EXPECTED (trackElement.readyState == '0') OK
99EVENT(addtrack)
1010EXPECTED (event.target == '[object TextTrackList]') OK
1111EXPECTED (event instanceof window.TrackEvent == 'true') OK

@@EXPECTED (event.track == '[object TextTrack]') OK
1414** Test a TextTrack created with video.addTrack().
1515RUN(tracks.push(video.addTrack('captions', 'Caption Track', 'en')))
1616EXPECTED (video.textTracks.length == '2') OK
17 EXPECTED (tracks[1].readyState == '0') OK
1817EVENT(addtrack)
1918EXPECTED (event.target == '[object TextTrackList]') OK
2019EXPECTED (event instanceof window.TrackEvent == 'true') OK
2120EXPECTED (event.track == '[object TextTrack]') OK
22 EXPECTED (tracks[1].readyState == '0') OK
2321
2422END OF TEST
2523

LayoutTests/media/track/track-add-track.html

2121 consoleWrite("<br>** Test a TextTrack created with video.addTrack().");
2222 run("tracks.push(video.addTrack('captions', 'Caption Track', 'en'))");
2323 testExpected("video.textTracks.length", 2);
24  testExpected("tracks[1].readyState", TextTrack.NONE);
2524 } else {
26  testExpected("tracks[1].readyState", TextTrack.NONE);
2725 consoleWrite("");
2826 endTest();
2927 }

4442
4543 run("trackElement.src = 'captions-webvtt/tc004-webvtt-file.vtt'");
4644 testExpected("video.textTracks.length", 1);
47  testExpected("tracks[0].readyState", TextTrack.NONE);
 45 testExpected("trackElement.readyState", HTMLTrackElement.NONE);
4846 }
4947
5048 </script>

LayoutTests/media/track/track-constants-expected.txt

11Test TextTrack constants.
22
3 EXPECTED (TextTrack.NONE == '0') OK
4 EXPECTED (TextTrack.LOADING == '1') OK
5 EXPECTED (TextTrack.LOADED == '2') OK
6 EXPECTED (TextTrack.ERROR == '3') OK
 3EXPECTED (HTMLTrackElement.NONE == '0') OK
 4EXPECTED (HTMLTrackElement.LOADING == '1') OK
 5EXPECTED (HTMLTrackElement.LOADED == '2') OK
 6EXPECTED (HTMLTrackElement.ERROR == '3') OK
77
88EXPECTED (TextTrack.DISABLED == '0') OK
99EXPECTED (TextTrack.HIDDEN == '1') OK

LayoutTests/media/track/track-constants.html

55 <script type="text/javascript">
66 function doTest ()
77 {
8  testExpected("TextTrack.NONE", 0);
9  testExpected("TextTrack.LOADING", 1);
10  testExpected("TextTrack.LOADED", 2);
11  testExpected("TextTrack.ERROR", 3);
 8 testExpected("HTMLTrackElement.NONE", 0);
 9 testExpected("HTMLTrackElement.LOADING", 1);
 10 testExpected("HTMLTrackElement.LOADED", 2);
 11 testExpected("HTMLTrackElement.ERROR", 3);
1212 consoleWrite("");
1313
1414 testExpected("TextTrack.DISABLED", 0);

LayoutTests/media/track/track-load-error-readyState-expected.txt

11Tests the error event on HTMLTrackElement and ERROR readyState on TextTrack.
22
33EVENT(error)
4 EXPECTED (track.track.readyState == '3') OK
 4EXPECTED (track.readyState == '3') OK
55END OF TEST
66

LayoutTests/media/track/track-load-error-readyState.html

1111 {
1212 consoleWrite("EVENT(error)");
1313 track = document.getElementById('testTrackError');
14  testExpected("track.track.readyState", TextTrack.ERROR);
 14 testExpected("track.readyState", HTMLTrackElement.ERROR);
1515 endTest();
1616 }
1717

LayoutTests/media/track/track-load-from-element-readyState-expected.txt

11Tests the load event on HTMLTrackElement and LOADED readyState on TextTrack when src is set on the element.
22
33EVENT(load)
4 EXPECTED (track.track.readyState == '2') OK
 4EXPECTED (track.readyState == '2') OK
55END OF TEST
66

LayoutTests/media/track/track-load-from-element-readyState.html

1111 {
1212 consoleWrite("EVENT(load)");
1313 track = document.getElementById('testTrackSrc');
14  testExpected("track.track.readyState", TextTrack.LOADED);
 14 testExpected("track.readyState", HTMLTrackElement.LOADED);
1515 endTest();
1616 }
1717

LayoutTests/media/track/track-load-from-src-readyState-expected.txt

11Tests the load event on HTMLTrackElement and LOADED readyState on TextTrack when src is set from JavaScript.
22
3 EXPECTED (track.track.readyState == '0') OK
 3EXPECTED (track.readyState == '0') OK
44EVENT(load)
5 EXPECTED (track.track.readyState == '2') OK
 5EXPECTED (track.readyState == '2') OK
66END OF TEST
77

LayoutTests/media/track/track-load-from-src-readyState.html

1616 function trackLoaded()
1717 {
1818 consoleWrite("EVENT(load)");
19  testExpected("track.track.readyState", TextTrack.LOADED);
 19 testExpected("track.readyState", HTMLTrackElement.LOADED);
2020 endTest();
2121 }
2222
2323 track = document.getElementById('testTrackEmpty');
24  testExpected("track.track.readyState", TextTrack.NONE);
 24 testExpected("track.readyState", HTMLTrackElement.NONE);
2525 track.addEventListener("load", function () { trackLoaded(); }, true);
2626 track.src = "captions-webvtt/tc004-webvtt-file.vtt";
2727