<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[200943] trunk/Source/WebCore</title>
</head>
<body>
<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; }
#msg dl a { font-weight: bold}
#msg dl a:link { color:#fc3; }
#msg dl a:active { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/200943">200943</a></dd>
<dt>Author</dt> <dd>cdumez@apple.com</dd>
<dt>Date</dt> <dd>2016-05-16 09:37:26 -0700 (Mon, 16 May 2016)</dd>
</dl>
<h3>Log Message</h3>
<pre>Modernize Track classes' code
https://bugs.webkit.org/show_bug.cgi?id=157735
Reviewed by Eric Carlson.
Modernize Track classes' code a bit.
* Modules/mediasource/MediaSource.cpp:
(WebCore::MediaSource::removeSourceBuffer):
* Modules/mediasource/SourceBuffer.cpp:
(WebCore::SourceBuffer::sourceBufferPrivateDidReceiveInitializationSegment):
* bindings/js/JSTrackCustom.cpp:
(WebCore::toTrack):
(WebCore::toJS):
* html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::audioTrackEnabledChanged):
(WebCore::HTMLMediaElement::textTrackModeChanged):
(WebCore::HTMLMediaElement::videoTrackSelectedChanged):
(WebCore::HTMLMediaElement::textTrackRemoveCues):
(WebCore::HTMLMediaElement::mediaPlayerDidAddTextTrack):
(WebCore::HTMLMediaElement::addAudioTrack):
(WebCore::HTMLMediaElement::addTextTrack):
(WebCore::HTMLMediaElement::addVideoTrack):
(WebCore::HTMLMediaElement::removeAudioTrack):
(WebCore::HTMLMediaElement::removeTextTrack):
(WebCore::HTMLMediaElement::removeVideoTrack):
(WebCore::HTMLMediaElement::forgetResourceSpecificTracks):
(WebCore::HTMLMediaElement::audioTracks):
(WebCore::HTMLMediaElement::textTracks):
(WebCore::HTMLMediaElement::videoTracks):
(WebCore::HTMLMediaElement::didAddTextTrack):
(WebCore::HTMLMediaElement::didRemoveTextTrack):
(WebCore::HTMLMediaElement::setSelectedTextTrack):
(WebCore::HTMLMediaElement::textTrackAddCues): Deleted.
(WebCore::HTMLMediaElement::closeCaptionTracksChanged): Deleted.
* html/HTMLMediaElement.h:
* html/shadow/MediaControlElements.cpp:
(WebCore::MediaControlClosedCaptionsTrackListElement::updateDisplay):
(WebCore::MediaControlClosedCaptionsTrackListElement::rebuildTrackListMenu):
* html/track/AudioTrack.cpp:
(WebCore::AudioTrack::~AudioTrack):
(WebCore::AudioTrack::setPrivate):
(WebCore::AudioTrack::isValidKind):
(WebCore::AudioTrack::willRemove):
(WebCore::AudioTrack::setEnabled): Deleted.
(WebCore::AudioTrack::updateKindFromPrivate): Deleted.
* html/track/AudioTrack.h:
(isType):
* html/track/AudioTrackList.cpp:
(AudioTrackList::append):
(AudioTrackList::item):
(AudioTrackList::getTrackById):
(AudioTrackList::eventTargetInterface): Deleted.
* html/track/AudioTrackList.h:
* html/track/InbandTextTrack.cpp:
(WebCore::InbandTextTrack::willRemove):
* html/track/TextTrack.cpp:
(WebCore::TextTrack::setKind):
(WebCore::TextTrack::trackIndex):
(WebCore::TextTrack::trackIndexRelativeToRenderedTracks):
(WebCore::TextTrack::setLanguage):
* html/track/TextTrack.h:
(isType):
* html/track/TextTrackList.cpp:
(TextTrackList::getTrackIndex):
(TextTrackList::getTrackIndexRelativeToRenderedTracks):
(TextTrackList::item):
(TextTrackList::getTrackById):
(TextTrackList::invalidateTrackIndexesAfterTrack):
(TextTrackList::append):
(TextTrackList::remove):
(TextTrackList::contains):
* html/track/TextTrackList.h:
* html/track/TrackBase.h:
* html/track/TrackEvent.cpp:
(WebCore::TrackEvent::TrackEvent):
* html/track/TrackEvent.h:
* html/track/TrackListBase.cpp:
(TrackListBase::remove):
(TrackListBase::contains):
(TrackListBase::scheduleTrackEvent):
(TrackListBase::scheduleAddTrackEvent):
(TrackListBase::scheduleRemoveTrackEvent):
* html/track/TrackListBase.h:
* html/track/VideoTrack.cpp:
(WebCore::VideoTrack::willRemove):
(WebCore::VideoTrack::setKind):
(WebCore::VideoTrack::setLanguage):
* html/track/VideoTrack.h:
(isType):
* html/track/VideoTrackList.cpp:
(VideoTrackList::append):
(VideoTrackList::item):
(VideoTrackList::getTrackById):
(VideoTrackList::selectedIndex):
* html/track/VideoTrackList.h:</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreModulesmediasourceMediaSourcecpp">trunk/Source/WebCore/Modules/mediasource/MediaSource.cpp</a></li>
<li><a href="#trunkSourceWebCoreModulesmediasourceSourceBuffercpp">trunk/Source/WebCore/Modules/mediasource/SourceBuffer.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSTrackCustomcpp">trunk/Source/WebCore/bindings/js/JSTrackCustom.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLMediaElementcpp">trunk/Source/WebCore/html/HTMLMediaElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLMediaElementh">trunk/Source/WebCore/html/HTMLMediaElement.h</a></li>
<li><a href="#trunkSourceWebCorehtmlshadowMediaControlElementscpp">trunk/Source/WebCore/html/shadow/MediaControlElements.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmltrackAudioTrackcpp">trunk/Source/WebCore/html/track/AudioTrack.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmltrackAudioTrackh">trunk/Source/WebCore/html/track/AudioTrack.h</a></li>
<li><a href="#trunkSourceWebCorehtmltrackAudioTrackListcpp">trunk/Source/WebCore/html/track/AudioTrackList.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmltrackAudioTrackListh">trunk/Source/WebCore/html/track/AudioTrackList.h</a></li>
<li><a href="#trunkSourceWebCorehtmltrackInbandTextTrackcpp">trunk/Source/WebCore/html/track/InbandTextTrack.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmltrackTextTrackcpp">trunk/Source/WebCore/html/track/TextTrack.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmltrackTextTrackh">trunk/Source/WebCore/html/track/TextTrack.h</a></li>
<li><a href="#trunkSourceWebCorehtmltrackTextTrackListcpp">trunk/Source/WebCore/html/track/TextTrackList.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmltrackTextTrackListh">trunk/Source/WebCore/html/track/TextTrackList.h</a></li>
<li><a href="#trunkSourceWebCorehtmltrackTrackBaseh">trunk/Source/WebCore/html/track/TrackBase.h</a></li>
<li><a href="#trunkSourceWebCorehtmltrackTrackEventcpp">trunk/Source/WebCore/html/track/TrackEvent.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmltrackTrackEventh">trunk/Source/WebCore/html/track/TrackEvent.h</a></li>
<li><a href="#trunkSourceWebCorehtmltrackTrackListBasecpp">trunk/Source/WebCore/html/track/TrackListBase.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmltrackTrackListBaseh">trunk/Source/WebCore/html/track/TrackListBase.h</a></li>
<li><a href="#trunkSourceWebCorehtmltrackVideoTrackcpp">trunk/Source/WebCore/html/track/VideoTrack.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmltrackVideoTrackh">trunk/Source/WebCore/html/track/VideoTrack.h</a></li>
<li><a href="#trunkSourceWebCorehtmltrackVideoTrackListcpp">trunk/Source/WebCore/html/track/VideoTrackList.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmltrackVideoTrackListh">trunk/Source/WebCore/html/track/VideoTrackList.h</a></li>
<li><a href="#trunkSourceWebCoreplatformcocoaWebPlaybackSessionModelMediaElementmm">trunk/Source/WebCore/platform/cocoa/WebPlaybackSessionModelMediaElement.mm</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (200942 => 200943)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-05-16 14:50:07 UTC (rev 200942)
+++ trunk/Source/WebCore/ChangeLog        2016-05-16 16:37:26 UTC (rev 200943)
</span><span class="lines">@@ -1,3 +1,102 @@
</span><ins>+2016-05-16 Chris Dumez <cdumez@apple.com>
+
+ Modernize Track classes' code
+ https://bugs.webkit.org/show_bug.cgi?id=157735
+
+ Reviewed by Eric Carlson.
+
+ Modernize Track classes' code a bit.
+
+ * Modules/mediasource/MediaSource.cpp:
+ (WebCore::MediaSource::removeSourceBuffer):
+ * Modules/mediasource/SourceBuffer.cpp:
+ (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveInitializationSegment):
+ * bindings/js/JSTrackCustom.cpp:
+ (WebCore::toTrack):
+ (WebCore::toJS):
+ * html/HTMLMediaElement.cpp:
+ (WebCore::HTMLMediaElement::audioTrackEnabledChanged):
+ (WebCore::HTMLMediaElement::textTrackModeChanged):
+ (WebCore::HTMLMediaElement::videoTrackSelectedChanged):
+ (WebCore::HTMLMediaElement::textTrackRemoveCues):
+ (WebCore::HTMLMediaElement::mediaPlayerDidAddTextTrack):
+ (WebCore::HTMLMediaElement::addAudioTrack):
+ (WebCore::HTMLMediaElement::addTextTrack):
+ (WebCore::HTMLMediaElement::addVideoTrack):
+ (WebCore::HTMLMediaElement::removeAudioTrack):
+ (WebCore::HTMLMediaElement::removeTextTrack):
+ (WebCore::HTMLMediaElement::removeVideoTrack):
+ (WebCore::HTMLMediaElement::forgetResourceSpecificTracks):
+ (WebCore::HTMLMediaElement::audioTracks):
+ (WebCore::HTMLMediaElement::textTracks):
+ (WebCore::HTMLMediaElement::videoTracks):
+ (WebCore::HTMLMediaElement::didAddTextTrack):
+ (WebCore::HTMLMediaElement::didRemoveTextTrack):
+ (WebCore::HTMLMediaElement::setSelectedTextTrack):
+ (WebCore::HTMLMediaElement::textTrackAddCues): Deleted.
+ (WebCore::HTMLMediaElement::closeCaptionTracksChanged): Deleted.
+ * html/HTMLMediaElement.h:
+ * html/shadow/MediaControlElements.cpp:
+ (WebCore::MediaControlClosedCaptionsTrackListElement::updateDisplay):
+ (WebCore::MediaControlClosedCaptionsTrackListElement::rebuildTrackListMenu):
+ * html/track/AudioTrack.cpp:
+ (WebCore::AudioTrack::~AudioTrack):
+ (WebCore::AudioTrack::setPrivate):
+ (WebCore::AudioTrack::isValidKind):
+ (WebCore::AudioTrack::willRemove):
+ (WebCore::AudioTrack::setEnabled): Deleted.
+ (WebCore::AudioTrack::updateKindFromPrivate): Deleted.
+ * html/track/AudioTrack.h:
+ (isType):
+ * html/track/AudioTrackList.cpp:
+ (AudioTrackList::append):
+ (AudioTrackList::item):
+ (AudioTrackList::getTrackById):
+ (AudioTrackList::eventTargetInterface): Deleted.
+ * html/track/AudioTrackList.h:
+ * html/track/InbandTextTrack.cpp:
+ (WebCore::InbandTextTrack::willRemove):
+ * html/track/TextTrack.cpp:
+ (WebCore::TextTrack::setKind):
+ (WebCore::TextTrack::trackIndex):
+ (WebCore::TextTrack::trackIndexRelativeToRenderedTracks):
+ (WebCore::TextTrack::setLanguage):
+ * html/track/TextTrack.h:
+ (isType):
+ * html/track/TextTrackList.cpp:
+ (TextTrackList::getTrackIndex):
+ (TextTrackList::getTrackIndexRelativeToRenderedTracks):
+ (TextTrackList::item):
+ (TextTrackList::getTrackById):
+ (TextTrackList::invalidateTrackIndexesAfterTrack):
+ (TextTrackList::append):
+ (TextTrackList::remove):
+ (TextTrackList::contains):
+ * html/track/TextTrackList.h:
+ * html/track/TrackBase.h:
+ * html/track/TrackEvent.cpp:
+ (WebCore::TrackEvent::TrackEvent):
+ * html/track/TrackEvent.h:
+ * html/track/TrackListBase.cpp:
+ (TrackListBase::remove):
+ (TrackListBase::contains):
+ (TrackListBase::scheduleTrackEvent):
+ (TrackListBase::scheduleAddTrackEvent):
+ (TrackListBase::scheduleRemoveTrackEvent):
+ * html/track/TrackListBase.h:
+ * html/track/VideoTrack.cpp:
+ (WebCore::VideoTrack::willRemove):
+ (WebCore::VideoTrack::setKind):
+ (WebCore::VideoTrack::setLanguage):
+ * html/track/VideoTrack.h:
+ (isType):
+ * html/track/VideoTrackList.cpp:
+ (VideoTrackList::append):
+ (VideoTrackList::item):
+ (VideoTrackList::getTrackById):
+ (VideoTrackList::selectedIndex):
+ * html/track/VideoTrackList.h:
+
</ins><span class="cx"> 2016-05-16 Michael Catanzaro <mcatanzaro@igalia.com>
</span><span class="cx">
</span><span class="cx"> CSSParser.cpp triggers -Wunused-parameter
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediasourceMediaSourcecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediasource/MediaSource.cpp (200942 => 200943)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediasource/MediaSource.cpp        2016-05-16 14:50:07 UTC (rev 200942)
+++ trunk/Source/WebCore/Modules/mediasource/MediaSource.cpp        2016-05-16 16:37:26 UTC (rev 200943)
</span><span class="lines">@@ -584,14 +584,14 @@
</span><span class="cx">
</span><span class="cx"> // 5.3 For each AudioTrack object in the SourceBuffer audioTracks list, run the following steps:
</span><span class="cx"> while (audioTracks->length()) {
</span><del>- AudioTrack* track = audioTracks->lastItem();
</del><ins>+ auto& track = *audioTracks->lastItem();
</ins><span class="cx">
</span><span class="cx"> // 5.3.1 Set the sourceBuffer attribute on the AudioTrack object to null.
</span><del>- track->setSourceBuffer(nullptr);
</del><ins>+ track.setSourceBuffer(nullptr);
</ins><span class="cx">
</span><span class="cx"> // 5.3.2 If the enabled attribute on the AudioTrack object is true, then set the removed enabled
</span><span class="cx"> // audio track flag to true.
</span><del>- if (track->enabled())
</del><ins>+ if (track.enabled())
</ins><span class="cx"> removedEnabledAudioTrack = true;
</span><span class="cx">
</span><span class="cx"> // 5.3.3 Remove the AudioTrack object from the HTMLMediaElement audioTracks list.
</span><span class="lines">@@ -609,7 +609,7 @@
</span><span class="cx"> // 5.4 If the removed enabled audio track flag equals true, then queue a task to fire a simple event
</span><span class="cx"> // named change at the HTMLMediaElement audioTracks list.
</span><span class="cx"> if (removedEnabledAudioTrack)
</span><del>- mediaElement()->audioTracks()->scheduleChangeEvent();
</del><ins>+ mediaElement()->audioTracks().scheduleChangeEvent();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> // 6. Let SourceBuffer videoTracks list equal the VideoTrackList object returned by sourceBuffer.videoTracks.
</span><span class="lines">@@ -624,14 +624,14 @@
</span><span class="cx">
</span><span class="cx"> // 7.3 For each VideoTrack object in the SourceBuffer videoTracks list, run the following steps:
</span><span class="cx"> while (videoTracks->length()) {
</span><del>- VideoTrack* track = videoTracks->lastItem();
</del><ins>+ auto& track = *videoTracks->lastItem();
</ins><span class="cx">
</span><span class="cx"> // 7.3.1 Set the sourceBuffer attribute on the VideoTrack object to null.
</span><del>- track->setSourceBuffer(nullptr);
</del><ins>+ track.setSourceBuffer(nullptr);
</ins><span class="cx">
</span><span class="cx"> // 7.3.2 If the selected attribute on the VideoTrack object is true, then set the removed selected
</span><span class="cx"> // video track flag to true.
</span><del>- if (track->selected())
</del><ins>+ if (track.selected())
</ins><span class="cx"> removedSelectedVideoTrack = true;
</span><span class="cx">
</span><span class="cx"> // 7.3.3 Remove the VideoTrack object from the HTMLMediaElement videoTracks list.
</span><span class="lines">@@ -649,7 +649,7 @@
</span><span class="cx"> // 7.4 If the removed selected video track flag equals true, then queue a task to fire a simple event
</span><span class="cx"> // named change at the HTMLMediaElement videoTracks list.
</span><span class="cx"> if (removedSelectedVideoTrack)
</span><del>- mediaElement()->videoTracks()->scheduleChangeEvent();
</del><ins>+ mediaElement()->videoTracks().scheduleChangeEvent();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> // 8. Let SourceBuffer textTracks list equal the TextTrackList object returned by sourceBuffer.textTracks.
</span><span class="lines">@@ -664,14 +664,14 @@
</span><span class="cx">
</span><span class="cx"> // 9.3 For each TextTrack object in the SourceBuffer textTracks list, run the following steps:
</span><span class="cx"> while (textTracks->length()) {
</span><del>- TextTrack* track = textTracks->lastItem();
</del><ins>+ auto& track = *textTracks->lastItem();
</ins><span class="cx">
</span><span class="cx"> // 9.3.1 Set the sourceBuffer attribute on the TextTrack object to null.
</span><del>- track->setSourceBuffer(nullptr);
</del><ins>+ track.setSourceBuffer(nullptr);
</ins><span class="cx">
</span><span class="cx"> // 9.3.2 If the mode attribute on the TextTrack object is set to "showing" or "hidden", then
</span><span class="cx"> // set the removed enabled text track flag to true.
</span><del>- if (track->mode() == TextTrack::Mode::Showing || track->mode() == TextTrack::Mode::Hidden)
</del><ins>+ if (track.mode() == TextTrack::Mode::Showing || track.mode() == TextTrack::Mode::Hidden)
</ins><span class="cx"> removedEnabledTextTrack = true;
</span><span class="cx">
</span><span class="cx"> // 9.3.3 Remove the TextTrack object from the HTMLMediaElement textTracks list.
</span><span class="lines">@@ -689,7 +689,7 @@
</span><span class="cx"> // 9.4 If the removed enabled text track flag equals true, then queue a task to fire a simple event
</span><span class="cx"> // named change at the HTMLMediaElement textTracks list.
</span><span class="cx"> if (removedEnabledTextTrack)
</span><del>- mediaElement()->textTracks()->scheduleChangeEvent();
</del><ins>+ mediaElement()->textTracks().scheduleChangeEvent();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediasourceSourceBuffercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediasource/SourceBuffer.cpp (200942 => 200943)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediasource/SourceBuffer.cpp        2016-05-16 14:50:07 UTC (rev 200942)
+++ trunk/Source/WebCore/Modules/mediasource/SourceBuffer.cpp        2016-05-16 16:37:26 UTC (rev 200943)
</span><span class="lines">@@ -1035,7 +1035,7 @@
</span><span class="cx"> // FIXME: Implement steps 5.2.1-5.2.8.1 as per Editor's Draft 09 January 2015, and reorder this
</span><span class="cx"> // 5.2.1 Let new audio track be a new AudioTrack object.
</span><span class="cx"> // 5.2.2 Generate a unique ID and assign it to the id property on new video track.
</span><del>- RefPtr<AudioTrack> newAudioTrack = AudioTrack::create(this, audioTrackPrivate);
</del><ins>+ auto newAudioTrack = AudioTrack::create(this, audioTrackPrivate);
</ins><span class="cx"> newAudioTrack->setSourceBuffer(this);
</span><span class="cx">
</span><span class="cx"> // 5.2.3 If audioTracks.length equals 0, then run the following steps:
</span><span class="lines">@@ -1051,13 +1051,13 @@
</span><span class="cx"> // 5.2.5 Queue a task to fire a trusted event named addtrack, that does not bubble and is
</span><span class="cx"> // not cancelable, and that uses the TrackEvent interface, at the AudioTrackList object
</span><span class="cx"> // referenced by the audioTracks attribute on this SourceBuffer object.
</span><del>- audioTracks()->append(newAudioTrack);
</del><ins>+ audioTracks()->append(newAudioTrack.copyRef());
</ins><span class="cx">
</span><span class="cx"> // 5.2.6 Add new audio track to the audioTracks attribute on the HTMLMediaElement.
</span><span class="cx"> // 5.2.7 Queue a task to fire a trusted event named addtrack, that does not bubble and is
</span><span class="cx"> // not cancelable, and that uses the TrackEvent interface, at the AudioTrackList object
</span><span class="cx"> // referenced by the audioTracks attribute on the HTMLMediaElement.
</span><del>- m_source->mediaElement()->audioTracks()->append(newAudioTrack);
</del><ins>+ m_source->mediaElement()->audioTracks().append(newAudioTrack.copyRef());
</ins><span class="cx">
</span><span class="cx"> // 5.2.8 Create a new track buffer to store coded frames for this track.
</span><span class="cx"> ASSERT(!m_trackBufferMap.contains(newAudioTrack->id()));
</span><span class="lines">@@ -1076,7 +1076,7 @@
</span><span class="cx"> // FIXME: Implement steps 5.3.1-5.3.8.1 as per Editor's Draft 09 January 2015, and reorder this
</span><span class="cx"> // 5.3.1 Let new video track be a new VideoTrack object.
</span><span class="cx"> // 5.3.2 Generate a unique ID and assign it to the id property on new video track.
</span><del>- RefPtr<VideoTrack> newVideoTrack = VideoTrack::create(this, videoTrackPrivate);
</del><ins>+ auto newVideoTrack = VideoTrack::create(this, videoTrackPrivate);
</ins><span class="cx"> newVideoTrack->setSourceBuffer(this);
</span><span class="cx">
</span><span class="cx"> // 5.3.3 If videoTracks.length equals 0, then run the following steps:
</span><span class="lines">@@ -1092,13 +1092,13 @@
</span><span class="cx"> // 5.3.5 Queue a task to fire a trusted event named addtrack, that does not bubble and is
</span><span class="cx"> // not cancelable, and that uses the TrackEvent interface, at the VideoTrackList object
</span><span class="cx"> // referenced by the videoTracks attribute on this SourceBuffer object.
</span><del>- videoTracks()->append(newVideoTrack);
</del><ins>+ videoTracks()->append(newVideoTrack.copyRef());
</ins><span class="cx">
</span><span class="cx"> // 5.3.6 Add new video track to the videoTracks attribute on the HTMLMediaElement.
</span><span class="cx"> // 5.3.7 Queue a task to fire a trusted event named addtrack, that does not bubble and is
</span><span class="cx"> // not cancelable, and that uses the TrackEvent interface, at the VideoTrackList object
</span><span class="cx"> // referenced by the videoTracks attribute on the HTMLMediaElement.
</span><del>- m_source->mediaElement()->videoTracks()->append(newVideoTrack);
</del><ins>+ m_source->mediaElement()->videoTracks().append(newVideoTrack.copyRef());
</ins><span class="cx">
</span><span class="cx"> // 5.3.8 Create a new track buffer to store coded frames for this track.
</span><span class="cx"> ASSERT(!m_trackBufferMap.contains(newVideoTrack->id()));
</span><span class="lines">@@ -1128,13 +1128,13 @@
</span><span class="cx"> // 5.4.4 Queue a task to fire a trusted event named addtrack, that does not bubble and is
</span><span class="cx"> // not cancelable, and that uses the TrackEvent interface, at textTracks attribute on this
</span><span class="cx"> // SourceBuffer object.
</span><del>- textTracks()->append(newTextTrack);
</del><ins>+ textTracks()->append(*newTextTrack);
</ins><span class="cx">
</span><span class="cx"> // 5.4.5 Add new text track to the textTracks attribute on the HTMLMediaElement.
</span><span class="cx"> // 5.4.6 Queue a task to fire a trusted event named addtrack, that does not bubble and is
</span><span class="cx"> // not cancelable, and that uses the TrackEvent interface, at the TextTrackList object
</span><span class="cx"> // referenced by the textTracks attribute on the HTMLMediaElement.
</span><del>- m_source->mediaElement()->textTracks()->append(newTextTrack);
</del><ins>+ m_source->mediaElement()->textTracks().append(newTextTrack.releaseNonNull());
</ins><span class="cx">
</span><span class="cx"> // 5.4.7 Create a new track buffer to store coded frames for this track.
</span><span class="cx"> ASSERT(!m_trackBufferMap.contains(textTrackPrivate->id()));
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSTrackCustomcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSTrackCustom.cpp (200942 => 200943)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSTrackCustom.cpp        2016-05-16 14:50:07 UTC (rev 200942)
+++ trunk/Source/WebCore/bindings/js/JSTrackCustom.cpp        2016-05-16 16:37:26 UTC (rev 200943)
</span><span class="lines">@@ -40,7 +40,7 @@
</span><span class="cx"> TrackBase* toTrack(JSValue value)
</span><span class="cx"> {
</span><span class="cx"> if (!value.isObject())
</span><del>- return 0;
</del><ins>+ return nullptr;
</ins><span class="cx">
</span><span class="cx"> JSObject* object = asObject(value);
</span><span class="cx"> if (object->inherits(JSTextTrack::info()))
</span><span class="lines">@@ -50,7 +50,7 @@
</span><span class="cx"> if (object->inherits(JSVideoTrack::info()))
</span><span class="cx"> return &jsCast<JSVideoTrack*>(object)->wrapped();
</span><span class="cx">
</span><del>- return 0;
</del><ins>+ return nullptr;
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> JSC::JSValue toJS(JSC::ExecState*, JSDOMGlobalObject* globalObject, TrackBase& track)
</span><span class="lines">@@ -62,17 +62,17 @@
</span><span class="cx"> break;
</span><span class="cx">
</span><span class="cx"> case TrackBase::AudioTrack:
</span><del>- if (auto* wrapper = getCachedWrapper(globalObject->world(), *toAudioTrack(&track)))
</del><ins>+ if (auto* wrapper = getCachedWrapper(globalObject->world(), downcast<AudioTrack>(track)))
</ins><span class="cx"> return wrapper;
</span><span class="cx"> return CREATE_DOM_WRAPPER(globalObject, AudioTrack, track);
</span><span class="cx">
</span><span class="cx"> case TrackBase::VideoTrack:
</span><del>- if (auto* wrapper = getCachedWrapper(globalObject->world(), *toVideoTrack(&track)))
</del><ins>+ if (auto* wrapper = getCachedWrapper(globalObject->world(), downcast<VideoTrack>(track)))
</ins><span class="cx"> return wrapper;
</span><span class="cx"> return CREATE_DOM_WRAPPER(globalObject, VideoTrack, track);
</span><span class="cx">
</span><span class="cx"> case TrackBase::TextTrack:
</span><del>- if (auto* wrapper = getCachedWrapper(globalObject->world(), *toTextTrack(&track)))
</del><ins>+ if (auto* wrapper = getCachedWrapper(globalObject->world(), downcast<TextTrack>(track)))
</ins><span class="cx"> return wrapper;
</span><span class="cx"> return CREATE_DOM_WRAPPER(globalObject, TextTrack, track);
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLMediaElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLMediaElement.cpp (200942 => 200943)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLMediaElement.cpp        2016-05-16 14:50:07 UTC (rev 200942)
+++ trunk/Source/WebCore/html/HTMLMediaElement.cpp        2016-05-16 16:37:26 UTC (rev 200943)
</span><span class="lines">@@ -1739,7 +1739,8 @@
</span><span class="cx">
</span><span class="cx"> void HTMLMediaElement::audioTrackEnabledChanged(AudioTrack* track)
</span><span class="cx"> {
</span><del>- if (m_audioTracks && m_audioTracks->contains(track))
</del><ins>+ ASSERT(track);
+ if (m_audioTracks && m_audioTracks->contains(*track))
</ins><span class="cx"> m_audioTracks->scheduleChangeEvent();
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -1769,7 +1770,7 @@
</span><span class="cx">
</span><span class="cx"> configureTextTrackDisplay(AssumeTextTrackVisibilityChanged);
</span><span class="cx">
</span><del>- if (m_textTracks && m_textTracks->contains(track))
</del><ins>+ if (m_textTracks && m_textTracks->contains(*track))
</ins><span class="cx"> m_textTracks->scheduleChangeEvent();
</span><span class="cx">
</span><span class="cx"> #if ENABLE(AVF_CAPTIONS)
</span><span class="lines">@@ -1780,7 +1781,8 @@
</span><span class="cx">
</span><span class="cx"> void HTMLMediaElement::videoTrackSelectedChanged(VideoTrack* track)
</span><span class="cx"> {
</span><del>- if (m_videoTracks && m_videoTracks->contains(track))
</del><ins>+ ASSERT(track);
+ if (m_videoTracks && m_videoTracks->contains(*track))
</ins><span class="cx"> m_videoTracks->scheduleChangeEvent();
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -1813,7 +1815,7 @@
</span><span class="cx"> textTrackAddCue(track, cues->item(i));
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void HTMLMediaElement::textTrackRemoveCues(TextTrack*, const TextTrackCueList* cues)
</del><ins>+void HTMLMediaElement::textTrackRemoveCues(TextTrack*, const TextTrackCueList* cues)
</ins><span class="cx"> {
</span><span class="cx"> TrackDisplayUpdateScope scope(this);
</span><span class="cx"> for (size_t i = 0; i < cues->length(); ++i)
</span><span class="lines">@@ -3572,7 +3574,7 @@
</span><span class="cx"> // 9. Fire an event with the name addtrack, that does not bubble and is not cancelable, and that uses the TrackEvent
</span><span class="cx"> // interface, with the track attribute initialized to the text track's TextTrack object, at the media element's
</span><span class="cx"> // textTracks attribute's TextTrackList object.
</span><del>- addTextTrack(textTrack.release());
</del><ins>+ addTextTrack(textTrack.releaseNonNull());
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void HTMLMediaElement::mediaPlayerDidAddVideoTrack(PassRefPtr<VideoTrackPrivate> prpTrack)
</span><span class="lines">@@ -3601,12 +3603,12 @@
</span><span class="cx"> mediaControls()->closedCaptionTracksChanged();
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void HTMLMediaElement::addAudioTrack(PassRefPtr<AudioTrack> track)
</del><ins>+void HTMLMediaElement::addAudioTrack(Ref<AudioTrack>&& track)
</ins><span class="cx"> {
</span><del>- audioTracks()->append(track);
</del><ins>+ audioTracks().append(WTFMove(track));
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-void HTMLMediaElement::addTextTrack(PassRefPtr<TextTrack> track)
</del><ins>+void HTMLMediaElement::addTextTrack(Ref<TextTrack>&& track)
</ins><span class="cx"> {
</span><span class="cx"> if (!m_requireCaptionPreferencesChangedCallbacks) {
</span><span class="cx"> m_requireCaptionPreferencesChangedCallbacks = true;
</span><span class="lines">@@ -3616,34 +3618,34 @@
</span><span class="cx"> m_captionDisplayMode = page->group().captionPreferences().captionDisplayMode();
</span><span class="cx"> }
</span><span class="cx">
</span><del>- textTracks()->append(track);
</del><ins>+ textTracks().append(WTFMove(track));
</ins><span class="cx">
</span><span class="cx"> closeCaptionTracksChanged();
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void HTMLMediaElement::addVideoTrack(PassRefPtr<VideoTrack> track)
</del><ins>+void HTMLMediaElement::addVideoTrack(Ref<VideoTrack>&& track)
</ins><span class="cx"> {
</span><del>- videoTracks()->append(track);
</del><ins>+ videoTracks().append(WTFMove(track));
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-void HTMLMediaElement::removeAudioTrack(AudioTrack* track)
</del><ins>+void HTMLMediaElement::removeAudioTrack(AudioTrack& track)
</ins><span class="cx"> {
</span><span class="cx"> m_audioTracks->remove(track);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void HTMLMediaElement::removeTextTrack(TextTrack* track, bool scheduleEvent)
</del><ins>+void HTMLMediaElement::removeTextTrack(TextTrack& track, bool scheduleEvent)
</ins><span class="cx"> {
</span><span class="cx"> TrackDisplayUpdateScope scope(this);
</span><del>- if (TextTrackCueList* cues = track->cues())
- textTrackRemoveCues(track, cues);
- track->clearClient();
</del><ins>+ if (TextTrackCueList* cues = track.cues())
+ textTrackRemoveCues(&track, cues);
+ track.clearClient();
</ins><span class="cx"> if (m_textTracks)
</span><span class="cx"> m_textTracks->remove(track, scheduleEvent);
</span><span class="cx">
</span><span class="cx"> closeCaptionTracksChanged();
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void HTMLMediaElement::removeVideoTrack(VideoTrack* track)
</del><ins>+void HTMLMediaElement::removeVideoTrack(VideoTrack& track)
</ins><span class="cx"> {
</span><span class="cx"> m_videoTracks->remove(track);
</span><span class="cx"> }
</span><span class="lines">@@ -3651,20 +3653,19 @@
</span><span class="cx"> void HTMLMediaElement::forgetResourceSpecificTracks()
</span><span class="cx"> {
</span><span class="cx"> while (m_audioTracks && m_audioTracks->length())
</span><del>- removeAudioTrack(m_audioTracks->lastItem());
</del><ins>+ removeAudioTrack(*m_audioTracks->lastItem());
</ins><span class="cx">
</span><span class="cx"> if (m_textTracks) {
</span><span class="cx"> TrackDisplayUpdateScope scope(this);
</span><span class="cx"> for (int i = m_textTracks->length() - 1; i >= 0; --i) {
</span><del>- TextTrack* track = m_textTracks->item(i);
-
- if (track->trackType() == TextTrack::InBand)
</del><ins>+ auto& track = *m_textTracks->item(i);
+ if (track.trackType() == TextTrack::InBand)
</ins><span class="cx"> removeTextTrack(track, false);
</span><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> while (m_videoTracks && m_videoTracks->length())
</span><del>- removeVideoTrack(m_videoTracks->lastItem());
</del><ins>+ removeVideoTrack(*m_videoTracks->lastItem());
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> RefPtr<TextTrack> HTMLMediaElement::addTextTrack(const String& kind, const String& label, const String& language, ExceptionCode& ec)
</span><span class="lines">@@ -3690,7 +3691,7 @@
</span><span class="cx"> // first append the track to the text track list.
</span><span class="cx">
</span><span class="cx"> // 6. Add the new text track to the media element's list of text tracks.
</span><del>- addTextTrack(textTrack.ptr());
</del><ins>+ addTextTrack(textTrack.copyRef());
</ins><span class="cx">
</span><span class="cx"> // ... its text track readiness state to the text track loaded state ...
</span><span class="cx"> textTrack->setReadinessState(TextTrack::Loaded);
</span><span class="lines">@@ -3701,28 +3702,28 @@
</span><span class="cx"> return WTFMove(textTrack);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-AudioTrackList* HTMLMediaElement::audioTracks()
</del><ins>+AudioTrackList& HTMLMediaElement::audioTracks()
</ins><span class="cx"> {
</span><span class="cx"> if (!m_audioTracks)
</span><span class="cx"> m_audioTracks = AudioTrackList::create(this, ActiveDOMObject::scriptExecutionContext());
</span><span class="cx">
</span><del>- return m_audioTracks.get();
</del><ins>+ return *m_audioTracks;
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-TextTrackList* HTMLMediaElement::textTracks()
</del><ins>+TextTrackList& HTMLMediaElement::textTracks()
</ins><span class="cx"> {
</span><span class="cx"> if (!m_textTracks)
</span><span class="cx"> m_textTracks = TextTrackList::create(this, ActiveDOMObject::scriptExecutionContext());
</span><span class="cx">
</span><del>- return m_textTracks.get();
</del><ins>+ return *m_textTracks;
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-VideoTrackList* HTMLMediaElement::videoTracks()
</del><ins>+VideoTrackList& HTMLMediaElement::videoTracks()
</ins><span class="cx"> {
</span><span class="cx"> if (!m_videoTracks)
</span><span class="cx"> m_videoTracks = VideoTrackList::create(this, ActiveDOMObject::scriptExecutionContext());
</span><span class="cx">
</span><del>- return m_videoTracks.get();
</del><ins>+ return *m_videoTracks;
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void HTMLMediaElement::didAddTextTrack(HTMLTrackElement* trackElement)
</span><span class="lines">@@ -3737,7 +3738,7 @@
</span><span class="cx"> if (!textTrack)
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- addTextTrack(textTrack.release());
</del><ins>+ addTextTrack(textTrack.releaseNonNull());
</ins><span class="cx">
</span><span class="cx"> // Do not schedule the track loading until parsing finishes so we don't start before all tracks
</span><span class="cx"> // in the markup have been added.
</span><span class="lines">@@ -3772,7 +3773,7 @@
</span><span class="cx"> // When a track element's parent element changes and the old parent was a media element,
</span><span class="cx"> // then the user agent must remove the track element's corresponding text track from the
</span><span class="cx"> // media element's list of text tracks.
</span><del>- removeTextTrack(textTrack.get());
</del><ins>+ removeTextTrack(*textTrack);
</ins><span class="cx">
</span><span class="cx"> size_t index = m_textTracksWhenResourceSelectionBegan.find(textTrack.get());
</span><span class="cx"> if (index != notFound)
</span><span class="lines">@@ -4002,24 +4003,24 @@
</span><span class="cx">
</span><span class="cx"> void HTMLMediaElement::setSelectedTextTrack(TextTrack* trackToSelect)
</span><span class="cx"> {
</span><del>- TextTrackList* trackList = textTracks();
- if (!trackList || !trackList->length())
</del><ins>+ TextTrackList& trackList = textTracks();
+ if (!trackList.length())
</ins><span class="cx"> return;
</span><span class="cx">
</span><span class="cx"> if (trackToSelect != TextTrack::captionMenuOffItem() && trackToSelect != TextTrack::captionMenuAutomaticItem()) {
</span><del>- if (!trackList->contains(trackToSelect))
</del><ins>+ if (!trackToSelect || !trackList.contains(*trackToSelect))
</ins><span class="cx"> return;
</span><span class="cx">
</span><del>- for (int i = 0, length = trackList->length(); i < length; ++i) {
- TextTrack* track = trackList->item(i);
- if (!trackToSelect || track != trackToSelect)
- track->setMode(TextTrack::Mode::Disabled);
</del><ins>+ for (int i = 0, length = trackList.length(); i < length; ++i) {
+ auto& track = *trackList.item(i);
+ if (&track != trackToSelect)
+ track.setMode(TextTrack::Mode::Disabled);
</ins><span class="cx"> else
</span><del>- track->setMode(TextTrack::Mode::Showing);
</del><ins>+ track.setMode(TextTrack::Mode::Showing);
</ins><span class="cx"> }
</span><span class="cx"> } else if (trackToSelect == TextTrack::captionMenuOffItem()) {
</span><del>- for (int i = 0, length = trackList->length(); i < length; ++i)
- trackList->item(i)->setMode(TextTrack::Mode::Disabled);
</del><ins>+ for (int i = 0, length = trackList.length(); i < length; ++i)
+ trackList.item(i)->setMode(TextTrack::Mode::Disabled);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> if (!document().page())
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLMediaElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLMediaElement.h (200942 => 200943)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLMediaElement.h        2016-05-16 14:50:07 UTC (rev 200942)
+++ trunk/Source/WebCore/html/HTMLMediaElement.h        2016-05-16 16:37:26 UTC (rev 200943)
</span><span class="lines">@@ -280,18 +280,18 @@
</span><span class="cx"> #if ENABLE(VIDEO_TRACK)
</span><span class="cx"> RefPtr<TextTrack> addTextTrack(const String& kind, const String& label, const String& language, ExceptionCode&);
</span><span class="cx">
</span><del>- AudioTrackList* audioTracks();
- TextTrackList* textTracks();
- VideoTrackList* videoTracks();
</del><ins>+ AudioTrackList& audioTracks();
+ TextTrackList& textTracks();
+ VideoTrackList& videoTracks();
</ins><span class="cx">
</span><span class="cx"> CueList currentlyActiveCues() const { return m_currentlyActiveCues; }
</span><span class="cx">
</span><del>- void addAudioTrack(PassRefPtr<AudioTrack>);
- void addTextTrack(PassRefPtr<TextTrack>);
- void addVideoTrack(PassRefPtr<VideoTrack>);
- void removeAudioTrack(AudioTrack*);
- void removeTextTrack(TextTrack*, bool scheduleEvent = true);
- void removeVideoTrack(VideoTrack*);
</del><ins>+ void addAudioTrack(Ref<AudioTrack>&&);
+ void addTextTrack(Ref<TextTrack>&&);
+ void addVideoTrack(Ref<VideoTrack>&&);
+ void removeAudioTrack(AudioTrack&);
+ void removeTextTrack(TextTrack&, bool scheduleEvent = true);
+ void removeVideoTrack(VideoTrack&);
</ins><span class="cx"> void forgetResourceSpecificTracks();
</span><span class="cx"> void closeCaptionTracksChanged();
</span><span class="cx"> void notifyMediaPlayerOfTextTrackChanges();
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlshadowMediaControlElementscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/shadow/MediaControlElements.cpp (200942 => 200943)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/shadow/MediaControlElements.cpp        2016-05-16 14:50:07 UTC (rev 200942)
+++ trunk/Source/WebCore/html/shadow/MediaControlElements.cpp        2016-05-16 16:37:26 UTC (rev 200943)
</span><span class="lines">@@ -734,8 +734,7 @@
</span><span class="cx"> if (!mediaElement)
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- TextTrackList* trackList = mediaElement->textTracks();
- if (!trackList || !trackList->length())
</del><ins>+ if (!mediaElement->textTracks().length())
</ins><span class="cx"> return;
</span><span class="cx">
</span><span class="cx"> rebuildTrackListMenu();
</span><span class="lines">@@ -796,14 +795,14 @@
</span><span class="cx"> if (!mediaElement)
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- TextTrackList* trackList = mediaElement->textTracks();
- if (!trackList || !trackList->length())
</del><ins>+ TextTrackList& trackList = mediaElement->textTracks();
+ if (!trackList.length())
</ins><span class="cx"> return;
</span><span class="cx">
</span><span class="cx"> if (!document().page())
</span><span class="cx"> return;
</span><span class="cx"> auto& captionPreferences = document().page()->group().captionPreferences();
</span><del>- Vector<RefPtr<TextTrack>> tracksForMenu = captionPreferences.sortedTrackListForMenu(trackList);
</del><ins>+ Vector<RefPtr<TextTrack>> tracksForMenu = captionPreferences.sortedTrackListForMenu(&trackList);
</ins><span class="cx">
</span><span class="cx"> auto captionsHeader = document().createElement(h3Tag, ASSERT_NO_EXCEPTION);
</span><span class="cx"> captionsHeader->appendChild(document().createTextNode(textTrackSubtitlesText()));
</span></span></pre></div>
<a id="trunkSourceWebCorehtmltrackAudioTrackcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/track/AudioTrack.cpp (200942 => 200943)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/track/AudioTrack.cpp        2016-05-16 14:50:07 UTC (rev 200942)
+++ trunk/Source/WebCore/html/track/AudioTrack.cpp        2016-05-16 16:37:26 UTC (rev 200943)
</span><span class="lines">@@ -90,7 +90,7 @@
</span><span class="cx">
</span><span class="cx"> AudioTrack::~AudioTrack()
</span><span class="cx"> {
</span><del>- m_private->setClient(0);
</del><ins>+ m_private->setClient(nullptr);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void AudioTrack::setPrivate(PassRefPtr<AudioTrackPrivate> trackPrivate)
</span><span class="lines">@@ -101,7 +101,7 @@
</span><span class="cx"> if (m_private == trackPrivate)
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- m_private->setClient(0);
</del><ins>+ m_private->setClient(nullptr);
</ins><span class="cx"> m_private = trackPrivate;
</span><span class="cx"> m_private->setClient(this);
</span><span class="cx">
</span><span class="lines">@@ -111,20 +111,12 @@
</span><span class="cx">
</span><span class="cx"> bool AudioTrack::isValidKind(const AtomicString& value) const
</span><span class="cx"> {
</span><del>- if (value == alternativeKeyword())
- return true;
- if (value == descriptionKeyword())
- return true;
- if (value == mainKeyword())
- return true;
- if (value == mainDescKeyword())
- return true;
- if (value == translationKeyword())
- return true;
- if (value == commentaryKeyword())
- return true;
-
- return false;
</del><ins>+ return value == alternativeKeyword()
+ || value == descriptionKeyword()
+ || value == mainKeyword()
+ || value == mainDescKeyword()
+ || value == translationKeyword()
+ || value == commentaryKeyword();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void AudioTrack::setEnabled(const bool enabled)
</span><span class="lines">@@ -175,7 +167,7 @@
</span><span class="cx"> void AudioTrack::willRemove(TrackPrivateBase* trackPrivate)
</span><span class="cx"> {
</span><span class="cx"> ASSERT_UNUSED(trackPrivate, trackPrivate == m_private);
</span><del>- mediaElement()->removeAudioTrack(this);
</del><ins>+ mediaElement()->removeAudioTrack(*this);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void AudioTrack::updateKindFromPrivate()
</span></span></pre></div>
<a id="trunkSourceWebCorehtmltrackAudioTrackh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/track/AudioTrack.h (200942 => 200943)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/track/AudioTrack.h        2016-05-16 14:50:07 UTC (rev 200942)
+++ trunk/Source/WebCore/html/track/AudioTrack.h        2016-05-16 16:37:26 UTC (rev 200943)
</span><span class="lines">@@ -93,12 +93,10 @@
</span><span class="cx"> RefPtr<AudioTrackPrivate> m_private;
</span><span class="cx"> };
</span><span class="cx">
</span><del>-inline AudioTrack* toAudioTrack(TrackBase* track)
-{
- ASSERT_WITH_SECURITY_IMPLICATION(track->type() == TrackBase::AudioTrack);
- return static_cast<AudioTrack*>(track);
-}
-
</del><span class="cx"> } // namespace WebCore
</span><span class="cx">
</span><ins>+SPECIALIZE_TYPE_TRAITS_BEGIN(WebCore::AudioTrack)
+ static bool isType(const WebCore::TrackBase& track) { return track.type() == WebCore::TrackBase::AudioTrack; }
+SPECIALIZE_TYPE_TRAITS_END()
+
</ins><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceWebCorehtmltrackAudioTrackListcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/track/AudioTrackList.cpp (200942 => 200943)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/track/AudioTrackList.cpp        2016-05-16 14:50:07 UTC (rev 200942)
+++ trunk/Source/WebCore/html/track/AudioTrackList.cpp        2016-05-16 16:37:26 UTC (rev 200943)
</span><span class="lines">@@ -43,43 +43,40 @@
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void AudioTrackList::append(PassRefPtr<AudioTrack> prpTrack)
</del><ins>+void AudioTrackList::append(Ref<AudioTrack>&& track)
</ins><span class="cx"> {
</span><del>- RefPtr<AudioTrack> track = prpTrack;
-
</del><span class="cx"> // Insert tracks in the media file order.
</span><span class="cx"> size_t index = track->inbandTrackIndex();
</span><span class="cx"> size_t insertionIndex;
</span><span class="cx"> for (insertionIndex = 0; insertionIndex < m_inbandTracks.size(); ++insertionIndex) {
</span><del>- AudioTrack* otherTrack = static_cast<AudioTrack*>(m_inbandTracks[insertionIndex].get());
- if (otherTrack->inbandTrackIndex() > index)
</del><ins>+ auto& otherTrack = downcast<AudioTrack>(*m_inbandTracks[insertionIndex]);
+ if (otherTrack.inbandTrackIndex() > index)
</ins><span class="cx"> break;
</span><span class="cx"> }
</span><del>- m_inbandTracks.insert(insertionIndex, track);
</del><ins>+ m_inbandTracks.insert(insertionIndex, track.ptr());
</ins><span class="cx">
</span><span class="cx">
</span><span class="cx"> ASSERT(!track->mediaElement() || track->mediaElement() == mediaElement());
</span><span class="cx"> track->setMediaElement(mediaElement());
</span><span class="cx">
</span><del>- scheduleAddTrackEvent(track.release());
</del><ins>+ scheduleAddTrackEvent(WTFMove(track));
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> AudioTrack* AudioTrackList::item(unsigned index) const
</span><span class="cx"> {
</span><span class="cx"> if (index < m_inbandTracks.size())
</span><del>- return toAudioTrack(m_inbandTracks[index].get());
-
- return 0;
</del><ins>+ return downcast<AudioTrack>(m_inbandTracks[index].get());
+ return nullptr;
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> AudioTrack* AudioTrackList::getTrackById(const AtomicString& id) const
</span><span class="cx"> {
</span><span class="cx"> for (auto& inbandTrack : m_inbandTracks) {
</span><del>- AudioTrack* track = toAudioTrack(inbandTrack.get());
- if (track->id() == id)
- return track;
</del><ins>+ auto& track = downcast<AudioTrack>(*inbandTrack);
+ if (track.id() == id)
+ return &track;
</ins><span class="cx"> }
</span><del>- return 0;
</del><ins>+ return nullptr;
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> EventTargetInterface AudioTrackList::eventTargetInterface() const
</span></span></pre></div>
<a id="trunkSourceWebCorehtmltrackAudioTrackListh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/track/AudioTrackList.h (200942 => 200943)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/track/AudioTrackList.h        2016-05-16 14:50:07 UTC (rev 200942)
+++ trunk/Source/WebCore/html/track/AudioTrackList.h        2016-05-16 16:37:26 UTC (rev 200943)
</span><span class="lines">@@ -46,7 +46,7 @@
</span><span class="cx">
</span><span class="cx"> AudioTrack* item(unsigned index) const;
</span><span class="cx"> AudioTrack* lastItem() const { return item(length() - 1); }
</span><del>- void append(PassRefPtr<AudioTrack>);
</del><ins>+ void append(Ref<AudioTrack>&&);
</ins><span class="cx">
</span><span class="cx"> // EventTarget
</span><span class="cx"> EventTargetInterface eventTargetInterface() const override;
</span></span></pre></div>
<a id="trunkSourceWebCorehtmltrackInbandTextTrackcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/track/InbandTextTrack.cpp (200942 => 200943)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/track/InbandTextTrack.cpp        2016-05-16 14:50:07 UTC (rev 200942)
+++ trunk/Source/WebCore/html/track/InbandTextTrack.cpp        2016-05-16 16:37:26 UTC (rev 200943)
</span><span class="lines">@@ -189,7 +189,7 @@
</span><span class="cx"> if (!mediaElement())
</span><span class="cx"> return;
</span><span class="cx"> ASSERT_UNUSED(trackPrivate, trackPrivate == m_private);
</span><del>- mediaElement()->removeTextTrack(this);
</del><ins>+ mediaElement()->removeTextTrack(*this);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void InbandTextTrack::updateKindFromPrivate()
</span></span></pre></div>
<a id="trunkSourceWebCorehtmltrackTextTrackcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/track/TextTrack.cpp (200942 => 200943)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/track/TextTrack.cpp        2016-05-16 14:50:07 UTC (rev 200942)
+++ trunk/Source/WebCore/html/track/TextTrack.cpp        2016-05-16 16:37:26 UTC (rev 200943)
</span><span class="lines">@@ -193,7 +193,7 @@
</span><span class="cx"> // 4. Queue a task to fire a simple event named change at the TextTrackList object referenced by
</span><span class="cx"> // the textTracks attribute on the HTMLMediaElement.
</span><span class="cx"> if (mediaElement())
</span><del>- mediaElement()->textTracks()->scheduleChangeEvent();
</del><ins>+ mediaElement()->textTracks().scheduleChangeEvent();
</ins><span class="cx"> #endif
</span><span class="cx">
</span><span class="cx"> if (m_client && oldKind != m_kind)
</span><span class="lines">@@ -454,7 +454,7 @@
</span><span class="cx"> ASSERT(m_mediaElement);
</span><span class="cx">
</span><span class="cx"> if (m_trackIndex == invalidTrackIndex)
</span><del>- m_trackIndex = m_mediaElement->textTracks()->getTrackIndex(this);
</del><ins>+ m_trackIndex = m_mediaElement->textTracks().getTrackIndex(*this);
</ins><span class="cx">
</span><span class="cx"> return m_trackIndex;
</span><span class="cx"> }
</span><span class="lines">@@ -483,7 +483,7 @@
</span><span class="cx"> ASSERT(m_mediaElement);
</span><span class="cx">
</span><span class="cx"> if (m_renderedTrackIndex == invalidTrackIndex)
</span><del>- m_renderedTrackIndex = m_mediaElement->textTracks()->getTrackIndexRelativeToRenderedTracks(this);
</del><ins>+ m_renderedTrackIndex = m_mediaElement->textTracks().getTrackIndexRelativeToRenderedTracks(*this);
</ins><span class="cx">
</span><span class="cx"> return m_renderedTrackIndex;
</span><span class="cx"> }
</span><span class="lines">@@ -581,7 +581,7 @@
</span><span class="cx"> // 4. Queue a task to fire a simple event named change at the TextTrackList object referenced by
</span><span class="cx"> // the textTracks attribute on the HTMLMediaElement.
</span><span class="cx"> if (mediaElement())
</span><del>- mediaElement()->textTracks()->scheduleChangeEvent();
</del><ins>+ mediaElement()->textTracks().scheduleChangeEvent();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceWebCorehtmltrackTextTrackh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/track/TextTrack.h (200942 => 200943)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/track/TextTrack.h        2016-05-16 14:50:07 UTC (rev 200942)
+++ trunk/Source/WebCore/html/track/TextTrack.h        2016-05-16 16:37:26 UTC (rev 200943)
</span><span class="lines">@@ -173,12 +173,6 @@
</span><span class="cx"> bool m_hasBeenConfigured { false };
</span><span class="cx"> };
</span><span class="cx">
</span><del>-inline TextTrack* toTextTrack(TrackBase* track)
-{
- ASSERT_WITH_SECURITY_IMPLICATION(track->type() == TrackBase::TextTrack);
- return static_cast<TextTrack*>(track);
-}
-
</del><span class="cx"> inline auto TextTrack::mode() const -> Mode
</span><span class="cx"> {
</span><span class="cx"> return m_mode;
</span><span class="lines">@@ -215,4 +209,8 @@
</span><span class="cx">
</span><span class="cx"> } // namespace WebCore
</span><span class="cx">
</span><ins>+SPECIALIZE_TYPE_TRAITS_BEGIN(WebCore::TextTrack)
+ static bool isType(const WebCore::TrackBase& track) { return track.type() == WebCore::TrackBase::TextTrack; }
+SPECIALIZE_TYPE_TRAITS_END()
+
</ins><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceWebCorehtmltrackTextTrackListcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/track/TextTrackList.cpp (200942 => 200943)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/track/TextTrackList.cpp        2016-05-16 14:50:07 UTC (rev 200942)
+++ trunk/Source/WebCore/html/track/TextTrackList.cpp        2016-05-16 16:37:26 UTC (rev 200943)
</span><span class="lines">@@ -51,56 +51,51 @@
</span><span class="cx"> return m_addTrackTracks.size() + m_elementTracks.size() + m_inbandTracks.size();
</span><span class="cx"> }
</span><span class="cx">
</span><del>-int TextTrackList::getTrackIndex(TextTrack* textTrack)
</del><ins>+int TextTrackList::getTrackIndex(TextTrack& textTrack)
</ins><span class="cx"> {
</span><span class="cx"> if (is<LoadableTextTrack>(textTrack))
</span><del>- return downcast<LoadableTextTrack>(*textTrack).trackElementIndex();
</del><ins>+ return downcast<LoadableTextTrack>(textTrack).trackElementIndex();
</ins><span class="cx">
</span><del>- if (textTrack->trackType() == TextTrack::AddTrack)
- return m_elementTracks.size() + m_addTrackTracks.find(textTrack);
</del><ins>+ if (textTrack.trackType() == TextTrack::AddTrack)
+ return m_elementTracks.size() + m_addTrackTracks.find(&textTrack);
</ins><span class="cx">
</span><del>- if (textTrack->trackType() == TextTrack::InBand)
- return m_elementTracks.size() + m_addTrackTracks.size() + m_inbandTracks.find(textTrack);
</del><ins>+ if (textTrack.trackType() == TextTrack::InBand)
+ return m_elementTracks.size() + m_addTrackTracks.size() + m_inbandTracks.find(&textTrack);
</ins><span class="cx">
</span><span class="cx"> ASSERT_NOT_REACHED();
</span><span class="cx">
</span><span class="cx"> return -1;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-int TextTrackList::getTrackIndexRelativeToRenderedTracks(TextTrack *textTrack)
</del><ins>+int TextTrackList::getTrackIndexRelativeToRenderedTracks(TextTrack& textTrack)
</ins><span class="cx"> {
</span><span class="cx"> // Calculate the "Let n be the number of text tracks whose text track mode is showing and that are in the media element's list of text tracks before track."
</span><span class="cx"> int trackIndex = 0;
</span><span class="cx">
</span><span class="cx"> for (auto& elementTrack : m_elementTracks) {
</span><del>- if (!toTextTrack(elementTrack.get())->isRendered())
</del><ins>+ if (!downcast<TextTrack>(*elementTrack).isRendered())
</ins><span class="cx"> continue;
</span><del>-
- if (elementTrack == textTrack)
</del><ins>+ if (elementTrack == &textTrack)
</ins><span class="cx"> return trackIndex;
</span><span class="cx"> ++trackIndex;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> for (auto& addTrack : m_addTrackTracks) {
</span><del>- if (!toTextTrack(addTrack.get())->isRendered())
</del><ins>+ if (!downcast<TextTrack>(*addTrack).isRendered())
</ins><span class="cx"> continue;
</span><del>-
- if (addTrack == textTrack)
</del><ins>+ if (addTrack == &textTrack)
</ins><span class="cx"> return trackIndex;
</span><span class="cx"> ++trackIndex;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> for (auto& inbandTrack : m_inbandTracks) {
</span><del>- if (!toTextTrack(inbandTrack.get())->isRendered())
</del><ins>+ if (!downcast<TextTrack>(*inbandTrack).isRendered())
</ins><span class="cx"> continue;
</span><del>-
- if (inbandTrack == textTrack)
</del><ins>+ if (inbandTrack == &textTrack)
</ins><span class="cx"> return trackIndex;
</span><span class="cx"> ++trackIndex;
</span><span class="cx"> }
</span><del>-
</del><span class="cx"> ASSERT_NOT_REACHED();
</span><del>-
</del><span class="cx"> return -1;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -114,17 +109,17 @@
</span><span class="cx"> // resource), in the order defined by the media resource's format specification.
</span><span class="cx">
</span><span class="cx"> if (index < m_elementTracks.size())
</span><del>- return toTextTrack(m_elementTracks[index].get());
</del><ins>+ return downcast<TextTrack>(m_elementTracks[index].get());
</ins><span class="cx">
</span><span class="cx"> index -= m_elementTracks.size();
</span><span class="cx"> if (index < m_addTrackTracks.size())
</span><del>- return toTextTrack(m_addTrackTracks[index].get());
</del><ins>+ return downcast<TextTrack>(m_addTrackTracks[index].get());
</ins><span class="cx">
</span><span class="cx"> index -= m_addTrackTracks.size();
</span><span class="cx"> if (index < m_inbandTracks.size())
</span><del>- return toTextTrack(m_inbandTracks[index].get());
</del><ins>+ return downcast<TextTrack>(m_inbandTracks[index].get());
</ins><span class="cx">
</span><del>- return 0;
</del><ins>+ return nullptr;
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> TextTrack* TextTrackList::getTrackById(const AtomicString& id)
</span><span class="lines">@@ -134,110 +129,122 @@
</span><span class="cx"> // TextTrackList object whose id IDL attribute would return a value equal
</span><span class="cx"> // to the value of the id argument.
</span><span class="cx"> for (unsigned i = 0; i < length(); ++i) {
</span><del>- TextTrack* track = item(i);
- if (track->id() == id)
- return track;
</del><ins>+ auto& track = *item(i);
+ if (track.id() == id)
+ return &track;
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> // When no tracks match the given argument, the method must return null.
</span><span class="cx"> return nullptr;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void TextTrackList::invalidateTrackIndexesAfterTrack(TextTrack* track)
</del><ins>+void TextTrackList::invalidateTrackIndexesAfterTrack(TextTrack& track)
</ins><span class="cx"> {
</span><del>- Vector<RefPtr<TrackBase>>* tracks = 0;
</del><ins>+ Vector<RefPtr<TrackBase>>* tracks = nullptr;
</ins><span class="cx">
</span><del>- if (track->trackType() == TextTrack::TrackElement) {
</del><ins>+ switch (track.trackType()) {
+ case TextTrack::TrackElement:
</ins><span class="cx"> tracks = &m_elementTracks;
</span><span class="cx"> for (auto& addTrack : m_addTrackTracks)
</span><del>- toTextTrack(addTrack.get())->invalidateTrackIndex();
</del><ins>+ downcast<TextTrack>(addTrack.get())->invalidateTrackIndex();
</ins><span class="cx"> for (auto& inbandTrack : m_inbandTracks)
</span><del>- toTextTrack(inbandTrack.get())->invalidateTrackIndex();
- } else if (track->trackType() == TextTrack::AddTrack) {
</del><ins>+ downcast<TextTrack>(inbandTrack.get())->invalidateTrackIndex();
+ break;
+ case TextTrack::AddTrack:
</ins><span class="cx"> tracks = &m_addTrackTracks;
</span><span class="cx"> for (auto& inbandTrack : m_inbandTracks)
</span><del>- toTextTrack(inbandTrack.get())->invalidateTrackIndex();
- } else if (track->trackType() == TextTrack::InBand)
</del><ins>+ downcast<TextTrack>(inbandTrack.get())->invalidateTrackIndex();
+ break;
+ case TextTrack::InBand:
</ins><span class="cx"> tracks = &m_inbandTracks;
</span><del>- else
</del><ins>+ break;
+ default:
</ins><span class="cx"> ASSERT_NOT_REACHED();
</span><ins>+ }
</ins><span class="cx">
</span><del>- size_t index = tracks->find(track);
</del><ins>+ size_t index = tracks->find(&track);
</ins><span class="cx"> if (index == notFound)
</span><span class="cx"> return;
</span><span class="cx">
</span><span class="cx"> for (size_t i = index; i < tracks->size(); ++i)
</span><del>- toTextTrack(tracks->at(index).get())->invalidateTrackIndex();
</del><ins>+ downcast<TextTrack>(*tracks->at(index)).invalidateTrackIndex();
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-void TextTrackList::append(PassRefPtr<TextTrack> prpTrack)
</del><ins>+void TextTrackList::append(Ref<TextTrack>&& track)
</ins><span class="cx"> {
</span><del>- RefPtr<TextTrack> track = prpTrack;
-
</del><span class="cx"> if (track->trackType() == TextTrack::AddTrack)
</span><del>- m_addTrackTracks.append(track);
- else if (is<LoadableTextTrack>(*track)) {
</del><ins>+ m_addTrackTracks.append(track.ptr());
+ else if (is<LoadableTextTrack>(track.get())) {
</ins><span class="cx"> // Insert tracks added for <track> element in tree order.
</span><del>- size_t index = downcast<LoadableTextTrack>(*track).trackElementIndex();
- m_elementTracks.insert(index, track);
</del><ins>+ size_t index = downcast<LoadableTextTrack>(track.get()).trackElementIndex();
+ m_elementTracks.insert(index, track.ptr());
</ins><span class="cx"> } else if (track->trackType() == TextTrack::InBand) {
</span><span class="cx"> // Insert tracks added for in-band in the media file order.
</span><del>- size_t index = static_cast<InbandTextTrack*>(track.get())->inbandTrackIndex();
- m_inbandTracks.insert(index, track);
</del><ins>+ size_t index = downcast<InbandTextTrack>(track.get()).inbandTrackIndex();
+ m_inbandTracks.insert(index, track.ptr());
</ins><span class="cx"> } else
</span><span class="cx"> ASSERT_NOT_REACHED();
</span><span class="cx">
</span><del>- invalidateTrackIndexesAfterTrack(track.get());
</del><ins>+ invalidateTrackIndexesAfterTrack(track);
</ins><span class="cx">
</span><span class="cx"> ASSERT(!track->mediaElement() || track->mediaElement() == mediaElement());
</span><span class="cx"> track->setMediaElement(mediaElement());
</span><span class="cx">
</span><del>- scheduleAddTrackEvent(track.release());
</del><ins>+ scheduleAddTrackEvent(WTFMove(track));
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-void TextTrackList::remove(TrackBase* track, bool scheduleEvent)
</del><ins>+void TextTrackList::remove(TrackBase& track, bool scheduleEvent)
</ins><span class="cx"> {
</span><del>- TextTrack* textTrack = toTextTrack(track);
- Vector<RefPtr<TrackBase>>* tracks = 0;
- if (textTrack->trackType() == TextTrack::TrackElement)
</del><ins>+ auto& textTrack = downcast<TextTrack>(track);
+ Vector<RefPtr<TrackBase>>* tracks = nullptr;
+ switch (textTrack.trackType()) {
+ case TextTrack::TrackElement:
</ins><span class="cx"> tracks = &m_elementTracks;
</span><del>- else if (textTrack->trackType() == TextTrack::AddTrack)
</del><ins>+ break;
+ case TextTrack::AddTrack:
</ins><span class="cx"> tracks = &m_addTrackTracks;
</span><del>- else if (textTrack->trackType() == TextTrack::InBand)
</del><ins>+ break;
+ case TextTrack::InBand:
</ins><span class="cx"> tracks = &m_inbandTracks;
</span><del>- else
</del><ins>+ break;
+ default:
</ins><span class="cx"> ASSERT_NOT_REACHED();
</span><ins>+ }
</ins><span class="cx">
</span><del>- size_t index = tracks->find(track);
</del><ins>+ size_t index = tracks->find(&track);
</ins><span class="cx"> if (index == notFound)
</span><span class="cx"> return;
</span><span class="cx">
</span><span class="cx"> invalidateTrackIndexesAfterTrack(textTrack);
</span><span class="cx">
</span><del>- ASSERT(!track->mediaElement() || track->mediaElement() == element());
- track->setMediaElement(0);
</del><ins>+ ASSERT(!track.mediaElement() || track.mediaElement() == element());
+ track.setMediaElement(nullptr);
</ins><span class="cx">
</span><del>- RefPtr<TrackBase> trackRef = (*tracks)[index];
</del><ins>+ Ref<TrackBase> trackRef = *(*tracks)[index];
</ins><span class="cx"> tracks->remove(index);
</span><span class="cx">
</span><span class="cx"> if (scheduleEvent)
</span><del>- scheduleRemoveTrackEvent(trackRef.release());
</del><ins>+ scheduleRemoveTrackEvent(WTFMove(trackRef));
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-bool TextTrackList::contains(TrackBase* track) const
</del><ins>+bool TextTrackList::contains(TrackBase& track) const
</ins><span class="cx"> {
</span><del>- const Vector<RefPtr<TrackBase>>* tracks = 0;
- TextTrack::TextTrackType type = toTextTrack(track)->trackType();
- if (type == TextTrack::TrackElement)
</del><ins>+ const Vector<RefPtr<TrackBase>>* tracks = nullptr;
+ switch (downcast<TextTrack>(track).trackType()) {
+ case TextTrack::TrackElement:
</ins><span class="cx"> tracks = &m_elementTracks;
</span><del>- else if (type == TextTrack::AddTrack)
</del><ins>+ break;
+ case TextTrack::AddTrack:
</ins><span class="cx"> tracks = &m_addTrackTracks;
</span><del>- else if (type == TextTrack::InBand)
</del><ins>+ break;
+ case TextTrack::InBand:
</ins><span class="cx"> tracks = &m_inbandTracks;
</span><del>- else
</del><ins>+ break;
+ default:
</ins><span class="cx"> ASSERT_NOT_REACHED();
</span><ins>+ }
</ins><span class="cx">
</span><del>- return tracks->find(track) != notFound;
</del><ins>+ return tracks->find(&track) != notFound;
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> EventTargetInterface TextTrackList::eventTargetInterface() const
</span></span></pre></div>
<a id="trunkSourceWebCorehtmltrackTextTrackListh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/track/TextTrackList.h (200942 => 200943)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/track/TextTrackList.h        2016-05-16 14:50:07 UTC (rev 200942)
+++ trunk/Source/WebCore/html/track/TextTrackList.h        2016-05-16 16:37:26 UTC (rev 200943)
</span><span class="lines">@@ -43,16 +43,16 @@
</span><span class="cx"> virtual ~TextTrackList();
</span><span class="cx">
</span><span class="cx"> unsigned length() const override;
</span><del>- int getTrackIndex(TextTrack*);
- int getTrackIndexRelativeToRenderedTracks(TextTrack*);
- bool contains(TrackBase*) const override;
</del><ins>+ int getTrackIndex(TextTrack&);
+ int getTrackIndexRelativeToRenderedTracks(TextTrack&);
+ bool contains(TrackBase&) const override;
</ins><span class="cx">
</span><span class="cx"> TextTrack* item(unsigned index) const;
</span><span class="cx"> TextTrack* getTrackById(const AtomicString&);
</span><span class="cx"> TextTrack* lastItem() const { return item(length() - 1); }
</span><span class="cx">
</span><del>- void append(PassRefPtr<TextTrack>);
- void remove(TrackBase*, bool scheduleEvent = true) override;
</del><ins>+ void append(Ref<TextTrack>&&);
+ void remove(TrackBase&, bool scheduleEvent = true) override;
</ins><span class="cx">
</span><span class="cx"> // EventTarget
</span><span class="cx"> EventTargetInterface eventTargetInterface() const override;
</span><span class="lines">@@ -60,7 +60,7 @@
</span><span class="cx"> private:
</span><span class="cx"> TextTrackList(HTMLMediaElement*, ScriptExecutionContext*);
</span><span class="cx">
</span><del>- void invalidateTrackIndexesAfterTrack(TextTrack*);
</del><ins>+ void invalidateTrackIndexesAfterTrack(TextTrack&);
</ins><span class="cx">
</span><span class="cx"> Vector<RefPtr<TrackBase>> m_addTrackTracks;
</span><span class="cx"> Vector<RefPtr<TrackBase>> m_elementTracks;
</span></span></pre></div>
<a id="trunkSourceWebCorehtmltrackTrackBaseh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/track/TrackBase.h (200942 => 200943)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/track/TrackBase.h        2016-05-16 14:50:07 UTC (rev 200942)
+++ trunk/Source/WebCore/html/track/TrackBase.h        2016-05-16 16:37:26 UTC (rev 200943)
</span><span class="lines">@@ -29,6 +29,7 @@
</span><span class="cx">
</span><span class="cx"> #include "EventTarget.h"
</span><span class="cx"> #include <wtf/RefCounted.h>
</span><ins>+#include <wtf/TypeCasts.h>
</ins><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCorehtmltrackTrackEventcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/track/TrackEvent.cpp (200942 => 200943)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/track/TrackEvent.cpp        2016-05-16 14:50:07 UTC (rev 200942)
+++ trunk/Source/WebCore/html/track/TrackEvent.cpp        2016-05-16 16:37:26 UTC (rev 200943)
</span><span class="lines">@@ -33,9 +33,9 @@
</span><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><del>-TrackEvent::TrackEvent(const AtomicString& type, bool canBubble, bool cancelable, RefPtr<TrackBase>&& track)
</del><ins>+TrackEvent::TrackEvent(const AtomicString& type, bool canBubble, bool cancelable, Ref<TrackBase>&& track)
</ins><span class="cx"> : Event(type, canBubble, cancelable)
</span><del>- , m_track(track)
</del><ins>+ , m_track(WTFMove(track))
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCorehtmltrackTrackEventh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/track/TrackEvent.h (200942 => 200943)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/track/TrackEvent.h        2016-05-16 14:50:07 UTC (rev 200942)
+++ trunk/Source/WebCore/html/track/TrackEvent.h        2016-05-16 16:37:26 UTC (rev 200943)
</span><span class="lines">@@ -41,7 +41,7 @@
</span><span class="cx"> public:
</span><span class="cx"> virtual ~TrackEvent();
</span><span class="cx">
</span><del>- static Ref<TrackEvent> create(const AtomicString& type, bool canBubble, bool cancelable, RefPtr<TrackBase>&& track)
</del><ins>+ static Ref<TrackEvent> create(const AtomicString& type, bool canBubble, bool cancelable, Ref<TrackBase>&& track)
</ins><span class="cx"> {
</span><span class="cx"> return adoptRef(*new TrackEvent(type, canBubble, cancelable, WTFMove(track)));
</span><span class="cx"> }
</span><span class="lines">@@ -56,7 +56,7 @@
</span><span class="cx"> TrackBase* track() const { return m_track.get(); }
</span><span class="cx">
</span><span class="cx"> private:
</span><del>- TrackEvent(const AtomicString& type, bool canBubble, bool cancelable, RefPtr<TrackBase>&&);
</del><ins>+ TrackEvent(const AtomicString& type, bool canBubble, bool cancelable, Ref<TrackBase>&&);
</ins><span class="cx"> TrackEvent(const AtomicString& type, const TrackEventInit& initializer);
</span><span class="cx">
</span><span class="cx"> RefPtr<TrackBase> m_track;
</span></span></pre></div>
<a id="trunkSourceWebCorehtmltrackTrackListBasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/track/TrackListBase.cpp (200942 => 200943)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/track/TrackListBase.cpp        2016-05-16 14:50:07 UTC (rev 200942)
+++ trunk/Source/WebCore/html/track/TrackListBase.cpp        2016-05-16 16:37:26 UTC (rev 200943)
</span><span class="lines">@@ -58,33 +58,33 @@
</span><span class="cx"> return m_inbandTracks.size();
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void TrackListBase::remove(TrackBase* track, bool scheduleEvent)
</del><ins>+void TrackListBase::remove(TrackBase& track, bool scheduleEvent)
</ins><span class="cx"> {
</span><del>- size_t index = m_inbandTracks.find(track);
</del><ins>+ size_t index = m_inbandTracks.find(&track);
</ins><span class="cx"> ASSERT(index != notFound);
</span><span class="cx">
</span><del>- ASSERT(track->mediaElement() == m_element);
- track->setMediaElement(0);
</del><ins>+ ASSERT(track.mediaElement() == m_element);
+ track.setMediaElement(nullptr);
</ins><span class="cx">
</span><del>- RefPtr<TrackBase> trackRef = m_inbandTracks[index];
</del><ins>+ Ref<TrackBase> trackRef = *m_inbandTracks[index];
</ins><span class="cx">
</span><span class="cx"> m_inbandTracks.remove(index);
</span><span class="cx">
</span><span class="cx"> if (scheduleEvent)
</span><del>- scheduleRemoveTrackEvent(trackRef.release());
</del><ins>+ scheduleRemoveTrackEvent(WTFMove(trackRef));
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-bool TrackListBase::contains(TrackBase* track) const
</del><ins>+bool TrackListBase::contains(TrackBase& track) const
</ins><span class="cx"> {
</span><del>- return m_inbandTracks.find(track) != notFound;
</del><ins>+ return m_inbandTracks.find(&track) != notFound;
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-void TrackListBase::scheduleTrackEvent(const AtomicString& eventName, PassRefPtr<TrackBase> track)
</del><ins>+void TrackListBase::scheduleTrackEvent(const AtomicString& eventName, Ref<TrackBase>&& track)
</ins><span class="cx"> {
</span><del>- m_asyncEventQueue.enqueueEvent(TrackEvent::create(eventName, false, false, track));
</del><ins>+ m_asyncEventQueue.enqueueEvent(TrackEvent::create(eventName, false, false, WTFMove(track)));
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-void TrackListBase::scheduleAddTrackEvent(PassRefPtr<TrackBase> track)
</del><ins>+void TrackListBase::scheduleAddTrackEvent(Ref<TrackBase>&& track)
</ins><span class="cx"> {
</span><span class="cx"> // 4.8.10.5 Loading the media resource
</span><span class="cx"> // ...
</span><span class="lines">@@ -104,10 +104,10 @@
</span><span class="cx"> // bubble and is not cancelable, and that uses the TrackEvent interface, with
</span><span class="cx"> // the track attribute initialized to the text track's TextTrack object, at
</span><span class="cx"> // the media element's textTracks attribute's TextTrackList object.
</span><del>- scheduleTrackEvent(eventNames().addtrackEvent, track);
</del><ins>+ scheduleTrackEvent(eventNames().addtrackEvent, WTFMove(track));
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-void TrackListBase::scheduleRemoveTrackEvent(PassRefPtr<TrackBase> track)
</del><ins>+void TrackListBase::scheduleRemoveTrackEvent(Ref<TrackBase>&& track)
</ins><span class="cx"> {
</span><span class="cx"> // 4.8.10.6 Offsets into the media resource
</span><span class="cx"> // If at any time the user agent learns that an audio or video track has
</span><span class="lines">@@ -131,7 +131,7 @@
</span><span class="cx"> // interface, with the track attribute initialized to the text track's
</span><span class="cx"> // TextTrack object, at the media element's textTracks attribute's
</span><span class="cx"> // TextTrackList object.
</span><del>- scheduleTrackEvent(eventNames().removetrackEvent, track);
</del><ins>+ scheduleTrackEvent(eventNames().removetrackEvent, WTFMove(track));
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void TrackListBase::scheduleChangeEvent()
</span></span></pre></div>
<a id="trunkSourceWebCorehtmltrackTrackListBaseh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/track/TrackListBase.h (200942 => 200943)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/track/TrackListBase.h        2016-05-16 14:50:07 UTC (rev 200942)
+++ trunk/Source/WebCore/html/track/TrackListBase.h        2016-05-16 16:37:26 UTC (rev 200943)
</span><span class="lines">@@ -47,8 +47,8 @@
</span><span class="cx"> virtual ~TrackListBase();
</span><span class="cx">
</span><span class="cx"> virtual unsigned length() const;
</span><del>- virtual bool contains(TrackBase*) const;
- virtual void remove(TrackBase*, bool scheduleEvent = true);
</del><ins>+ virtual bool contains(TrackBase&) const;
+ virtual void remove(TrackBase&, bool scheduleEvent = true);
</ins><span class="cx">
</span><span class="cx"> // EventTarget
</span><span class="cx"> EventTargetInterface eventTargetInterface() const override = 0;
</span><span class="lines">@@ -68,13 +68,13 @@
</span><span class="cx"> protected:
</span><span class="cx"> TrackListBase(HTMLMediaElement*, ScriptExecutionContext*);
</span><span class="cx">
</span><del>- void scheduleAddTrackEvent(PassRefPtr<TrackBase>);
- void scheduleRemoveTrackEvent(PassRefPtr<TrackBase>);
</del><ins>+ void scheduleAddTrackEvent(Ref<TrackBase>&&);
+ void scheduleRemoveTrackEvent(Ref<TrackBase>&&);
</ins><span class="cx">
</span><span class="cx"> Vector<RefPtr<TrackBase>> m_inbandTracks;
</span><span class="cx">
</span><span class="cx"> private:
</span><del>- void scheduleTrackEvent(const AtomicString& eventName, PassRefPtr<TrackBase>);
</del><ins>+ void scheduleTrackEvent(const AtomicString& eventName, Ref<TrackBase>&&);
</ins><span class="cx">
</span><span class="cx"> // EventTarget
</span><span class="cx"> void refEventTarget() final { ref(); }
</span></span></pre></div>
<a id="trunkSourceWebCorehtmltrackVideoTrackcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/track/VideoTrack.cpp (200942 => 200943)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/track/VideoTrack.cpp        2016-05-16 14:50:07 UTC (rev 200942)
+++ trunk/Source/WebCore/html/track/VideoTrack.cpp        2016-05-16 16:37:26 UTC (rev 200943)
</span><span class="lines">@@ -175,7 +175,7 @@
</span><span class="cx"> void VideoTrack::willRemove(TrackPrivateBase* trackPrivate)
</span><span class="cx"> {
</span><span class="cx"> ASSERT_UNUSED(trackPrivate, trackPrivate == m_private);
</span><del>- mediaElement()->removeVideoTrack(this);
</del><ins>+ mediaElement()->removeVideoTrack(*this);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> #if ENABLE(MEDIA_SOURCE)
</span><span class="lines">@@ -197,7 +197,7 @@
</span><span class="cx">
</span><span class="cx"> // 4. Queue a task to fire a simple event named change at the VideoTrackList object referenced by
</span><span class="cx"> // the videoTracks attribute on the HTMLMediaElement.
</span><del>- mediaElement()->videoTracks()->scheduleChangeEvent();
</del><ins>+ mediaElement()->videoTracks().scheduleChangeEvent();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void VideoTrack::setLanguage(const AtomicString& language)
</span><span class="lines">@@ -217,8 +217,7 @@
</span><span class="cx">
</span><span class="cx"> // 4. Queue a task to fire a simple event named change at the VideoTrackList object referenced by
</span><span class="cx"> // the videoTracks attribute on the HTMLMediaElement.
</span><del>- if (mediaElement()->videoTracks())
- mediaElement()->videoTracks()->scheduleChangeEvent();
</del><ins>+ mediaElement()->videoTracks().scheduleChangeEvent();
</ins><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCorehtmltrackVideoTrackh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/track/VideoTrack.h (200942 => 200943)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/track/VideoTrack.h        2016-05-16 14:50:07 UTC (rev 200942)
+++ trunk/Source/WebCore/html/track/VideoTrack.h        2016-05-16 16:37:26 UTC (rev 200943)
</span><span class="lines">@@ -102,12 +102,10 @@
</span><span class="cx"> RefPtr<VideoTrackPrivate> m_private;
</span><span class="cx"> };
</span><span class="cx">
</span><del>-inline VideoTrack* toVideoTrack(TrackBase* track)
-{
- ASSERT_WITH_SECURITY_IMPLICATION(track->type() == TrackBase::VideoTrack);
- return static_cast<VideoTrack*>(track);
-}
-
</del><span class="cx"> } // namespace WebCore
</span><span class="cx">
</span><ins>+SPECIALIZE_TYPE_TRAITS_BEGIN(WebCore::VideoTrack)
+ static bool isType(const WebCore::TrackBase& track) { return track.type() == WebCore::TrackBase::VideoTrack; }
+SPECIALIZE_TYPE_TRAITS_END()
+
</ins><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceWebCorehtmltrackVideoTrackListcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/track/VideoTrackList.cpp (200942 => 200943)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/track/VideoTrackList.cpp        2016-05-16 14:50:07 UTC (rev 200942)
+++ trunk/Source/WebCore/html/track/VideoTrackList.cpp        2016-05-16 16:37:26 UTC (rev 200943)
</span><span class="lines">@@ -43,54 +43,50 @@
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void VideoTrackList::append(PassRefPtr<VideoTrack> prpTrack)
</del><ins>+void VideoTrackList::append(Ref<VideoTrack>&& track)
</ins><span class="cx"> {
</span><del>- RefPtr<VideoTrack> track = prpTrack;
-
</del><span class="cx"> // Insert tracks in the media file order.
</span><span class="cx"> size_t index = track->inbandTrackIndex();
</span><span class="cx"> size_t insertionIndex;
</span><span class="cx"> for (insertionIndex = 0; insertionIndex < m_inbandTracks.size(); ++insertionIndex) {
</span><del>- VideoTrack* otherTrack = static_cast<VideoTrack*>(m_inbandTracks[insertionIndex].get());
- if (otherTrack->inbandTrackIndex() > index)
</del><ins>+ auto& otherTrack = downcast<VideoTrack>(*m_inbandTracks[insertionIndex]);
+ if (otherTrack.inbandTrackIndex() > index)
</ins><span class="cx"> break;
</span><span class="cx"> }
</span><del>- m_inbandTracks.insert(insertionIndex, track);
</del><ins>+ m_inbandTracks.insert(insertionIndex, track.ptr());
</ins><span class="cx">
</span><span class="cx"> ASSERT(!track->mediaElement() || track->mediaElement() == mediaElement());
</span><span class="cx"> track->setMediaElement(mediaElement());
</span><span class="cx">
</span><del>- scheduleAddTrackEvent(track.release());
</del><ins>+ scheduleAddTrackEvent(WTFMove(track));
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> VideoTrack* VideoTrackList::item(unsigned index) const
</span><span class="cx"> {
</span><span class="cx"> if (index < m_inbandTracks.size())
</span><del>- return toVideoTrack(m_inbandTracks[index].get());
-
- return 0;
</del><ins>+ return downcast<VideoTrack>(m_inbandTracks[index].get());
+ return nullptr;
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> VideoTrack* VideoTrackList::getTrackById(const AtomicString& id) const
</span><span class="cx"> {
</span><span class="cx"> for (auto& inbandTracks : m_inbandTracks) {
</span><del>- VideoTrack* track = toVideoTrack(inbandTracks.get());
- if (track->id() == id)
- return track;
</del><ins>+ auto& track = downcast<VideoTrack>(*inbandTracks);
+ if (track.id() == id)
+ return &track;
</ins><span class="cx"> }
</span><del>- return 0;
</del><ins>+ return nullptr;
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-long VideoTrackList::selectedIndex() const
</del><ins>+int VideoTrackList::selectedIndex() const
</ins><span class="cx"> {
</span><span class="cx"> // 4.8.10.10.1 AudioTrackList and VideoTrackList objects
</span><span class="cx"> // The VideoTrackList.selectedIndex attribute must return the index of the
</span><span class="cx"> // currently selected track, if any. If the VideoTrackList object does not
</span><span class="cx"> // currently represent any tracks, or if none of the tracks are selected,
</span><span class="cx"> // it must instead return −1.
</span><del>- for (size_t i = 0; i < length(); ++i) {
- VideoTrack* track = toVideoTrack(m_inbandTracks[i].get());
- if (track->selected())
</del><ins>+ for (unsigned i = 0; i < length(); ++i) {
+ if (downcast<VideoTrack>(*m_inbandTracks[i]).selected())
</ins><span class="cx"> return i;
</span><span class="cx"> }
</span><span class="cx"> return -1;
</span></span></pre></div>
<a id="trunkSourceWebCorehtmltrackVideoTrackListh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/track/VideoTrackList.h (200942 => 200943)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/track/VideoTrackList.h        2016-05-16 14:50:07 UTC (rev 200942)
+++ trunk/Source/WebCore/html/track/VideoTrackList.h        2016-05-16 16:37:26 UTC (rev 200943)
</span><span class="lines">@@ -43,11 +43,11 @@
</span><span class="cx"> virtual ~VideoTrackList();
</span><span class="cx">
</span><span class="cx"> VideoTrack* getTrackById(const AtomicString&) const;
</span><del>- long selectedIndex() const;
</del><ins>+ int selectedIndex() const;
</ins><span class="cx">
</span><span class="cx"> VideoTrack* item(unsigned) const;
</span><span class="cx"> VideoTrack* lastItem() const { return item(length() - 1); }
</span><del>- void append(PassRefPtr<VideoTrack>);
</del><ins>+ void append(Ref<VideoTrack>&&);
</ins><span class="cx">
</span><span class="cx"> // EventTarget
</span><span class="cx"> EventTargetInterface eventTargetInterface() const override;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformcocoaWebPlaybackSessionModelMediaElementmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/cocoa/WebPlaybackSessionModelMediaElement.mm (200942 => 200943)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/cocoa/WebPlaybackSessionModelMediaElement.mm        2016-05-16 14:50:07 UTC (rev 200942)
+++ trunk/Source/WebCore/platform/cocoa/WebPlaybackSessionModelMediaElement.mm        2016-05-16 16:37:26 UTC (rev 200943)
</span><span class="lines">@@ -259,15 +259,12 @@
</span><span class="cx"> if (!m_mediaElement)
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- AudioTrackList* audioTrackList = m_mediaElement->audioTracks();
- TextTrackList* trackList = m_mediaElement->textTracks();
-
- if ((!trackList && !audioTrackList) || !m_mediaElement->document().page())
</del><ins>+ if (!m_mediaElement->document().page())
</ins><span class="cx"> return;
</span><span class="cx">
</span><span class="cx"> auto& captionPreferences = m_mediaElement->document().page()->group().captionPreferences();
</span><del>- m_legibleTracksForMenu = captionPreferences.sortedTrackListForMenu(trackList);
- m_audioTracksForMenu = captionPreferences.sortedTrackListForMenu(audioTrackList);
</del><ins>+ m_legibleTracksForMenu = captionPreferences.sortedTrackListForMenu(&m_mediaElement->textTracks());
+ m_audioTracksForMenu = captionPreferences.sortedTrackListForMenu(&m_mediaElement->audioTracks());
</ins><span class="cx">
</span><span class="cx"> m_playbackSessionInterface->setAudioMediaSelectionOptions(audioMediaSelectionOptions(), audioMediaSelectedIndex());
</span><span class="cx"> m_playbackSessionInterface->setLegibleMediaSelectionOptions(legibleMediaSelectionOptions(), legibleMediaSelectedIndex());
</span></span></pre>
</div>
</div>
</body>
</html>