<!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  &lt;cdumez@apple.com&gt;
+
+        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  &lt;mcatanzaro@igalia.com&gt;
</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-&gt;length()) {
</span><del>-            AudioTrack* track = audioTracks-&gt;lastItem();
</del><ins>+            auto&amp; track = *audioTracks-&gt;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-&gt;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-&gt;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()-&gt;audioTracks()-&gt;scheduleChangeEvent();
</del><ins>+            mediaElement()-&gt;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-&gt;length()) {
</span><del>-            VideoTrack* track = videoTracks-&gt;lastItem();
</del><ins>+            auto&amp; track = *videoTracks-&gt;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-&gt;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-&gt;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()-&gt;videoTracks()-&gt;scheduleChangeEvent();
</del><ins>+            mediaElement()-&gt;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-&gt;length()) {
</span><del>-            TextTrack* track = textTracks-&gt;lastItem();
</del><ins>+            auto&amp; track = *textTracks-&gt;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-&gt;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 &quot;showing&quot; or &quot;hidden&quot;, then
</span><span class="cx">             // set the removed enabled text track flag to true.
</span><del>-            if (track-&gt;mode() == TextTrack::Mode::Showing || track-&gt;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()-&gt;textTracks()-&gt;scheduleChangeEvent();
</del><ins>+            mediaElement()-&gt;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&lt;AudioTrack&gt; newAudioTrack = AudioTrack::create(this, audioTrackPrivate);
</del><ins>+            auto newAudioTrack = AudioTrack::create(this, audioTrackPrivate);
</ins><span class="cx">             newAudioTrack-&gt;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()-&gt;append(newAudioTrack);
</del><ins>+            audioTracks()-&gt;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-&gt;mediaElement()-&gt;audioTracks()-&gt;append(newAudioTrack);
</del><ins>+            m_source-&gt;mediaElement()-&gt;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-&gt;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&lt;VideoTrack&gt; newVideoTrack = VideoTrack::create(this, videoTrackPrivate);
</del><ins>+            auto newVideoTrack = VideoTrack::create(this, videoTrackPrivate);
</ins><span class="cx">             newVideoTrack-&gt;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()-&gt;append(newVideoTrack);
</del><ins>+            videoTracks()-&gt;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-&gt;mediaElement()-&gt;videoTracks()-&gt;append(newVideoTrack);
</del><ins>+            m_source-&gt;mediaElement()-&gt;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-&gt;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()-&gt;append(newTextTrack);
</del><ins>+            textTracks()-&gt;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-&gt;mediaElement()-&gt;textTracks()-&gt;append(newTextTrack);
</del><ins>+            m_source-&gt;mediaElement()-&gt;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-&gt;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-&gt;inherits(JSTextTrack::info()))
</span><span class="lines">@@ -50,7 +50,7 @@
</span><span class="cx">     if (object-&gt;inherits(JSVideoTrack::info()))
</span><span class="cx">         return &amp;jsCast&lt;JSVideoTrack*&gt;(object)-&gt;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&amp; 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-&gt;world(), *toAudioTrack(&amp;track)))
</del><ins>+        if (auto* wrapper = getCachedWrapper(globalObject-&gt;world(), downcast&lt;AudioTrack&gt;(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-&gt;world(), *toVideoTrack(&amp;track)))
</del><ins>+        if (auto* wrapper = getCachedWrapper(globalObject-&gt;world(), downcast&lt;VideoTrack&gt;(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-&gt;world(), *toTextTrack(&amp;track)))
</del><ins>+        if (auto* wrapper = getCachedWrapper(globalObject-&gt;world(), downcast&lt;TextTrack&gt;(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 &amp;&amp; m_audioTracks-&gt;contains(track))
</del><ins>+    ASSERT(track);
+    if (m_audioTracks &amp;&amp; m_audioTracks-&gt;contains(*track))
</ins><span class="cx">         m_audioTracks-&gt;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 &amp;&amp; m_textTracks-&gt;contains(track))
</del><ins>+    if (m_textTracks &amp;&amp; m_textTracks-&gt;contains(*track))
</ins><span class="cx">         m_textTracks-&gt;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 &amp;&amp; m_videoTracks-&gt;contains(track))
</del><ins>+    ASSERT(track);
+    if (m_videoTracks &amp;&amp; m_videoTracks-&gt;contains(*track))
</ins><span class="cx">         m_videoTracks-&gt;scheduleChangeEvent();
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -1813,7 +1815,7 @@
</span><span class="cx">         textTrackAddCue(track, cues-&gt;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 &lt; cues-&gt;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&lt;VideoTrackPrivate&gt; prpTrack)
</span><span class="lines">@@ -3601,12 +3603,12 @@
</span><span class="cx">         mediaControls()-&gt;closedCaptionTracksChanged();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void HTMLMediaElement::addAudioTrack(PassRefPtr&lt;AudioTrack&gt; track)
</del><ins>+void HTMLMediaElement::addAudioTrack(Ref&lt;AudioTrack&gt;&amp;&amp; track)
</ins><span class="cx"> {
</span><del>-    audioTracks()-&gt;append(track);
</del><ins>+    audioTracks().append(WTFMove(track));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void HTMLMediaElement::addTextTrack(PassRefPtr&lt;TextTrack&gt; track)
</del><ins>+void HTMLMediaElement::addTextTrack(Ref&lt;TextTrack&gt;&amp;&amp; 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-&gt;group().captionPreferences().captionDisplayMode();
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    textTracks()-&gt;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&lt;VideoTrack&gt; track)
</del><ins>+void HTMLMediaElement::addVideoTrack(Ref&lt;VideoTrack&gt;&amp;&amp; track)
</ins><span class="cx"> {
</span><del>-    videoTracks()-&gt;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&amp; track)
</ins><span class="cx"> {
</span><span class="cx">     m_audioTracks-&gt;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&amp; track, bool scheduleEvent)
</ins><span class="cx"> {
</span><span class="cx">     TrackDisplayUpdateScope scope(this);
</span><del>-    if (TextTrackCueList* cues = track-&gt;cues())
-        textTrackRemoveCues(track, cues);
-    track-&gt;clearClient();
</del><ins>+    if (TextTrackCueList* cues = track.cues())
+        textTrackRemoveCues(&amp;track, cues);
+    track.clearClient();
</ins><span class="cx">     if (m_textTracks)
</span><span class="cx">         m_textTracks-&gt;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&amp; track)
</ins><span class="cx"> {
</span><span class="cx">     m_videoTracks-&gt;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 &amp;&amp;  m_audioTracks-&gt;length())
</span><del>-        removeAudioTrack(m_audioTracks-&gt;lastItem());
</del><ins>+        removeAudioTrack(*m_audioTracks-&gt;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-&gt;length() - 1; i &gt;= 0; --i) {
</span><del>-            TextTrack* track = m_textTracks-&gt;item(i);
-
-            if (track-&gt;trackType() == TextTrack::InBand)
</del><ins>+            auto&amp; track = *m_textTracks-&gt;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 &amp;&amp;  m_videoTracks-&gt;length())
</span><del>-        removeVideoTrack(m_videoTracks-&gt;lastItem());
</del><ins>+        removeVideoTrack(*m_videoTracks-&gt;lastItem());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> RefPtr&lt;TextTrack&gt; HTMLMediaElement::addTextTrack(const String&amp; kind, const String&amp; label, const String&amp; language, ExceptionCode&amp; 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-&gt;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&amp; 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&amp; 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&amp; 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-&gt;length())
</del><ins>+    TextTrackList&amp; trackList = textTracks();
+    if (!trackList.length())
</ins><span class="cx">         return;
</span><span class="cx"> 
</span><span class="cx">     if (trackToSelect != TextTrack::captionMenuOffItem() &amp;&amp; trackToSelect != TextTrack::captionMenuAutomaticItem()) {
</span><del>-        if (!trackList-&gt;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-&gt;length(); i &lt; length; ++i) {
-            TextTrack* track = trackList-&gt;item(i);
-            if (!trackToSelect || track != trackToSelect)
-                track-&gt;setMode(TextTrack::Mode::Disabled);
</del><ins>+        for (int i = 0, length = trackList.length(); i &lt; length; ++i) {
+            auto&amp; track = *trackList.item(i);
+            if (&amp;track != trackToSelect)
+                track.setMode(TextTrack::Mode::Disabled);
</ins><span class="cx">             else
</span><del>-                track-&gt;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-&gt;length(); i &lt; length; ++i)
-            trackList-&gt;item(i)-&gt;setMode(TextTrack::Mode::Disabled);
</del><ins>+        for (int i = 0, length = trackList.length(); i &lt; length; ++i)
+            trackList.item(i)-&gt;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&lt;TextTrack&gt; addTextTrack(const String&amp; kind, const String&amp; label, const String&amp; language, ExceptionCode&amp;);
</span><span class="cx"> 
</span><del>-    AudioTrackList* audioTracks();
-    TextTrackList* textTracks();
-    VideoTrackList* videoTracks();
</del><ins>+    AudioTrackList&amp; audioTracks();
+    TextTrackList&amp; textTracks();
+    VideoTrackList&amp; videoTracks();
</ins><span class="cx"> 
</span><span class="cx">     CueList currentlyActiveCues() const { return m_currentlyActiveCues; }
</span><span class="cx"> 
</span><del>-    void addAudioTrack(PassRefPtr&lt;AudioTrack&gt;);
-    void addTextTrack(PassRefPtr&lt;TextTrack&gt;);
-    void addVideoTrack(PassRefPtr&lt;VideoTrack&gt;);
-    void removeAudioTrack(AudioTrack*);
-    void removeTextTrack(TextTrack*, bool scheduleEvent = true);
-    void removeVideoTrack(VideoTrack*);
</del><ins>+    void addAudioTrack(Ref&lt;AudioTrack&gt;&amp;&amp;);
+    void addTextTrack(Ref&lt;TextTrack&gt;&amp;&amp;);
+    void addVideoTrack(Ref&lt;VideoTrack&gt;&amp;&amp;);
+    void removeAudioTrack(AudioTrack&amp;);
+    void removeTextTrack(TextTrack&amp;, bool scheduleEvent = true);
+    void removeVideoTrack(VideoTrack&amp;);
</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-&gt;textTracks();
-    if (!trackList || !trackList-&gt;length())
</del><ins>+    if (!mediaElement-&gt;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-&gt;textTracks();
-    if (!trackList || !trackList-&gt;length())
</del><ins>+    TextTrackList&amp; trackList = mediaElement-&gt;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&amp; captionPreferences = document().page()-&gt;group().captionPreferences();
</span><del>-    Vector&lt;RefPtr&lt;TextTrack&gt;&gt; tracksForMenu = captionPreferences.sortedTrackListForMenu(trackList);
</del><ins>+    Vector&lt;RefPtr&lt;TextTrack&gt;&gt; tracksForMenu = captionPreferences.sortedTrackListForMenu(&amp;trackList);
</ins><span class="cx"> 
</span><span class="cx">     auto captionsHeader = document().createElement(h3Tag, ASSERT_NO_EXCEPTION);
</span><span class="cx">     captionsHeader-&gt;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-&gt;setClient(0);
</del><ins>+    m_private-&gt;setClient(nullptr);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void AudioTrack::setPrivate(PassRefPtr&lt;AudioTrackPrivate&gt; 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-&gt;setClient(0);
</del><ins>+    m_private-&gt;setClient(nullptr);
</ins><span class="cx">     m_private = trackPrivate;
</span><span class="cx">     m_private-&gt;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&amp; 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()-&gt;removeAudioTrack(this);
</del><ins>+    mediaElement()-&gt;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&lt;AudioTrackPrivate&gt; m_private;
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-inline AudioTrack* toAudioTrack(TrackBase* track)
-{
-    ASSERT_WITH_SECURITY_IMPLICATION(track-&gt;type() == TrackBase::AudioTrack);
-    return static_cast&lt;AudioTrack*&gt;(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&amp; 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&lt;AudioTrack&gt; prpTrack)
</del><ins>+void AudioTrackList::append(Ref&lt;AudioTrack&gt;&amp;&amp; track)
</ins><span class="cx"> {
</span><del>-    RefPtr&lt;AudioTrack&gt; track = prpTrack;
-
</del><span class="cx">     // Insert tracks in the media file order.
</span><span class="cx">     size_t index = track-&gt;inbandTrackIndex();
</span><span class="cx">     size_t insertionIndex;
</span><span class="cx">     for (insertionIndex = 0; insertionIndex &lt; m_inbandTracks.size(); ++insertionIndex) {
</span><del>-        AudioTrack* otherTrack = static_cast&lt;AudioTrack*&gt;(m_inbandTracks[insertionIndex].get());
-        if (otherTrack-&gt;inbandTrackIndex() &gt; index)
</del><ins>+        auto&amp; otherTrack = downcast&lt;AudioTrack&gt;(*m_inbandTracks[insertionIndex]);
+        if (otherTrack.inbandTrackIndex() &gt; 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-&gt;mediaElement() || track-&gt;mediaElement() == mediaElement());
</span><span class="cx">     track-&gt;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 &lt; m_inbandTracks.size())
</span><del>-        return toAudioTrack(m_inbandTracks[index].get());
-
-    return 0;
</del><ins>+        return downcast&lt;AudioTrack&gt;(m_inbandTracks[index].get());
+    return nullptr;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> AudioTrack* AudioTrackList::getTrackById(const AtomicString&amp; id) const
</span><span class="cx"> {
</span><span class="cx">     for (auto&amp; inbandTrack : m_inbandTracks) {
</span><del>-        AudioTrack* track = toAudioTrack(inbandTrack.get());
-        if (track-&gt;id() == id)
-            return track;
</del><ins>+        auto&amp; track = downcast&lt;AudioTrack&gt;(*inbandTrack);
+        if (track.id() == id)
+            return &amp;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&lt;AudioTrack&gt;);
</del><ins>+    void append(Ref&lt;AudioTrack&gt;&amp;&amp;);
</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()-&gt;removeTextTrack(this);
</del><ins>+    mediaElement()-&gt;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()-&gt;textTracks()-&gt;scheduleChangeEvent();
</del><ins>+        mediaElement()-&gt;textTracks().scheduleChangeEvent();
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx">     if (m_client &amp;&amp; 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-&gt;textTracks()-&gt;getTrackIndex(this);
</del><ins>+        m_trackIndex = m_mediaElement-&gt;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-&gt;textTracks()-&gt;getTrackIndexRelativeToRenderedTracks(this);
</del><ins>+        m_renderedTrackIndex = m_mediaElement-&gt;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()-&gt;textTracks()-&gt;scheduleChangeEvent();
</del><ins>+        mediaElement()-&gt;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-&gt;type() == TrackBase::TextTrack);
-    return static_cast&lt;TextTrack*&gt;(track);
-}
-
</del><span class="cx"> inline auto TextTrack::mode() const -&gt; 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&amp; 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&amp; textTrack)
</ins><span class="cx"> {
</span><span class="cx">     if (is&lt;LoadableTextTrack&gt;(textTrack))
</span><del>-        return downcast&lt;LoadableTextTrack&gt;(*textTrack).trackElementIndex();
</del><ins>+        return downcast&lt;LoadableTextTrack&gt;(textTrack).trackElementIndex();
</ins><span class="cx"> 
</span><del>-    if (textTrack-&gt;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(&amp;textTrack);
</ins><span class="cx"> 
</span><del>-    if (textTrack-&gt;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(&amp;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&amp; textTrack)
</ins><span class="cx"> {
</span><span class="cx">     // Calculate the &quot;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.&quot;
</span><span class="cx">     int trackIndex = 0;
</span><span class="cx"> 
</span><span class="cx">     for (auto&amp; elementTrack : m_elementTracks) {
</span><del>-        if (!toTextTrack(elementTrack.get())-&gt;isRendered())
</del><ins>+        if (!downcast&lt;TextTrack&gt;(*elementTrack).isRendered())
</ins><span class="cx">             continue;
</span><del>-
-        if (elementTrack == textTrack)
</del><ins>+        if (elementTrack == &amp;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&amp; addTrack : m_addTrackTracks) {
</span><del>-        if (!toTextTrack(addTrack.get())-&gt;isRendered())
</del><ins>+        if (!downcast&lt;TextTrack&gt;(*addTrack).isRendered())
</ins><span class="cx">             continue;
</span><del>-
-        if (addTrack == textTrack)
</del><ins>+        if (addTrack == &amp;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&amp; inbandTrack : m_inbandTracks) {
</span><del>-        if (!toTextTrack(inbandTrack.get())-&gt;isRendered())
</del><ins>+        if (!downcast&lt;TextTrack&gt;(*inbandTrack).isRendered())
</ins><span class="cx">             continue;
</span><del>-
-        if (inbandTrack == textTrack)
</del><ins>+        if (inbandTrack == &amp;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 &lt; m_elementTracks.size())
</span><del>-        return toTextTrack(m_elementTracks[index].get());
</del><ins>+        return downcast&lt;TextTrack&gt;(m_elementTracks[index].get());
</ins><span class="cx"> 
</span><span class="cx">     index -= m_elementTracks.size();
</span><span class="cx">     if (index &lt; m_addTrackTracks.size())
</span><del>-        return toTextTrack(m_addTrackTracks[index].get());
</del><ins>+        return downcast&lt;TextTrack&gt;(m_addTrackTracks[index].get());
</ins><span class="cx"> 
</span><span class="cx">     index -= m_addTrackTracks.size();
</span><span class="cx">     if (index &lt; m_inbandTracks.size())
</span><del>-        return toTextTrack(m_inbandTracks[index].get());
</del><ins>+        return downcast&lt;TextTrack&gt;(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&amp; 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 &lt; length(); ++i) {
</span><del>-        TextTrack* track = item(i);
-        if (track-&gt;id() == id)
-            return track;
</del><ins>+        auto&amp; track = *item(i);
+        if (track.id() == id)
+            return &amp;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&amp; track)
</ins><span class="cx"> {
</span><del>-    Vector&lt;RefPtr&lt;TrackBase&gt;&gt;* tracks = 0;
</del><ins>+    Vector&lt;RefPtr&lt;TrackBase&gt;&gt;* tracks = nullptr;
</ins><span class="cx"> 
</span><del>-    if (track-&gt;trackType() == TextTrack::TrackElement) {
</del><ins>+    switch (track.trackType()) {
+    case TextTrack::TrackElement:
</ins><span class="cx">         tracks = &amp;m_elementTracks;
</span><span class="cx">         for (auto&amp; addTrack : m_addTrackTracks)
</span><del>-            toTextTrack(addTrack.get())-&gt;invalidateTrackIndex();
</del><ins>+            downcast&lt;TextTrack&gt;(addTrack.get())-&gt;invalidateTrackIndex();
</ins><span class="cx">         for (auto&amp; inbandTrack : m_inbandTracks)
</span><del>-            toTextTrack(inbandTrack.get())-&gt;invalidateTrackIndex();
-    } else if (track-&gt;trackType() == TextTrack::AddTrack) {
</del><ins>+            downcast&lt;TextTrack&gt;(inbandTrack.get())-&gt;invalidateTrackIndex();
+        break;
+    case TextTrack::AddTrack:
</ins><span class="cx">         tracks = &amp;m_addTrackTracks;
</span><span class="cx">         for (auto&amp; inbandTrack : m_inbandTracks)
</span><del>-            toTextTrack(inbandTrack.get())-&gt;invalidateTrackIndex();
-    } else if (track-&gt;trackType() == TextTrack::InBand)
</del><ins>+            downcast&lt;TextTrack&gt;(inbandTrack.get())-&gt;invalidateTrackIndex();
+        break;
+    case TextTrack::InBand:
</ins><span class="cx">         tracks = &amp;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-&gt;find(track);
</del><ins>+    size_t index = tracks-&gt;find(&amp;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 &lt; tracks-&gt;size(); ++i)
</span><del>-        toTextTrack(tracks-&gt;at(index).get())-&gt;invalidateTrackIndex();
</del><ins>+        downcast&lt;TextTrack&gt;(*tracks-&gt;at(index)).invalidateTrackIndex();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void TextTrackList::append(PassRefPtr&lt;TextTrack&gt; prpTrack)
</del><ins>+void TextTrackList::append(Ref&lt;TextTrack&gt;&amp;&amp; track)
</ins><span class="cx"> {
</span><del>-    RefPtr&lt;TextTrack&gt; track = prpTrack;
-
</del><span class="cx">     if (track-&gt;trackType() == TextTrack::AddTrack)
</span><del>-        m_addTrackTracks.append(track);
-    else if (is&lt;LoadableTextTrack&gt;(*track)) {
</del><ins>+        m_addTrackTracks.append(track.ptr());
+    else if (is&lt;LoadableTextTrack&gt;(track.get())) {
</ins><span class="cx">         // Insert tracks added for &lt;track&gt; element in tree order.
</span><del>-        size_t index = downcast&lt;LoadableTextTrack&gt;(*track).trackElementIndex();
-        m_elementTracks.insert(index, track);
</del><ins>+        size_t index = downcast&lt;LoadableTextTrack&gt;(track.get()).trackElementIndex();
+        m_elementTracks.insert(index, track.ptr());
</ins><span class="cx">     } else if (track-&gt;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&lt;InbandTextTrack*&gt;(track.get())-&gt;inbandTrackIndex();
-        m_inbandTracks.insert(index, track);
</del><ins>+        size_t index = downcast&lt;InbandTextTrack&gt;(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-&gt;mediaElement() || track-&gt;mediaElement() == mediaElement());
</span><span class="cx">     track-&gt;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&amp; track, bool scheduleEvent)
</ins><span class="cx"> {
</span><del>-    TextTrack* textTrack = toTextTrack(track);
-    Vector&lt;RefPtr&lt;TrackBase&gt;&gt;* tracks = 0;
-    if (textTrack-&gt;trackType() == TextTrack::TrackElement)
</del><ins>+    auto&amp; textTrack = downcast&lt;TextTrack&gt;(track);
+    Vector&lt;RefPtr&lt;TrackBase&gt;&gt;* tracks = nullptr;
+    switch (textTrack.trackType()) {
+    case TextTrack::TrackElement:
</ins><span class="cx">         tracks = &amp;m_elementTracks;
</span><del>-    else if (textTrack-&gt;trackType() == TextTrack::AddTrack)
</del><ins>+        break;
+    case TextTrack::AddTrack:
</ins><span class="cx">         tracks = &amp;m_addTrackTracks;
</span><del>-    else if (textTrack-&gt;trackType() == TextTrack::InBand)
</del><ins>+        break;
+    case TextTrack::InBand:
</ins><span class="cx">         tracks = &amp;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-&gt;find(track);
</del><ins>+    size_t index = tracks-&gt;find(&amp;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-&gt;mediaElement() || track-&gt;mediaElement() == element());
-    track-&gt;setMediaElement(0);
</del><ins>+    ASSERT(!track.mediaElement() || track.mediaElement() == element());
+    track.setMediaElement(nullptr);
</ins><span class="cx"> 
</span><del>-    RefPtr&lt;TrackBase&gt; trackRef = (*tracks)[index];
</del><ins>+    Ref&lt;TrackBase&gt; trackRef = *(*tracks)[index];
</ins><span class="cx">     tracks-&gt;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&amp; track) const
</ins><span class="cx"> {
</span><del>-    const Vector&lt;RefPtr&lt;TrackBase&gt;&gt;* tracks = 0;
-    TextTrack::TextTrackType type = toTextTrack(track)-&gt;trackType();
-    if (type == TextTrack::TrackElement)
</del><ins>+    const Vector&lt;RefPtr&lt;TrackBase&gt;&gt;* tracks = nullptr;
+    switch (downcast&lt;TextTrack&gt;(track).trackType()) {
+    case TextTrack::TrackElement:
</ins><span class="cx">         tracks = &amp;m_elementTracks;
</span><del>-    else if (type == TextTrack::AddTrack)
</del><ins>+        break;
+    case TextTrack::AddTrack:
</ins><span class="cx">         tracks = &amp;m_addTrackTracks;
</span><del>-    else if (type == TextTrack::InBand)
</del><ins>+        break;
+    case TextTrack::InBand:
</ins><span class="cx">         tracks = &amp;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-&gt;find(track) != notFound;
</del><ins>+    return tracks-&gt;find(&amp;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&amp;);
+    int getTrackIndexRelativeToRenderedTracks(TextTrack&amp;);
+    bool contains(TrackBase&amp;) const override;
</ins><span class="cx"> 
</span><span class="cx">     TextTrack* item(unsigned index) const;
</span><span class="cx">     TextTrack* getTrackById(const AtomicString&amp;);
</span><span class="cx">     TextTrack* lastItem() const { return item(length() - 1); }
</span><span class="cx"> 
</span><del>-    void append(PassRefPtr&lt;TextTrack&gt;);
-    void remove(TrackBase*, bool scheduleEvent = true) override;
</del><ins>+    void append(Ref&lt;TextTrack&gt;&amp;&amp;);
+    void remove(TrackBase&amp;, 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&amp;);
</ins><span class="cx"> 
</span><span class="cx">     Vector&lt;RefPtr&lt;TrackBase&gt;&gt; m_addTrackTracks;
</span><span class="cx">     Vector&lt;RefPtr&lt;TrackBase&gt;&gt; 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 &quot;EventTarget.h&quot;
</span><span class="cx"> #include &lt;wtf/RefCounted.h&gt;
</span><ins>+#include &lt;wtf/TypeCasts.h&gt;
</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&amp; type, bool canBubble, bool cancelable, RefPtr&lt;TrackBase&gt;&amp;&amp; track)
</del><ins>+TrackEvent::TrackEvent(const AtomicString&amp; type, bool canBubble, bool cancelable, Ref&lt;TrackBase&gt;&amp;&amp; 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&lt;TrackEvent&gt; create(const AtomicString&amp; type, bool canBubble, bool cancelable, RefPtr&lt;TrackBase&gt;&amp;&amp; track)
</del><ins>+    static Ref&lt;TrackEvent&gt; create(const AtomicString&amp; type, bool canBubble, bool cancelable, Ref&lt;TrackBase&gt;&amp;&amp; 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&amp; type, bool canBubble, bool cancelable, RefPtr&lt;TrackBase&gt;&amp;&amp;);
</del><ins>+    TrackEvent(const AtomicString&amp; type, bool canBubble, bool cancelable, Ref&lt;TrackBase&gt;&amp;&amp;);
</ins><span class="cx">     TrackEvent(const AtomicString&amp; type, const TrackEventInit&amp; initializer);
</span><span class="cx"> 
</span><span class="cx">     RefPtr&lt;TrackBase&gt; 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&amp; track, bool scheduleEvent)
</ins><span class="cx"> {
</span><del>-    size_t index = m_inbandTracks.find(track);
</del><ins>+    size_t index = m_inbandTracks.find(&amp;track);
</ins><span class="cx">     ASSERT(index != notFound);
</span><span class="cx"> 
</span><del>-    ASSERT(track-&gt;mediaElement() == m_element);
-    track-&gt;setMediaElement(0);
</del><ins>+    ASSERT(track.mediaElement() == m_element);
+    track.setMediaElement(nullptr);
</ins><span class="cx"> 
</span><del>-    RefPtr&lt;TrackBase&gt; trackRef = m_inbandTracks[index];
</del><ins>+    Ref&lt;TrackBase&gt; 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&amp; track) const
</ins><span class="cx"> {
</span><del>-    return m_inbandTracks.find(track) != notFound;
</del><ins>+    return m_inbandTracks.find(&amp;track) != notFound;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void TrackListBase::scheduleTrackEvent(const AtomicString&amp; eventName, PassRefPtr&lt;TrackBase&gt; track)
</del><ins>+void TrackListBase::scheduleTrackEvent(const AtomicString&amp; eventName, Ref&lt;TrackBase&gt;&amp;&amp; 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&lt;TrackBase&gt; track)
</del><ins>+void TrackListBase::scheduleAddTrackEvent(Ref&lt;TrackBase&gt;&amp;&amp; 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&lt;TrackBase&gt; track)
</del><ins>+void TrackListBase::scheduleRemoveTrackEvent(Ref&lt;TrackBase&gt;&amp;&amp; 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&amp;) const;
+    virtual void remove(TrackBase&amp;, 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&lt;TrackBase&gt;);
-    void scheduleRemoveTrackEvent(PassRefPtr&lt;TrackBase&gt;);
</del><ins>+    void scheduleAddTrackEvent(Ref&lt;TrackBase&gt;&amp;&amp;);
+    void scheduleRemoveTrackEvent(Ref&lt;TrackBase&gt;&amp;&amp;);
</ins><span class="cx"> 
</span><span class="cx">     Vector&lt;RefPtr&lt;TrackBase&gt;&gt; m_inbandTracks;
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    void scheduleTrackEvent(const AtomicString&amp; eventName, PassRefPtr&lt;TrackBase&gt;);
</del><ins>+    void scheduleTrackEvent(const AtomicString&amp; eventName, Ref&lt;TrackBase&gt;&amp;&amp;);
</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()-&gt;removeVideoTrack(this);
</del><ins>+    mediaElement()-&gt;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()-&gt;videoTracks()-&gt;scheduleChangeEvent();
</del><ins>+    mediaElement()-&gt;videoTracks().scheduleChangeEvent();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void VideoTrack::setLanguage(const AtomicString&amp; 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()-&gt;videoTracks())
-        mediaElement()-&gt;videoTracks()-&gt;scheduleChangeEvent();
</del><ins>+    mediaElement()-&gt;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&lt;VideoTrackPrivate&gt; m_private;
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-inline VideoTrack* toVideoTrack(TrackBase* track)
-{
-    ASSERT_WITH_SECURITY_IMPLICATION(track-&gt;type() == TrackBase::VideoTrack);
-    return static_cast&lt;VideoTrack*&gt;(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&amp; 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&lt;VideoTrack&gt; prpTrack)
</del><ins>+void VideoTrackList::append(Ref&lt;VideoTrack&gt;&amp;&amp; track)
</ins><span class="cx"> {
</span><del>-    RefPtr&lt;VideoTrack&gt; track = prpTrack;
-
</del><span class="cx">     // Insert tracks in the media file order.
</span><span class="cx">     size_t index = track-&gt;inbandTrackIndex();
</span><span class="cx">     size_t insertionIndex;
</span><span class="cx">     for (insertionIndex = 0; insertionIndex &lt; m_inbandTracks.size(); ++insertionIndex) {
</span><del>-        VideoTrack* otherTrack = static_cast&lt;VideoTrack*&gt;(m_inbandTracks[insertionIndex].get());
-        if (otherTrack-&gt;inbandTrackIndex() &gt; index)
</del><ins>+        auto&amp; otherTrack = downcast&lt;VideoTrack&gt;(*m_inbandTracks[insertionIndex]);
+        if (otherTrack.inbandTrackIndex() &gt; 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-&gt;mediaElement() || track-&gt;mediaElement() == mediaElement());
</span><span class="cx">     track-&gt;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 &lt; m_inbandTracks.size())
</span><del>-        return toVideoTrack(m_inbandTracks[index].get());
-
-    return 0;
</del><ins>+        return downcast&lt;VideoTrack&gt;(m_inbandTracks[index].get());
+    return nullptr;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> VideoTrack* VideoTrackList::getTrackById(const AtomicString&amp; id) const
</span><span class="cx"> {
</span><span class="cx">     for (auto&amp; inbandTracks : m_inbandTracks) {
</span><del>-        VideoTrack* track = toVideoTrack(inbandTracks.get());
-        if (track-&gt;id() == id)
-            return track;
</del><ins>+        auto&amp; track = downcast&lt;VideoTrack&gt;(*inbandTracks);
+        if (track.id() == id)
+            return &amp;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 &lt; length(); ++i) {
-        VideoTrack* track = toVideoTrack(m_inbandTracks[i].get());
-        if (track-&gt;selected())
</del><ins>+    for (unsigned i = 0; i &lt; length(); ++i) {
+        if (downcast&lt;VideoTrack&gt;(*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&amp;) 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&lt;VideoTrack&gt;);
</del><ins>+    void append(Ref&lt;VideoTrack&gt;&amp;&amp;);
</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-&gt;audioTracks();
-    TextTrackList* trackList = m_mediaElement-&gt;textTracks();
-
-    if ((!trackList &amp;&amp; !audioTrackList) || !m_mediaElement-&gt;document().page())
</del><ins>+    if (!m_mediaElement-&gt;document().page())
</ins><span class="cx">         return;
</span><span class="cx"> 
</span><span class="cx">     auto&amp; captionPreferences = m_mediaElement-&gt;document().page()-&gt;group().captionPreferences();
</span><del>-    m_legibleTracksForMenu = captionPreferences.sortedTrackListForMenu(trackList);
-    m_audioTracksForMenu = captionPreferences.sortedTrackListForMenu(audioTrackList);
</del><ins>+    m_legibleTracksForMenu = captionPreferences.sortedTrackListForMenu(&amp;m_mediaElement-&gt;textTracks());
+    m_audioTracksForMenu = captionPreferences.sortedTrackListForMenu(&amp;m_mediaElement-&gt;audioTracks());
</ins><span class="cx"> 
</span><span class="cx">     m_playbackSessionInterface-&gt;setAudioMediaSelectionOptions(audioMediaSelectionOptions(), audioMediaSelectedIndex());
</span><span class="cx">     m_playbackSessionInterface-&gt;setLegibleMediaSelectionOptions(legibleMediaSelectionOptions(), legibleMediaSelectedIndex());
</span></span></pre>
</div>
</div>

</body>
</html>