<!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>[167632] trunk</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/167632">167632</a></dd>
<dt>Author</dt> <dd>eric.carlson@apple.com</dd>
<dt>Date</dt> <dd>2014-04-21 16:18:23 -0700 (Mon, 21 Apr 2014)</dd>
</dl>
<h3>Log Message</h3>
<pre>[Mac] implement WebKitDataCue
https://bugs.webkit.org/show_bug.cgi?id=131799
Reviewed by Dean Jackson.
Source/JavaScriptCore:
* Configurations/FeatureDefines.xcconfig: Define ENABLE_DATACUE_VALUE.
Source/WebCore:
Tests: http/tests/media/track-in-band-hls-metadata.html
media/track/track-datacue-value.html
* Configurations/FeatureDefines.xcconfig: Define ENABLE_DATACUE_VALUE.
* DerivedSources.make: Add ENABLE_DATACUE_VALUE to HTML_FLAGS when appropriate.
* CMakeLists.txt: Add JSDataCueCustom.cpp.
* bindings/js/JSBindingsAllInOne.cpp:
* WebCore.xcodeproj/project.pbxproj: Add new files.
* bindings/js/JSDataCueCustom.cpp: Added.
(WebCore::JSDataCue::value):
(WebCore::JSDataCue::setValue):
(WebCore::JSDataCueConstructor::constructJSDataCue): Custom constructor.
* html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::updateActiveTextTrackCues): Drive-by fixes: don't schedule timeupdate
events when paused, don't call sort on an Vector that can't be sorted.
* html/track/DataCue.cpp:
(WebCore::DataCue::DataCue): Initialize m_type.
(WebCore::DataCue::~DataCue): Unprotect the JSValue if necessary.
(WebCore::DataCue::data): Ask the platform value for data if non-null.
(WebCore::DataCue::setData): Clear m_platformValue and m_value.
(WebCore::DataCue::isEqual): New.
(WebCore::DataCue::value): Return a JSValue from the platform value, or the value passed
to the constructor/set by script.
(WebCore::DataCue::setValue): Set m_value.
* html/track/DataCue.h:
* html/track/DataCue.idl:
* html/track/InbandDataTextTrack.cpp:
(WebCore::InbandDataTextTrack::addDataCue): Don't add the same cue more than once.
(WebCore::InbandDataTextTrack::updateDataCue): Update a cue's duration.
(WebCore::InbandDataTextTrack::removeDataCue): Remove an incomplete cue.
(WebCore::InbandDataTextTrack::removeCue): Remove a cue from the incomplete cue map if necessary.
* html/track/InbandDataTextTrack.h:
* html/track/InbandGenericTextTrack.cpp:
(WebCore::InbandGenericTextTrack::addGenericCue): CueMatchRules is now in TextTrackCue instead
of VTTCue.
* html/track/InbandTextTrack.h:
* html/track/InbandWebVTTTextTrack.cpp:
(WebCore::InbandWebVTTTextTrack::newCuesParsed): Ditto.
* html/track/TextTrack.cpp:
(WebCore::TextTrack::hasCue): Ditto.
* html/track/TextTrack.h:
* html/track/TextTrackCue.cpp:
(WebCore::TextTrackCue::isEqual): New, test base class equality.
* html/track/TextTrackCue.h:
* html/track/TextTrackCueGeneric.cpp:
(WebCore::TextTrackCueGeneric::isEqual): Call TextTrackCue::isEqual first.
* html/track/TextTrackCueGeneric.h:
* html/track/VTTCue.cpp:
(WebCore::VTTCue::isEqual): Call TextTrackCue::isEqual first.
* html/track/VTTCue.h:
* platform/SerializedPlatformRepresentation.h: Added.
(WebCore::SerializedPlatformRepresentation::~SerializedPlatformRepresentation):
(WebCore::SerializedPlatformRepresentation::SerializedPlatformRepresentation):
* platform/graphics/InbandTextTrackPrivateClient.h: Add methods for DataCue with SerializedPlatformRepresentation.
* platform/graphics/avfoundation/InbandMetadataTextTrackPrivateAVF.cpp: Added.
(WebCore::InbandMetadataTextTrackPrivateAVF::create):
(WebCore::InbandMetadataTextTrackPrivateAVF::InbandMetadataTextTrackPrivateAVF):
(WebCore::InbandMetadataTextTrackPrivateAVF::~InbandMetadataTextTrackPrivateAVF):
(WebCore::InbandMetadataTextTrackPrivateAVF::addDataCue):
(WebCore::InbandMetadataTextTrackPrivateAVF::updatePendingCueEndTimes):
(WebCore::InbandMetadataTextTrackPrivateAVF::flushPartialCues):
* platform/graphics/avfoundation/InbandMetadataTextTrackPrivateAVF.h: Added.
* platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
(WebCore::MediaPlayerPrivateAVFoundation::seekWithTolerance): currentTrack -> currentTextTrack.
(WebCore::MediaPlayerPrivateAVFoundation::seekCompleted): Ditto.
(WebCore::MediaPlayerPrivateAVFoundation::configureInbandTracks): Ditto.
* platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
(WebCore::MediaPlayerPrivateAVFoundation::setCurrentTextTrack):
(WebCore::MediaPlayerPrivateAVFoundation::setCurrentTrack): Deleted.
Renamed currentTrack and setCurrentTrack to currentTextTrack and setCurrentTextTrack.
* platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
(WebCore::AVFWrapper::currentTextTrack):
(WebCore::MediaPlayerPrivateAVFoundationCF::setCurrentTextTrack):
(WebCore::MediaPlayerPrivateAVFoundationCF::currentTextTrack):
(WebCore::AVFWrapper::setCurrentTextTrack):
(WebCore::AVFWrapper::AVFWrapper):
(WebCore::AVFWrapper::processCue):
(WebCore::AVFWrapper::currentTrack): Deleted.
(WebCore::MediaPlayerPrivateAVFoundationCF::setCurrentTrack): Deleted.
(WebCore::MediaPlayerPrivateAVFoundationCF::currentTrack): Deleted.
(WebCore::AVFWrapper::setCurrentTrack): Deleted.
* platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.h:
* platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
* platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
(WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC):
(WebCore::MediaPlayerPrivateAVFoundationObjC::seekToTime): currentTrack -> currentTextTrack
(WebCore::MediaPlayerPrivateAVFoundationObjC::tracksChanged): currentTrack -> currentTextTrack.
(WebCore::MediaPlayerPrivateAVFoundationObjC::processMetadataTrack): New.
(WebCore::MediaPlayerPrivateAVFoundationObjC::processCue): m_currentTrack -> m_currentTextTrack.
(WebCore::MediaPlayerPrivateAVFoundationObjC::flushCues): Ditto.
(WebCore::MediaPlayerPrivateAVFoundationObjC::setCurrentTextTrack): Renamed from setCurrentTextTrack.
(WebCore::metadataType): Map an AVFoundation metadata key space to a metadata cue type.
(WebCore::MediaPlayerPrivateAVFoundationObjC::metadataDidArrive): Process new metadata.
(-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]):
(WebCore::MediaPlayerPrivateAVFoundationObjC::setCurrentTrack): Deleted.
Create a JSValue representation from an AVMetadataItem.
* platform/mac/SerializedPlatformRepresentationMac.h: Added.
(WebCore::SerializedPlatformRepresentationMac::platformType):
(WebCore::SerializedPlatformRepresentationMac::nativeValue):
* platform/mac/SerializedPlatformRepresentationMac.mm: Added.
(WebCore::SerializedPlatformRepresentationMac::SerializedPlatformRepresentationMac):
(WebCore::SerializedPlatformRepresentationMac::~SerializedPlatformRepresentationMac):
(WebCore::SerializedPlatformRepresentationMac::create):
(WebCore::SerializedPlatformRepresentationMac::data):
(WebCore::SerializedPlatformRepresentationMac::deserialize):
(WebCore::SerializedPlatformRepresentationMac::isEqual):
(WebCore::toSerializedPlatformRepresentationMac):
(WebCore::jsValueWithValueInContext):
(WebCore::jsValueWithDataInContext):
(WebCore::jsValueWithArrayInContext):
(WebCore::jsValueWithDictionaryInContext):
(WebCore::jsValueWithAVMetadataItemInContext):
Source/WebKit/mac:
* Configurations/FeatureDefines.xcconfig: Define ENABLE_DATACUE_VALUE.
Source/WebKit2:
* Configurations/FeatureDefines.xcconfig: Define ENABLE_DATACUE_VALUE.
Source/WTF:
* wtf/FeatureDefines.h: Define ENABLE_DATACUE_VALUE.
LayoutTests:
* http/tests/media/resources/hls: Added.
* http/tests/media/resources/hls/metadata: Added.
* http/tests/media/resources/hls/metadata/fileSequence0.ts: Added.
* http/tests/media/resources/hls/metadata/fileSequence1.ts: Added.
* http/tests/media/resources/hls/metadata/fileSequence2.ts: Added.
* http/tests/media/resources/hls/metadata/fileSequence3.ts: Added.
* http/tests/media/resources/hls/metadata/prog_index.m3u8: Added.
* http/tests/media/track-in-band-hls-metadata-expected.txt: Added.
* http/tests/media/track-in-band-hls-metadata.html: Added.
* media/track/track-datacue-value-expected.txt: Added.
* media/track/track-datacue-value.html: Added.
* platform/efl/TestExpectations: Skip the new tests.
* platform/gtk/TestExpectations: Ditto.
* platform/mac/js/dom/global-constructors-attributes-expected.txt: Update.
* platform/mac-mountainlion/js/dom/global-constructors-attributes-expected.txt: Update.
* platform/mac/TestExpectations: Skip DataCue test on all Mac versions. Skip HLS test on
Mountain Lion.
* platform/win/TestExpectations: Skip the new tests.</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsplatformeflTestExpectations">trunk/LayoutTests/platform/efl/TestExpectations</a></li>
<li><a href="#trunkLayoutTestsplatformgtkTestExpectations">trunk/LayoutTests/platform/gtk/TestExpectations</a></li>
<li><a href="#trunkLayoutTestsplatformmacTestExpectations">trunk/LayoutTests/platform/mac/TestExpectations</a></li>
<li><a href="#trunkLayoutTestsplatformmacjsdomglobalconstructorsattributesexpectedtxt">trunk/LayoutTests/platform/mac/js/dom/global-constructors-attributes-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmacmountainlionjsdomglobalconstructorsattributesexpectedtxt">trunk/LayoutTests/platform/mac-mountainlion/js/dom/global-constructors-attributes-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformwinTestExpectations">trunk/LayoutTests/platform/win/TestExpectations</a></li>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCoreConfigurationsFeatureDefinesxcconfig">trunk/Source/JavaScriptCore/Configurations/FeatureDefines.xcconfig</a></li>
<li><a href="#trunkSourceWTFChangeLog">trunk/Source/WTF/ChangeLog</a></li>
<li><a href="#trunkSourceWTFwtfFeatureDefinesh">trunk/Source/WTF/wtf/FeatureDefines.h</a></li>
<li><a href="#trunkSourceWebCoreCMakeListstxt">trunk/Source/WebCore/CMakeLists.txt</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreConfigurationsFeatureDefinesxcconfig">trunk/Source/WebCore/Configurations/FeatureDefines.xcconfig</a></li>
<li><a href="#trunkSourceWebCoreDerivedSourcesmake">trunk/Source/WebCore/DerivedSources.make</a></li>
<li><a href="#trunkSourceWebCoreWebCorexcodeprojprojectpbxproj">trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSBindingsAllInOnecpp">trunk/Source/WebCore/bindings/js/JSBindingsAllInOne.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLMediaElementcpp">trunk/Source/WebCore/html/HTMLMediaElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmltrackDataCuecpp">trunk/Source/WebCore/html/track/DataCue.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmltrackDataCueh">trunk/Source/WebCore/html/track/DataCue.h</a></li>
<li><a href="#trunkSourceWebCorehtmltrackDataCueidl">trunk/Source/WebCore/html/track/DataCue.idl</a></li>
<li><a href="#trunkSourceWebCorehtmltrackInbandDataTextTrackcpp">trunk/Source/WebCore/html/track/InbandDataTextTrack.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmltrackInbandDataTextTrackh">trunk/Source/WebCore/html/track/InbandDataTextTrack.h</a></li>
<li><a href="#trunkSourceWebCorehtmltrackInbandGenericTextTrackcpp">trunk/Source/WebCore/html/track/InbandGenericTextTrack.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmltrackInbandTextTrackh">trunk/Source/WebCore/html/track/InbandTextTrack.h</a></li>
<li><a href="#trunkSourceWebCorehtmltrackInbandWebVTTTextTrackcpp">trunk/Source/WebCore/html/track/InbandWebVTTTextTrack.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="#trunkSourceWebCorehtmltrackTextTrackCuecpp">trunk/Source/WebCore/html/track/TextTrackCue.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmltrackTextTrackCueh">trunk/Source/WebCore/html/track/TextTrackCue.h</a></li>
<li><a href="#trunkSourceWebCorehtmltrackTextTrackCueGenericcpp">trunk/Source/WebCore/html/track/TextTrackCueGeneric.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmltrackTextTrackCueGenerich">trunk/Source/WebCore/html/track/TextTrackCueGeneric.h</a></li>
<li><a href="#trunkSourceWebCorehtmltrackVTTCuecpp">trunk/Source/WebCore/html/track/VTTCue.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmltrackVTTCueh">trunk/Source/WebCore/html/track/VTTCue.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsInbandTextTrackPrivateClienth">trunk/Source/WebCore/platform/graphics/InbandTextTrackPrivateClient.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsavfoundationMediaPlayerPrivateAVFoundationcpp">trunk/Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsavfoundationMediaPlayerPrivateAVFoundationh">trunk/Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsavfoundationcfMediaPlayerPrivateAVFoundationCFcpp">trunk/Source/WebCore/platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsavfoundationcfMediaPlayerPrivateAVFoundationCFh">trunk/Source/WebCore/platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsavfoundationobjcMediaPlayerPrivateAVFoundationObjCh">trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsavfoundationobjcMediaPlayerPrivateAVFoundationObjCmm">trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm</a></li>
<li><a href="#trunkSourceWebKitmacChangeLog">trunk/Source/WebKit/mac/ChangeLog</a></li>
<li><a href="#trunkSourceWebKitmacConfigurationsFeatureDefinesxcconfig">trunk/Source/WebKit/mac/Configurations/FeatureDefines.xcconfig</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2ConfigurationsFeatureDefinesxcconfig">trunk/Source/WebKit2/Configurations/FeatureDefines.xcconfig</a></li>
</ul>
<h3>Added Paths</h3>
<ul>
<li>trunk/LayoutTests/http/tests/media/resources/hls/</li>
<li>trunk/LayoutTests/http/tests/media/resources/hls/metadata/</li>
<li><a href="#trunkLayoutTestshttptestsmediaresourceshlsmetadatafileSequence0ts">trunk/LayoutTests/http/tests/media/resources/hls/metadata/fileSequence0.ts</a></li>
<li><a href="#trunkLayoutTestshttptestsmediaresourceshlsmetadatafileSequence1ts">trunk/LayoutTests/http/tests/media/resources/hls/metadata/fileSequence1.ts</a></li>
<li><a href="#trunkLayoutTestshttptestsmediaresourceshlsmetadatafileSequence2ts">trunk/LayoutTests/http/tests/media/resources/hls/metadata/fileSequence2.ts</a></li>
<li><a href="#trunkLayoutTestshttptestsmediaresourceshlsmetadatafileSequence3ts">trunk/LayoutTests/http/tests/media/resources/hls/metadata/fileSequence3.ts</a></li>
<li><a href="#trunkLayoutTestshttptestsmediaresourceshlsmetadataprog_indexm3u8">trunk/LayoutTests/http/tests/media/resources/hls/metadata/prog_index.m3u8</a></li>
<li><a href="#trunkLayoutTestshttptestsmediatrackinbandhlsmetadataexpectedtxt">trunk/LayoutTests/http/tests/media/track-in-band-hls-metadata-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediatrackinbandhlsmetadatahtml">trunk/LayoutTests/http/tests/media/track-in-band-hls-metadata.html</a></li>
<li><a href="#trunkLayoutTestsmediatracktrackdatacuevalueexpectedtxt">trunk/LayoutTests/media/track/track-datacue-value-expected.txt</a></li>
<li><a href="#trunkLayoutTestsmediatracktrackdatacuevaluehtml">trunk/LayoutTests/media/track/track-datacue-value.html</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSDataCueCustomcpp">trunk/Source/WebCore/bindings/js/JSDataCueCustom.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformSerializedPlatformRepresentationh">trunk/Source/WebCore/platform/SerializedPlatformRepresentation.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsavfoundationInbandMetadataTextTrackPrivateAVFcpp">trunk/Source/WebCore/platform/graphics/avfoundation/InbandMetadataTextTrackPrivateAVF.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsavfoundationInbandMetadataTextTrackPrivateAVFh">trunk/Source/WebCore/platform/graphics/avfoundation/InbandMetadataTextTrackPrivateAVF.h</a></li>
<li><a href="#trunkSourceWebCoreplatformmacSerializedPlatformRepresentationMach">trunk/Source/WebCore/platform/mac/SerializedPlatformRepresentationMac.h</a></li>
<li><a href="#trunkSourceWebCoreplatformmacSerializedPlatformRepresentationMacmm">trunk/Source/WebCore/platform/mac/SerializedPlatformRepresentationMac.mm</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (167631 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2014-04-21 22:25:42 UTC (rev 167631)
+++ trunk/LayoutTests/ChangeLog        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -1,3 +1,29 @@
</span><ins>+2014-04-21 Eric Carlson <eric.carlson@apple.com>
+
+ [Mac] implement WebKitDataCue
+ https://bugs.webkit.org/show_bug.cgi?id=131799
+
+ Reviewed by Dean Jackson.
+
+ * http/tests/media/resources/hls: Added.
+ * http/tests/media/resources/hls/metadata: Added.
+ * http/tests/media/resources/hls/metadata/fileSequence0.ts: Added.
+ * http/tests/media/resources/hls/metadata/fileSequence1.ts: Added.
+ * http/tests/media/resources/hls/metadata/fileSequence2.ts: Added.
+ * http/tests/media/resources/hls/metadata/fileSequence3.ts: Added.
+ * http/tests/media/resources/hls/metadata/prog_index.m3u8: Added.
+ * http/tests/media/track-in-band-hls-metadata-expected.txt: Added.
+ * http/tests/media/track-in-band-hls-metadata.html: Added.
+ * media/track/track-datacue-value-expected.txt: Added.
+ * media/track/track-datacue-value.html: Added.
+ * platform/efl/TestExpectations: Skip the new tests.
+ * platform/gtk/TestExpectations: Ditto.
+ * platform/mac/js/dom/global-constructors-attributes-expected.txt: Update.
+ * platform/mac-mountainlion/js/dom/global-constructors-attributes-expected.txt: Update.
+ * platform/mac/TestExpectations: Skip DataCue test on all Mac versions. Skip HLS test on
+ Mountain Lion.
+ * platform/win/TestExpectations: Skip the new tests.
+
</ins><span class="cx"> 2014-04-21 Benjamin Poulain <benjamin@webkit.org>
</span><span class="cx">
</span><span class="cx"> Add Element.matches, the standard name for webkitMatchesSelector
</span></span></pre></div>
<a id="trunkLayoutTestshttptestsmediaresourceshlsmetadatafileSequence0ts"></a>
<div class="binary"><h4>Added: trunk/LayoutTests/http/tests/media/resources/hls/metadata/fileSequence0.ts</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<span class="cx">Property changes on: trunk/LayoutTests/http/tests/media/resources/hls/metadata/fileSequence0.ts
</span><span class="cx">___________________________________________________________________
</span><a id="svnmimetype"></a>
<div class="addfile"><h4>Added: svn:mime-type</h4></div>
<a id="trunkLayoutTestshttptestsmediaresourceshlsmetadatafileSequence1ts"></a>
<div class="binary"><h4>Added: trunk/LayoutTests/http/tests/media/resources/hls/metadata/fileSequence1.ts</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<span class="cx">Property changes on: trunk/LayoutTests/http/tests/media/resources/hls/metadata/fileSequence1.ts
</span><span class="cx">___________________________________________________________________
</span><a id="svnmimetype"></a>
<div class="addfile"><h4>Added: svn:mime-type</h4></div>
<a id="trunkLayoutTestshttptestsmediaresourceshlsmetadatafileSequence2ts"></a>
<div class="binary"><h4>Added: trunk/LayoutTests/http/tests/media/resources/hls/metadata/fileSequence2.ts</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<span class="cx">Property changes on: trunk/LayoutTests/http/tests/media/resources/hls/metadata/fileSequence2.ts
</span><span class="cx">___________________________________________________________________
</span><a id="svnmimetype"></a>
<div class="addfile"><h4>Added: svn:mime-type</h4></div>
<a id="trunkLayoutTestshttptestsmediaresourceshlsmetadatafileSequence3ts"></a>
<div class="binary"><h4>Added: trunk/LayoutTests/http/tests/media/resources/hls/metadata/fileSequence3.ts</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<span class="cx">Property changes on: trunk/LayoutTests/http/tests/media/resources/hls/metadata/fileSequence3.ts
</span><span class="cx">___________________________________________________________________
</span><a id="svnmimetype"></a>
<div class="addfile"><h4>Added: svn:mime-type</h4></div>
<a id="trunkLayoutTestshttptestsmediaresourceshlsmetadataprog_indexm3u8"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/media/resources/hls/metadata/prog_index.m3u8 (0 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/resources/hls/metadata/prog_index.m3u8         (rev 0)
+++ trunk/LayoutTests/http/tests/media/resources/hls/metadata/prog_index.m3u8        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+#EXTM3U
+#EXT-X-TARGETDURATION:5
+#EXT-X-VERSION:3
+#EXT-X-MEDIA-SEQUENCE:0
+#EXT-X-PLAYLIST-TYPE:VOD
+#EXTINF:5.00000,        
+fileSequence2.ts
+#EXTINF:4.80000,        
+fileSequence3.ts
+#EXT-X-ENDLIST
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsmediatrackinbandhlsmetadataexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/media/track-in-band-hls-metadata-expected.txt (0 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/track-in-band-hls-metadata-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/media/track-in-band-hls-metadata-expected.txt        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -0,0 +1,65 @@
</span><ins>+
+Test for metadata tracks from Apple HLS stream.
+
+
+** Set video.src, wait for media data to load
+EVENT(addtrack)
+EXPECTED (tracks.length == '1') OK
+RUN(track = video.textTracks[0])
+EXPECTED (track.kind == 'metadata') OK
+EXPECTED (track.mode == 'disabled') OK
+RUN(track.mode = 'hidden')
+EVENT(canplaythrough)
+
+** Start playback, wait for all cues to load
+EVENT(cuechange)
+EVENT(cuechange)
+EVENT(cuechange)
+EVENT(cuechange)
+EVENT(cuechange)
+EVENT(cuechange)
+
+** Validate cue data
+EXPECTED (cue.type == 'org.id3') OK
+EXPECTED (cue.data == 'null') OK
+EXPECTED ('{"value":{"key":"TIT2","data":"Stream Counting"}}' == '{"value":{"key":"TIT2","data":"Stream Counting"}}') OK
+
+EXPECTED (cue.type == 'org.id3') OK
+EXPECTED (cue.data == 'null') OK
+EXPECTED ('{"value":{"key":"TPE1","data":"Andy"}}' == '{"value":{"key":"TPE1","data":"Andy"}}') OK
+
+EXPECTED (cue.type == 'org.id3') OK
+EXPECTED (cue.data == 'null') OK
+EXPECTED ('{"value":{"key":"TALB","data":"Greatest Hits"}}' == '{"value":{"key":"TALB","data":"Greatest Hits"}}') OK
+
+EXPECTED (cue.type == 'org.id3') OK
+EXPECTED (cue.data == 'null') OK
+EXPECTED ('{"value":{"data":{},"info":"Our Hero","key":"GEOB","name":"abe.png","type":"image/png"}}' == '{"value":{"data":{},"info":"Our Hero","key":"GEOB","name":"abe.png","type":"image/png"}}') OK
+
+EXPECTED (cue.type == 'org.id3') OK
+EXPECTED (cue.data == 'null') OK
+EXPECTED ('{"value":{"data":{},"key":"APIC","type":"image/png","dataType":"Movie/video screen capture"}}' == '{"value":{"data":{},"key":"APIC","type":"image/png","dataType":"Movie/video screen capture"}}') OK
+
+EXPECTED (cue.type == 'org.id3') OK
+EXPECTED (cue.data == 'null') OK
+EXPECTED ('{"value":{"key":"TXXX","data":"Text Blob"}}' == '{"value":{"key":"TXXX","data":"Text Blob"}}') OK
+
+** Extract images from cue data, validate by setting img.src
+RUN(cueImageData = track.cues[3].value.data)
+EXPECTED (cueImageData instanceof ArrayBuffer == 'true') OK
+RUN(blobUrl = URL.createObjectURL(new Blob([cueImageData], { type: 'image/png' } )))
+RUN(imageElement.src = blobUrl)
+EVENT(load)
+EXPECTED (imageElement.width == '76') OK
+EXPECTED (imageElement.height == '103') OK
+
+RUN(cueImageData = track.cues[4].value.data)
+EXPECTED (cueImageData instanceof ArrayBuffer == 'true') OK
+RUN(blobUrl = URL.createObjectURL(new Blob([cueImageData], { type: 'image/png' } )))
+RUN(imageElement.src = blobUrl)
+EVENT(load)
+EXPECTED (imageElement.width == '100') OK
+EXPECTED (imageElement.height == '100') OK
+
+END OF TEST
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsmediatrackinbandhlsmetadatahtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/media/track-in-band-hls-metadata.html (0 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/track-in-band-hls-metadata.html         (rev 0)
+++ trunk/LayoutTests/http/tests/media/track-in-band-hls-metadata.html        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -0,0 +1,103 @@
</span><ins>+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+
+ <script src=../../media-resources/video-test.js></script>
+ <script src=../../media-resources/media-file.js></script>
+
+ <script>
+ var track;
+ var cuechangeCount = 0;
+ var loadCount = 0;
+ var cueJSON = [
+ '{"value":{"key":"TIT2","data":"Stream Counting"}}',
+ '{"value":{"key":"TPE1","data":"Andy"}}',
+ '{"value":{"key":"TALB","data":"Greatest Hits"}}',
+ '{"value":{"data":{},"info":"Our Hero","key":"GEOB","name":"abe.png","type":"image/png"}}',
+ '{"value":{"data":{},"key":"APIC","type":"image/png","dataType":"Movie/video screen capture"}}',
+ '{"value":{"key":"TXXX","data":"Text Blob"}}'
+ ];
+ var imageSizes = [ [76, 103], [100, 100] ];
+
+ function addtrack(event)
+ {
+ tracks = event.target;
+ testExpected("tracks.length", "1");
+ run("track = video.textTracks[0]");
+ testExpected("track.kind", "metadata");
+ testExpected("track.mode", "disabled");
+ run("track.mode = 'hidden'");
+ track.addEventListener('cuechange', cuechange, true);
+ }
+
+ function imageLoad()
+ {
+ testExpected("imageElement.width", imageSizes[loadCount][0]);
+ testExpected("imageElement.height", imageSizes[loadCount][1]);
+ consoleWrite("");
+
+ if (++loadCount == 2) {
+ endTest();
+ return;
+ }
+
+ testImage(4);
+ }
+
+ function testImage(cueIndex)
+ {
+ run("cueImageData = track.cues[" + cueIndex + "].value.data");
+ testExpected("cueImageData instanceof ArrayBuffer", true);
+ run("blobUrl = URL.createObjectURL(new Blob([cueImageData], { type: 'image/png' } ))");
+ imageElement = document.querySelector("#photo");
+ run("imageElement.src = blobUrl");
+ }
+
+ function cuechange(event)
+ {
+ consoleWrite("EVENT(cuechange)");
+ if (++cuechangeCount != 6)
+ return;
+
+ consoleWrite("<br><i>** Validate cue data</i>");
+ track.removeEventListener("cuechange", cuechange, true);
+ video.pause();
+
+ for (var i = 0; i < 6; i++) {
+ cue = track.cues[i];
+ testExpected("cue.type", "org.id3");
+ testExpected("cue.data", null);
+ testExpected("'" + JSON.stringify(cue) + "'", cueJSON[i]);
+ consoleWrite("");
+ }
+
+ consoleWrite("<i>** Extract images from cue data, validate by setting img.src</i>");
+ imageElement = document.querySelector("#photo");
+ waitForEvent('load', imageLoad, false, false, imageElement)
+ testImage(3);
+ }
+
+ function canplaythrough()
+ {
+ consoleWrite("<br><i>** Start playback, wait for all cues to load</i>");
+ video.play();
+ }
+
+ function start()
+ {
+ consoleWrite("<br><i>** Set video.src, wait for media data to load</i>");
+ findMediaElement();
+ video.src = "http://127.0.0.1:8000/media/resources/hls/metadata/prog_index.m3u8";
+
+ waitForEvent("canplaythrough", canplaythrough);
+ waitForEvent('addtrack', addtrack, false, false, video.textTracks);
+ }
+ </script>
+ </head>
+ <body onload="start()">
+ <video controls></video>
+ <img id=photo>
+ <p>Test for metadata tracks from Apple HLS stream.</p>
+ </body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestsmediatracktrackdatacuevalueexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/media/track/track-datacue-value-expected.txt (0 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/track/track-datacue-value-expected.txt         (rev 0)
+++ trunk/LayoutTests/media/track/track-datacue-value-expected.txt        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -0,0 +1,39 @@
</span><ins>+Tests WebKitDataCue.value
+
+
+*** Initialize with string.
+RUN(cue = new WebKitDataCue(2, 6, 'test'))
+EXPECTED (cue.id == '') OK
+EXPECTED (cue.startTime == '2') OK
+EXPECTED (cue.endTime == '6') OK
+EXPECTED (cue.pauseOnExit == 'false') OK
+EXPECTED (typeof cue.value == 'string') OK
+EXPECTED (cue.value == 'test') OK
+EXPECTED (cue.data == 'null') OK
+EXPECTED (cue.type == '') OK
+
+*** Initialize with an object.
+RUN(cue = new WebKitDataCue(9, 16, { data: [1, 2, 3] }, 'org.test'))
+EXPECTED (cue.id == '') OK
+EXPECTED (cue.startTime == '9') OK
+EXPECTED (cue.endTime == '16') OK
+EXPECTED (cue.pauseOnExit == 'false') OK
+EXPECTED (typeof cue.value == 'object') OK
+EXPECTED (JSON.stringify(cue.value) == '{"data":[1,2,3]}') OK
+EXPECTED (cue.data == 'null') OK
+EXPECTED (cue.type == 'org.test') OK
+
+*** Set .value to an array.
+RUN(cue.value = [1,2,3])
+EXPECTED (JSON.stringify(cue.value) == '[1,2,3]') OK
+EXPECTED (cue.value.length == '3') OK
+EXPECTED (cue.value[0] == '1') OK
+EXPECTED (cue.value[1] == '2') OK
+EXPECTED (cue.value[2] == '3') OK
+
+*** Set .data to an ArrayBuffer, .value should return null.
+RUN(cue.data = new Uint8Array([1, 2, 3, 4, 5, 6]).buffer)
+EXPECTED (cue.value == 'null') OK
+
+END OF TEST
+
</ins></span></pre></div>
<a id="trunkLayoutTestsmediatracktrackdatacuevaluehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/media/track/track-datacue-value.html (0 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/track/track-datacue-value.html         (rev 0)
+++ trunk/LayoutTests/media/track/track-datacue-value.html        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -0,0 +1,50 @@
</span><ins>+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+
+ <script src=../media-file.js></script>
+ <script src=../video-test.js></script>
+ <script>
+ function loaded()
+ {
+ consoleWrite("<br>*** Initialize with string.");
+ run("cue = new WebKitDataCue(2, 6, 'test')");
+ testExpected("cue.id", "");
+ testExpected("cue.startTime", 2);
+ testExpected("cue.endTime", 6);
+ testExpected("cue.pauseOnExit", false);
+ testExpected("typeof cue.value", "string");
+ testExpected("cue.value", 'test');
+ testExpected("cue.data", null);
+ testExpected("cue.type", '');
+
+ consoleWrite("<br>*** Initialize with an object.");
+ run("cue = new WebKitDataCue(9, 16, { data: [1, 2, 3] }, 'org.test')");
+ testExpected("cue.id", "");
+ testExpected("cue.startTime", 9);
+ testExpected("cue.endTime", 16);
+ testExpected("cue.pauseOnExit", false);
+ testExpected("typeof cue.value", "object");
+ testExpected("JSON.stringify(cue.value)", '{"data":[1,2,3]}');
+ testExpected("cue.data", null);
+ testExpected("cue.type", 'org.test');
+
+ consoleWrite("<br>*** Set .value to an array.");
+ run("cue.value = [1,2,3]");
+ testExpected("JSON.stringify(cue.value)", JSON.stringify([1,2,3]));
+ testArraysEqual("cue.value", [1,2,3]);
+
+ consoleWrite("<br>*** Set .data to an ArrayBuffer, .value should return null.");
+ run("cue.data = new Uint8Array([1, 2, 3, 4, 5, 6]).buffer");
+ testExpected("cue.value", null);
+
+ consoleWrite("");
+ endTest();
+ }
+ </script>
+ </head>
+ <body onload="loaded()">
+ <p>Tests WebKitDataCue.value</p>
+ </body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestsplatformeflTestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/efl/TestExpectations (167631 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/efl/TestExpectations        2014-04-21 22:25:42 UTC (rev 167631)
+++ trunk/LayoutTests/platform/efl/TestExpectations        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -1398,6 +1398,10 @@
</span><span class="cx"> Bug(EFL) media/track/track-in-band-mode.html [ Skip ]
</span><span class="cx"> Bug(EFL) media/track/in-band [ Skip ]
</span><span class="cx">
</span><ins>+# DataCue.value not enabled
+Bug(EFL) http/tests/media/track-in-band-hls-metadata.html [ Skip ]
+Bug(EFL) media/track/track-datacue-value.html [ Skip ]
+
</ins><span class="cx"> # Rendering failure, also missing expected results:
</span><span class="cx"> webkit.org/b/105093 compositing/webgl/webgl-nonpremultiplied-blend.html [ Skip ]
</span><span class="cx">
</span></span></pre></div>
<a id="trunkLayoutTestsplatformgtkTestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/gtk/TestExpectations (167631 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/gtk/TestExpectations        2014-04-21 22:25:42 UTC (rev 167631)
+++ trunk/LayoutTests/platform/gtk/TestExpectations        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -339,6 +339,10 @@
</span><span class="cx"> webkit.org/b/131546 media/track/track-in-band-legacy-api.html [ Failure ]
</span><span class="cx"> webkit.org/b/131546 media/track/track-in-band-mode.html [ Skip ]
</span><span class="cx">
</span><ins>+# DataCue.value not enabled
+Bug(GTK) http/tests/media/track-in-band-hls-metadata.html [ Skip ]
+Bug(GTK) media/track/track-datacue-value.html [ Skip ]
+
</ins><span class="cx"> # Require ENABLE(CUSTOM_ELEMENTS) support
</span><span class="cx"> webkit.org/b/110735 fast/dom/custom [ Skip ]
</span><span class="cx">
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacTestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac/TestExpectations (167631 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac/TestExpectations        2014-04-21 22:25:42 UTC (rev 167631)
+++ trunk/LayoutTests/platform/mac/TestExpectations        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -1340,6 +1340,12 @@
</span><span class="cx">
</span><span class="cx"> webkit.org/b/130693 mathml/presentation/tokenElements-background-color.html [ ImageOnlyFailure ]
</span><span class="cx">
</span><ins>+# WebKitDataCue is supported, not DataCue
+media/track/track-datacue.html [ Skip ]
+
+# Mountain Lion and prior do not support HLS timed metadata
+Bug(ericcarlson) [ MountainLion ] http/tests/media/track-in-band-hls-metadata.html [ Skip ]
+
</ins><span class="cx"> # Frequently times out on EWS, which is then misreported as crash.
</span><span class="cx"> webkit.org/b/130720 [ MountainLion Release ] media/W3C/audio/canPlayType/canPlayType_application_octet_stream.html [ Pass Failure Crash Timeout ]
</span><span class="cx">
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacjsdomglobalconstructorsattributesexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac/js/dom/global-constructors-attributes-expected.txt (167631 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac/js/dom/global-constructors-attributes-expected.txt        2014-04-21 22:25:42 UTC (rev 167631)
+++ trunk/LayoutTests/platform/mac/js/dom/global-constructors-attributes-expected.txt        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -253,11 +253,6 @@
</span><span class="cx"> PASS Object.getOwnPropertyDescriptor(global, 'DOMTokenList').hasOwnProperty('set') is false
</span><span class="cx"> PASS Object.getOwnPropertyDescriptor(global, 'DOMTokenList').enumerable is false
</span><span class="cx"> PASS Object.getOwnPropertyDescriptor(global, 'DOMTokenList').configurable is true
</span><del>-PASS Object.getOwnPropertyDescriptor(global, 'DataCue').value is DataCue
-PASS Object.getOwnPropertyDescriptor(global, 'DataCue').hasOwnProperty('get') is false
-PASS Object.getOwnPropertyDescriptor(global, 'DataCue').hasOwnProperty('set') is false
-PASS Object.getOwnPropertyDescriptor(global, 'DataCue').enumerable is false
-PASS Object.getOwnPropertyDescriptor(global, 'DataCue').configurable is true
</del><span class="cx"> PASS Object.getOwnPropertyDescriptor(global, 'DataTransfer').value is DataTransfer
</span><span class="cx"> PASS Object.getOwnPropertyDescriptor(global, 'DataTransfer').hasOwnProperty('get') is false
</span><span class="cx"> PASS Object.getOwnPropertyDescriptor(global, 'DataTransfer').hasOwnProperty('set') is false
</span><span class="lines">@@ -1948,6 +1943,11 @@
</span><span class="cx"> PASS Object.getOwnPropertyDescriptor(global, 'WebKitCSSTransformValue').hasOwnProperty('set') is false
</span><span class="cx"> PASS Object.getOwnPropertyDescriptor(global, 'WebKitCSSTransformValue').enumerable is false
</span><span class="cx"> PASS Object.getOwnPropertyDescriptor(global, 'WebKitCSSTransformValue').configurable is true
</span><ins>+PASS Object.getOwnPropertyDescriptor(global, 'WebKitDataCue').value is WebKitDataCue
+PASS Object.getOwnPropertyDescriptor(global, 'WebKitDataCue').hasOwnProperty('get') is false
+PASS Object.getOwnPropertyDescriptor(global, 'WebKitDataCue').hasOwnProperty('set') is false
+PASS Object.getOwnPropertyDescriptor(global, 'WebKitDataCue').enumerable is false
+PASS Object.getOwnPropertyDescriptor(global, 'WebKitDataCue').configurable is true
</ins><span class="cx"> PASS Object.getOwnPropertyDescriptor(global, 'WebKitMediaKeyError').value is WebKitMediaKeyError
</span><span class="cx"> PASS Object.getOwnPropertyDescriptor(global, 'WebKitMediaKeyError').hasOwnProperty('get') is false
</span><span class="cx"> PASS Object.getOwnPropertyDescriptor(global, 'WebKitMediaKeyError').hasOwnProperty('set') is false
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacmountainlionjsdomglobalconstructorsattributesexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac-mountainlion/js/dom/global-constructors-attributes-expected.txt (167631 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-mountainlion/js/dom/global-constructors-attributes-expected.txt        2014-04-21 22:25:42 UTC (rev 167631)
+++ trunk/LayoutTests/platform/mac-mountainlion/js/dom/global-constructors-attributes-expected.txt        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -253,11 +253,6 @@
</span><span class="cx"> PASS Object.getOwnPropertyDescriptor(global, 'DOMTokenList').hasOwnProperty('set') is false
</span><span class="cx"> PASS Object.getOwnPropertyDescriptor(global, 'DOMTokenList').enumerable is false
</span><span class="cx"> PASS Object.getOwnPropertyDescriptor(global, 'DOMTokenList').configurable is true
</span><del>-PASS Object.getOwnPropertyDescriptor(global, 'DataCue').value is DataCue
-PASS Object.getOwnPropertyDescriptor(global, 'DataCue').hasOwnProperty('get') is false
-PASS Object.getOwnPropertyDescriptor(global, 'DataCue').hasOwnProperty('set') is false
-PASS Object.getOwnPropertyDescriptor(global, 'DataCue').enumerable is false
-PASS Object.getOwnPropertyDescriptor(global, 'DataCue').configurable is true
</del><span class="cx"> PASS Object.getOwnPropertyDescriptor(global, 'DataTransfer').value is DataTransfer
</span><span class="cx"> PASS Object.getOwnPropertyDescriptor(global, 'DataTransfer').hasOwnProperty('get') is false
</span><span class="cx"> PASS Object.getOwnPropertyDescriptor(global, 'DataTransfer').hasOwnProperty('set') is false
</span><span class="lines">@@ -1938,6 +1933,11 @@
</span><span class="cx"> PASS Object.getOwnPropertyDescriptor(global, 'WebKitCSSTransformValue').hasOwnProperty('set') is false
</span><span class="cx"> PASS Object.getOwnPropertyDescriptor(global, 'WebKitCSSTransformValue').enumerable is false
</span><span class="cx"> PASS Object.getOwnPropertyDescriptor(global, 'WebKitCSSTransformValue').configurable is true
</span><ins>+PASS Object.getOwnPropertyDescriptor(global, 'WebKitDataCue').value is WebKitDataCue
+PASS Object.getOwnPropertyDescriptor(global, 'WebKitDataCue').hasOwnProperty('get') is false
+PASS Object.getOwnPropertyDescriptor(global, 'WebKitDataCue').hasOwnProperty('set') is false
+PASS Object.getOwnPropertyDescriptor(global, 'WebKitDataCue').enumerable is false
+PASS Object.getOwnPropertyDescriptor(global, 'WebKitDataCue').configurable is true
</ins><span class="cx"> PASS Object.getOwnPropertyDescriptor(global, 'WebKitMutationObserver').value is WebKitMutationObserver
</span><span class="cx"> PASS Object.getOwnPropertyDescriptor(global, 'WebKitMutationObserver').hasOwnProperty('get') is false
</span><span class="cx"> PASS Object.getOwnPropertyDescriptor(global, 'WebKitMutationObserver').hasOwnProperty('set') is false
</span></span></pre></div>
<a id="trunkLayoutTestsplatformwinTestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/win/TestExpectations (167631 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/win/TestExpectations        2014-04-21 22:25:42 UTC (rev 167631)
+++ trunk/LayoutTests/platform/win/TestExpectations        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -2731,6 +2731,10 @@
</span><span class="cx">
</span><span class="cx"> platform/win/plugins/iframe-inside-overflow.html [ Failure ]
</span><span class="cx">
</span><ins>+# DataCue.value not enabled
+http/tests/media/track-in-band-hls-metadata.html [ Skip ]
+media/track/track-datacue-value.html [ Skip ]
+
</ins><span class="cx"> # CRASHES
</span><span class="cx"> ietestcenter/Javascript/15.2.3.3-4-18.html [ Crash ]
</span><span class="cx"> media/track/track-in-band-legacy-api.html [ Crash ]
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (167631 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2014-04-21 22:25:42 UTC (rev 167631)
+++ trunk/Source/JavaScriptCore/ChangeLog        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -1,3 +1,12 @@
</span><ins>+2014-04-21 Eric Carlson <eric.carlson@apple.com>
+
+ [Mac] implement WebKitDataCue
+ https://bugs.webkit.org/show_bug.cgi?id=131799
+
+ Reviewed by Dean Jackson.
+
+ * Configurations/FeatureDefines.xcconfig: Define ENABLE_DATACUE_VALUE.
+
</ins><span class="cx"> 2014-04-21 Filip Pizlo <fpizlo@apple.com>
</span><span class="cx">
</span><span class="cx"> Unreviewed test gardening, run the repeat-out-of-bounds tests again.
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreConfigurationsFeatureDefinesxcconfig"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/Configurations/FeatureDefines.xcconfig (167631 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/Configurations/FeatureDefines.xcconfig        2014-04-21 22:25:42 UTC (rev 167631)
+++ trunk/Source/JavaScriptCore/Configurations/FeatureDefines.xcconfig        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -209,6 +209,7 @@
</span><span class="cx"> ENABLE_USERSELECT_ALL = ENABLE_USERSELECT_ALL;
</span><span class="cx"> ENABLE_VIDEO = ENABLE_VIDEO;
</span><span class="cx"> ENABLE_VIDEO_TRACK = ENABLE_VIDEO_TRACK;
</span><ins>+ENABLE_DATACUE_VALUE = ENABLE_DATACUE_VALUE;
</ins><span class="cx"> ENABLE_VIEW_MODE_CSS_MEDIA = ;
</span><span class="cx"> ENABLE_WEBGL = ENABLE_WEBGL;
</span><span class="cx"> ENABLE_WEB_AUDIO = ENABLE_WEB_AUDIO;
</span><span class="lines">@@ -243,4 +244,4 @@
</span><span class="cx">
</span><span class="cx"> ENABLE_LLINT_C_LOOP = ;
</span><span class="cx">
</span><del>-FEATURE_DEFINES = $(ENABLE_3D_RENDERING) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCELERATED_OVERFLOW_SCROLLING) $(ENABLE_AVF_CAPTIONS) $(ENABLE_BLOB) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CANVAS_PATH) $(ENABLE_CANVAS_PROXY) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CSP_NEXT) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_EXCLUSIONS) $(ENABLE_CSS_FILTERS) $(ENABLE_CSS_GRID_LAYOUT) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_REGIONS) $(ENABLE_CSS_SHAPES) $(ENABLE_CSS_STICKY_POSITION) $(ENABLE_CSS_TRANSFORMS_ANIMATIONS_UNPREFIXED) $(ENABLE_CSS3_CONDITIONAL_RULES) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS3_TEXT_LINE_BREAK) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DATA_TRANSFER_ITEMS) $(ENABLE_DETAILS_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DOM4_EVENTS_CONSTRUCTOR) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_ENCRYPTED_MEDIA_V2) $(ENABLE_FILTERS) $(ENABLE_FONT_LOAD_EVENTS) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_HIDDEN_PAGE_DOM_TIMER_THROTTLING) $(ENABLE_HIGH_DPI_CANVAS) $(ENABLE_ICONDATABASE) $(ENABLE_IMAGE_CONTROLS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INDIE_UI) $(ENABLE_INPUT_SPEECH) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_COLOR_POPOVER) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_INSPECTOR) $(ENABLE_IOS_AIRPLAY) $(ENABLE_IOS_TEXT_AUTOSIZING) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_NOTIFICATIONS) $(ENABLE_LEGACY_VENDOR_PREFIXES) $(ENABLE_LEGACY_WEB_AUDIO) $(ENABLE_LETTERPRESS) $(ENABLE_LINK_PREFETCH) $(ENABLE_MATHML) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NOTIFICATIONS) $(ENABLE_PAGE_VISIBILITY_API) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_PLUGIN_PROXY_FOR_VIDEO) $(ENABLE_PROGRESS_ELEMENT) $(ENABLE_PROMISES) $(ENABLE_PROXIMITY_EVENTS) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REQUEST_ANIMATION_FRAME) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_SCRIPTED_SPEECH) $(ENABLE_SHARED_WORKERS) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_SQL_DATABASE) $(ENABLE_SUBPIXEL_LAYOUT) $(ENABLE_SUBTLE_CRYPTO) $(ENABLE_SVG_FONTS) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEMPLATE_ELEMENT) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_TOUCH_ICON_LOADING) $(ENABLE_USERSELECT_ALL) $(ENABLE_VIDEO) $(ENABLE_VIDEO_TRACK) $(ENABLE_VIEW_MODE_CSS_MEDIA) $(ENABLE_WEBGL) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_REPLAY) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_WEBVTT_REGIONS) $(ENABLE_XHR_TIMEOUT) $(ENABLE_XSLT) $(ENABLE_FTL_JIT) $(ENABLE_LLINT_C_LOOP) $(FEATURE_DEFINES_$(PLATFORM_NAME));
</del><ins>+FEATURE_DEFINES = $(ENABLE_3D_RENDERING) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCELERATED_OVERFLOW_SCROLLING) $(ENABLE_AVF_CAPTIONS) $(ENABLE_BLOB) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CANVAS_PATH) $(ENABLE_CANVAS_PROXY) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CSP_NEXT) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_EXCLUSIONS) $(ENABLE_CSS_FILTERS) $(ENABLE_CSS_GRID_LAYOUT) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_REGIONS) $(ENABLE_CSS_SHAPES) $(ENABLE_CSS_STICKY_POSITION) $(ENABLE_CSS_TRANSFORMS_ANIMATIONS_UNPREFIXED) $(ENABLE_CSS3_CONDITIONAL_RULES) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS3_TEXT_LINE_BREAK) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DATA_TRANSFER_ITEMS) $(ENABLE_DETAILS_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DOM4_EVENTS_CONSTRUCTOR) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_ENCRYPTED_MEDIA_V2) $(ENABLE_FILTERS) $(ENABLE_FONT_LOAD_EVENTS) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_HIDDEN_PAGE_DOM_TIMER_THROTTLING) $(ENABLE_HIGH_DPI_CANVAS) $(ENABLE_ICONDATABASE) $(ENABLE_IMAGE_CONTROLS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INDIE_UI) $(ENABLE_INPUT_SPEECH) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_COLOR_POPOVER) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_INSPECTOR) $(ENABLE_IOS_AIRPLAY) $(ENABLE_IOS_TEXT_AUTOSIZING) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_NOTIFICATIONS) $(ENABLE_LEGACY_VENDOR_PREFIXES) $(ENABLE_LEGACY_WEB_AUDIO) $(ENABLE_LETTERPRESS) $(ENABLE_LINK_PREFETCH) $(ENABLE_MATHML) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NOTIFICATIONS) $(ENABLE_PAGE_VISIBILITY_API) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_PLUGIN_PROXY_FOR_VIDEO) $(ENABLE_PROGRESS_ELEMENT) $(ENABLE_PROMISES) $(ENABLE_PROXIMITY_EVENTS) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REQUEST_ANIMATION_FRAME) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_SCRIPTED_SPEECH) $(ENABLE_SHARED_WORKERS) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_SQL_DATABASE) $(ENABLE_SUBPIXEL_LAYOUT) $(ENABLE_SUBTLE_CRYPTO) $(ENABLE_SVG_FONTS) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEMPLATE_ELEMENT) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_TOUCH_ICON_LOADING) $(ENABLE_USERSELECT_ALL) $(ENABLE_VIDEO) $(ENABLE_VIDEO_TRACK) $(ENABLE_DATACUE_VALUE) $(ENABLE_VIEW_MODE_CSS_MEDIA) $(ENABLE_WEBGL) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_REPLAY) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_WEBVTT_REGIONS) $(ENABLE_XHR_TIMEOUT) $(ENABLE_XSLT) $(ENABLE_FTL_JIT) $(ENABLE_LLINT_C_LOOP) $(FEATURE_DEFINES_$(PLATFORM_NAME));
</ins></span></pre></div>
<a id="trunkSourceWTFChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/ChangeLog (167631 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/ChangeLog        2014-04-21 22:25:42 UTC (rev 167631)
+++ trunk/Source/WTF/ChangeLog        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -1,3 +1,12 @@
</span><ins>+2014-04-21 Eric Carlson <eric.carlson@apple.com>
+
+ [Mac] implement WebKitDataCue
+ https://bugs.webkit.org/show_bug.cgi?id=131799
+
+ Reviewed by Dean Jackson.
+
+ * wtf/FeatureDefines.h: Define ENABLE_DATACUE_VALUE.
+
</ins><span class="cx"> 2014-04-21 Darin Adler <darin@apple.com>
</span><span class="cx">
</span><span class="cx"> Add HashSet::takeAny
</span></span></pre></div>
<a id="trunkSourceWTFwtfFeatureDefinesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/FeatureDefines.h (167631 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/FeatureDefines.h        2014-04-21 22:25:42 UTC (rev 167631)
+++ trunk/Source/WTF/wtf/FeatureDefines.h        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -760,6 +760,10 @@
</span><span class="cx"> #define ENABLE_VIDEO_TRACK 0
</span><span class="cx"> #endif
</span><span class="cx">
</span><ins>+#if !defined(ENABLE_DATACUE_VALUE)
+#define ENABLE_DATACUE_VALUE 0
+#endif
+
</ins><span class="cx"> #if !defined(ENABLE_VIEWPORT)
</span><span class="cx"> #define ENABLE_VIEWPORT 0
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceWebCoreCMakeListstxt"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/CMakeLists.txt (167631 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/CMakeLists.txt        2014-04-21 22:25:42 UTC (rev 167631)
+++ trunk/Source/WebCore/CMakeLists.txt        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -1025,6 +1025,7 @@
</span><span class="cx"> bindings/js/JSCallbackData.cpp
</span><span class="cx"> bindings/js/JSCanvasRenderingContext2DCustom.cpp
</span><span class="cx"> bindings/js/JSCanvasRenderingContextCustom.cpp
</span><ins>+ bindings/js/JSDataCueCustom.cpp
</ins><span class="cx"> bindings/js/JSDataTransferCustom.cpp
</span><span class="cx"> bindings/js/JSCommandLineAPIHostCustom.cpp
</span><span class="cx"> bindings/js/JSCryptoAlgorithmBuilder.cpp
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (167631 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-04-21 22:25:42 UTC (rev 167631)
+++ trunk/Source/WebCore/ChangeLog        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -1,3 +1,141 @@
</span><ins>+2014-04-21 Eric Carlson <eric.carlson@apple.com>
+
+ [Mac] implement WebKitDataCue
+ https://bugs.webkit.org/show_bug.cgi?id=131799
+
+ Reviewed by Dean Jackson.
+
+ Tests: http/tests/media/track-in-band-hls-metadata.html
+ media/track/track-datacue-value.html
+
+ * Configurations/FeatureDefines.xcconfig: Define ENABLE_DATACUE_VALUE.
+ * DerivedSources.make: Add ENABLE_DATACUE_VALUE to HTML_FLAGS when appropriate.
+
+ * CMakeLists.txt: Add JSDataCueCustom.cpp.
+ * bindings/js/JSBindingsAllInOne.cpp:
+ * WebCore.xcodeproj/project.pbxproj: Add new files.
+
+ * bindings/js/JSDataCueCustom.cpp: Added.
+ (WebCore::JSDataCue::value):
+ (WebCore::JSDataCue::setValue):
+ (WebCore::JSDataCueConstructor::constructJSDataCue): Custom constructor.
+
+ * html/HTMLMediaElement.cpp:
+ (WebCore::HTMLMediaElement::updateActiveTextTrackCues): Drive-by fixes: don't schedule timeupdate
+ events when paused, don't call sort on an Vector that can't be sorted.
+
+ * html/track/DataCue.cpp:
+ (WebCore::DataCue::DataCue): Initialize m_type.
+ (WebCore::DataCue::~DataCue): Unprotect the JSValue if necessary.
+ (WebCore::DataCue::data): Ask the platform value for data if non-null.
+ (WebCore::DataCue::setData): Clear m_platformValue and m_value.
+ (WebCore::DataCue::isEqual): New.
+ (WebCore::DataCue::value): Return a JSValue from the platform value, or the value passed
+ to the constructor/set by script.
+ (WebCore::DataCue::setValue): Set m_value.
+ * html/track/DataCue.h:
+ * html/track/DataCue.idl:
+
+ * html/track/InbandDataTextTrack.cpp:
+ (WebCore::InbandDataTextTrack::addDataCue): Don't add the same cue more than once.
+ (WebCore::InbandDataTextTrack::updateDataCue): Update a cue's duration.
+ (WebCore::InbandDataTextTrack::removeDataCue): Remove an incomplete cue.
+ (WebCore::InbandDataTextTrack::removeCue): Remove a cue from the incomplete cue map if necessary.
+ * html/track/InbandDataTextTrack.h:
+
+ * html/track/InbandGenericTextTrack.cpp:
+ (WebCore::InbandGenericTextTrack::addGenericCue): CueMatchRules is now in TextTrackCue instead
+ of VTTCue.
+ * html/track/InbandTextTrack.h:
+
+ * html/track/InbandWebVTTTextTrack.cpp:
+ (WebCore::InbandWebVTTTextTrack::newCuesParsed): Ditto.
+
+ * html/track/TextTrack.cpp:
+ (WebCore::TextTrack::hasCue): Ditto.
+ * html/track/TextTrack.h:
+
+ * html/track/TextTrackCue.cpp:
+ (WebCore::TextTrackCue::isEqual): New, test base class equality.
+ * html/track/TextTrackCue.h:
+
+ * html/track/TextTrackCueGeneric.cpp:
+ (WebCore::TextTrackCueGeneric::isEqual): Call TextTrackCue::isEqual first.
+ * html/track/TextTrackCueGeneric.h:
+
+ * html/track/VTTCue.cpp:
+ (WebCore::VTTCue::isEqual): Call TextTrackCue::isEqual first.
+ * html/track/VTTCue.h:
+
+ * platform/SerializedPlatformRepresentation.h: Added.
+ (WebCore::SerializedPlatformRepresentation::~SerializedPlatformRepresentation):
+ (WebCore::SerializedPlatformRepresentation::SerializedPlatformRepresentation):
+
+ * platform/graphics/InbandTextTrackPrivateClient.h: Add methods for DataCue with SerializedPlatformRepresentation.
+
+ * platform/graphics/avfoundation/InbandMetadataTextTrackPrivateAVF.cpp: Added.
+ (WebCore::InbandMetadataTextTrackPrivateAVF::create):
+ (WebCore::InbandMetadataTextTrackPrivateAVF::InbandMetadataTextTrackPrivateAVF):
+ (WebCore::InbandMetadataTextTrackPrivateAVF::~InbandMetadataTextTrackPrivateAVF):
+ (WebCore::InbandMetadataTextTrackPrivateAVF::addDataCue):
+ (WebCore::InbandMetadataTextTrackPrivateAVF::updatePendingCueEndTimes):
+ (WebCore::InbandMetadataTextTrackPrivateAVF::flushPartialCues):
+ * platform/graphics/avfoundation/InbandMetadataTextTrackPrivateAVF.h: Added.
+
+ * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
+ (WebCore::MediaPlayerPrivateAVFoundation::seekWithTolerance): currentTrack -> currentTextTrack.
+ (WebCore::MediaPlayerPrivateAVFoundation::seekCompleted): Ditto.
+ (WebCore::MediaPlayerPrivateAVFoundation::configureInbandTracks): Ditto.
+ * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
+ (WebCore::MediaPlayerPrivateAVFoundation::setCurrentTextTrack):
+ (WebCore::MediaPlayerPrivateAVFoundation::setCurrentTrack): Deleted.
+
+ Renamed currentTrack and setCurrentTrack to currentTextTrack and setCurrentTextTrack.
+ * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
+ (WebCore::AVFWrapper::currentTextTrack):
+ (WebCore::MediaPlayerPrivateAVFoundationCF::setCurrentTextTrack):
+ (WebCore::MediaPlayerPrivateAVFoundationCF::currentTextTrack):
+ (WebCore::AVFWrapper::setCurrentTextTrack):
+ (WebCore::AVFWrapper::AVFWrapper):
+ (WebCore::AVFWrapper::processCue):
+ (WebCore::AVFWrapper::currentTrack): Deleted.
+ (WebCore::MediaPlayerPrivateAVFoundationCF::setCurrentTrack): Deleted.
+ (WebCore::MediaPlayerPrivateAVFoundationCF::currentTrack): Deleted.
+ (WebCore::AVFWrapper::setCurrentTrack): Deleted.
+ * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.h:
+
+ * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
+ * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
+ (WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC):
+ (WebCore::MediaPlayerPrivateAVFoundationObjC::seekToTime): currentTrack -> currentTextTrack
+ (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksChanged): currentTrack -> currentTextTrack.
+ (WebCore::MediaPlayerPrivateAVFoundationObjC::processMetadataTrack): New.
+ (WebCore::MediaPlayerPrivateAVFoundationObjC::processCue): m_currentTrack -> m_currentTextTrack.
+ (WebCore::MediaPlayerPrivateAVFoundationObjC::flushCues): Ditto.
+ (WebCore::MediaPlayerPrivateAVFoundationObjC::setCurrentTextTrack): Renamed from setCurrentTextTrack.
+ (WebCore::metadataType): Map an AVFoundation metadata key space to a metadata cue type.
+ (WebCore::MediaPlayerPrivateAVFoundationObjC::metadataDidArrive): Process new metadata.
+ (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]):
+ (WebCore::MediaPlayerPrivateAVFoundationObjC::setCurrentTrack): Deleted.
+
+ Create a JSValue representation from an AVMetadataItem.
+ * platform/mac/SerializedPlatformRepresentationMac.h: Added.
+ (WebCore::SerializedPlatformRepresentationMac::platformType):
+ (WebCore::SerializedPlatformRepresentationMac::nativeValue):
+ * platform/mac/SerializedPlatformRepresentationMac.mm: Added.
+ (WebCore::SerializedPlatformRepresentationMac::SerializedPlatformRepresentationMac):
+ (WebCore::SerializedPlatformRepresentationMac::~SerializedPlatformRepresentationMac):
+ (WebCore::SerializedPlatformRepresentationMac::create):
+ (WebCore::SerializedPlatformRepresentationMac::data):
+ (WebCore::SerializedPlatformRepresentationMac::deserialize):
+ (WebCore::SerializedPlatformRepresentationMac::isEqual):
+ (WebCore::toSerializedPlatformRepresentationMac):
+ (WebCore::jsValueWithValueInContext):
+ (WebCore::jsValueWithDataInContext):
+ (WebCore::jsValueWithArrayInContext):
+ (WebCore::jsValueWithDictionaryInContext):
+ (WebCore::jsValueWithAVMetadataItemInContext):
+
</ins><span class="cx"> 2014-04-21 Benjamin Poulain <benjamin@webkit.org>
</span><span class="cx">
</span><span class="cx"> Add Element.matches, the standard name for webkitMatchesSelector
</span></span></pre></div>
<a id="trunkSourceWebCoreConfigurationsFeatureDefinesxcconfig"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Configurations/FeatureDefines.xcconfig (167631 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Configurations/FeatureDefines.xcconfig        2014-04-21 22:25:42 UTC (rev 167631)
+++ trunk/Source/WebCore/Configurations/FeatureDefines.xcconfig        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -209,6 +209,7 @@
</span><span class="cx"> ENABLE_USERSELECT_ALL = ENABLE_USERSELECT_ALL;
</span><span class="cx"> ENABLE_VIDEO = ENABLE_VIDEO;
</span><span class="cx"> ENABLE_VIDEO_TRACK = ENABLE_VIDEO_TRACK;
</span><ins>+ENABLE_DATACUE_VALUE = ENABLE_DATACUE_VALUE;
</ins><span class="cx"> ENABLE_VIEW_MODE_CSS_MEDIA = ;
</span><span class="cx"> ENABLE_WEBGL = ENABLE_WEBGL;
</span><span class="cx"> ENABLE_WEB_AUDIO = ENABLE_WEB_AUDIO;
</span><span class="lines">@@ -243,4 +244,4 @@
</span><span class="cx">
</span><span class="cx"> ENABLE_LLINT_C_LOOP = ;
</span><span class="cx">
</span><del>-FEATURE_DEFINES = $(ENABLE_3D_RENDERING) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCELERATED_OVERFLOW_SCROLLING) $(ENABLE_AVF_CAPTIONS) $(ENABLE_BLOB) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CANVAS_PATH) $(ENABLE_CANVAS_PROXY) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CSP_NEXT) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_EXCLUSIONS) $(ENABLE_CSS_FILTERS) $(ENABLE_CSS_GRID_LAYOUT) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_REGIONS) $(ENABLE_CSS_SHAPES) $(ENABLE_CSS_STICKY_POSITION) $(ENABLE_CSS_TRANSFORMS_ANIMATIONS_UNPREFIXED) $(ENABLE_CSS3_CONDITIONAL_RULES) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS3_TEXT_LINE_BREAK) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DATA_TRANSFER_ITEMS) $(ENABLE_DETAILS_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DOM4_EVENTS_CONSTRUCTOR) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_ENCRYPTED_MEDIA_V2) $(ENABLE_FILTERS) $(ENABLE_FONT_LOAD_EVENTS) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_HIDDEN_PAGE_DOM_TIMER_THROTTLING) $(ENABLE_HIGH_DPI_CANVAS) $(ENABLE_ICONDATABASE) $(ENABLE_IMAGE_CONTROLS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INDIE_UI) $(ENABLE_INPUT_SPEECH) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_COLOR_POPOVER) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_INSPECTOR) $(ENABLE_IOS_AIRPLAY) $(ENABLE_IOS_TEXT_AUTOSIZING) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_NOTIFICATIONS) $(ENABLE_LEGACY_VENDOR_PREFIXES) $(ENABLE_LEGACY_WEB_AUDIO) $(ENABLE_LETTERPRESS) $(ENABLE_LINK_PREFETCH) $(ENABLE_MATHML) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NOTIFICATIONS) $(ENABLE_PAGE_VISIBILITY_API) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_PLUGIN_PROXY_FOR_VIDEO) $(ENABLE_PROGRESS_ELEMENT) $(ENABLE_PROMISES) $(ENABLE_PROXIMITY_EVENTS) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REQUEST_ANIMATION_FRAME) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_SCRIPTED_SPEECH) $(ENABLE_SHARED_WORKERS) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_SQL_DATABASE) $(ENABLE_SUBPIXEL_LAYOUT) $(ENABLE_SUBTLE_CRYPTO) $(ENABLE_SVG_FONTS) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEMPLATE_ELEMENT) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_TOUCH_ICON_LOADING) $(ENABLE_USERSELECT_ALL) $(ENABLE_VIDEO) $(ENABLE_VIDEO_TRACK) $(ENABLE_VIEW_MODE_CSS_MEDIA) $(ENABLE_WEBGL) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_REPLAY) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_WEBVTT_REGIONS) $(ENABLE_XHR_TIMEOUT) $(ENABLE_XSLT) $(ENABLE_FTL_JIT) $(ENABLE_LLINT_C_LOOP) $(FEATURE_DEFINES_$(PLATFORM_NAME));
</del><ins>+FEATURE_DEFINES = $(ENABLE_3D_RENDERING) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCELERATED_OVERFLOW_SCROLLING) $(ENABLE_AVF_CAPTIONS) $(ENABLE_BLOB) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CANVAS_PATH) $(ENABLE_CANVAS_PROXY) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CSP_NEXT) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_EXCLUSIONS) $(ENABLE_CSS_FILTERS) $(ENABLE_CSS_GRID_LAYOUT) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_REGIONS) $(ENABLE_CSS_SHAPES) $(ENABLE_CSS_STICKY_POSITION) $(ENABLE_CSS_TRANSFORMS_ANIMATIONS_UNPREFIXED) $(ENABLE_CSS3_CONDITIONAL_RULES) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS3_TEXT_LINE_BREAK) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DATA_TRANSFER_ITEMS) $(ENABLE_DETAILS_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DOM4_EVENTS_CONSTRUCTOR) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_ENCRYPTED_MEDIA_V2) $(ENABLE_FILTERS) $(ENABLE_FONT_LOAD_EVENTS) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_HIDDEN_PAGE_DOM_TIMER_THROTTLING) $(ENABLE_HIGH_DPI_CANVAS) $(ENABLE_ICONDATABASE) $(ENABLE_IMAGE_CONTROLS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INDIE_UI) $(ENABLE_INPUT_SPEECH) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_COLOR_POPOVER) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_INSPECTOR) $(ENABLE_IOS_AIRPLAY) $(ENABLE_IOS_TEXT_AUTOSIZING) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_NOTIFICATIONS) $(ENABLE_LEGACY_VENDOR_PREFIXES) $(ENABLE_LEGACY_WEB_AUDIO) $(ENABLE_LETTERPRESS) $(ENABLE_LINK_PREFETCH) $(ENABLE_MATHML) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NOTIFICATIONS) $(ENABLE_PAGE_VISIBILITY_API) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_PLUGIN_PROXY_FOR_VIDEO) $(ENABLE_PROGRESS_ELEMENT) $(ENABLE_PROMISES) $(ENABLE_PROXIMITY_EVENTS) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REQUEST_ANIMATION_FRAME) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_SCRIPTED_SPEECH) $(ENABLE_SHARED_WORKERS) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_SQL_DATABASE) $(ENABLE_SUBPIXEL_LAYOUT) $(ENABLE_SUBTLE_CRYPTO) $(ENABLE_SVG_FONTS) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEMPLATE_ELEMENT) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_TOUCH_ICON_LOADING) $(ENABLE_USERSELECT_ALL) $(ENABLE_VIDEO) $(ENABLE_VIDEO_TRACK) $(ENABLE_DATACUE_VALUE) $(ENABLE_VIEW_MODE_CSS_MEDIA) $(ENABLE_WEBGL) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_REPLAY) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_WEBVTT_REGIONS) $(ENABLE_XHR_TIMEOUT) $(ENABLE_XSLT) $(ENABLE_FTL_JIT) $(ENABLE_LLINT_C_LOOP) $(FEATURE_DEFINES_$(PLATFORM_NAME));
</ins></span></pre></div>
<a id="trunkSourceWebCoreDerivedSourcesmake"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/DerivedSources.make (167631 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/DerivedSources.make        2014-04-21 22:25:42 UTC (rev 167631)
+++ trunk/Source/WebCore/DerivedSources.make        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -954,6 +954,10 @@
</span><span class="cx"> HTML_FLAGS := $(HTML_FLAGS) ENABLE_VIDEO_TRACK=0
</span><span class="cx"> endif
</span><span class="cx">
</span><ins>+ifeq ($(findstring ENABLE_DATACUE_VALUE,$(FEATURE_DEFINES)), ENABLE_DATACUE_VALUE)
+        HTML_FLAGS := $(HTML_FLAGS) ENABLE_DATACUE_VALUE=0
+endif
+
</ins><span class="cx"> ifeq ($(findstring ENABLE_ENCRYPTED_MEDIA,$(FEATURE_DEFINES)), ENABLE_ENCRYPTED_MEDIA)
</span><span class="cx"> HTML_FLAGS := $(HTML_FLAGS) ENABLE_ENCRYPTED_MEDIA=1
</span><span class="cx"> endif
</span></span></pre></div>
<a id="trunkSourceWebCoreWebCorexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (167631 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2014-04-21 22:25:42 UTC (rev 167631)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -195,6 +195,9 @@
</span><span class="cx">                 077664FD183E6B5C00133B92 /* JSQuickTimePluginReplacement.h in Headers */ = {isa = PBXBuildFile; fileRef = 077664FB183E6B5C00133B92 /* JSQuickTimePluginReplacement.h */; };
</span><span class="cx">                 0779BF0D18453168000B6AE7 /* HTMLMediaElementMediaStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0779BF0A18453168000B6AE7 /* HTMLMediaElementMediaStream.cpp */; };
</span><span class="cx">                 0779BF0E18453168000B6AE7 /* HTMLMediaElementMediaStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 0779BF0B18453168000B6AE7 /* HTMLMediaElementMediaStream.h */; };
</span><ins>+                077AF14018F4AE400001ED61 /* SerializedPlatformRepresentation.h in Headers */ = {isa = PBXBuildFile; fileRef = 077AF13E18F4AE400001ED61 /* SerializedPlatformRepresentation.h */; settings = {ATTRIBUTES = (Private, ); }; };
+                077AF14318F4B1BB0001ED61 /* SerializedPlatformRepresentationMac.h in Headers */ = {isa = PBXBuildFile; fileRef = 077AF14118F4B1BB0001ED61 /* SerializedPlatformRepresentationMac.h */; };
+                077AF14418F4B1BB0001ED61 /* SerializedPlatformRepresentationMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 077AF14218F4B1BB0001ED61 /* SerializedPlatformRepresentationMac.mm */; };
</ins><span class="cx">                 0783228418013ED800999E0C /* MediaStreamAudioSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0783228218013ED700999E0C /* MediaStreamAudioSource.cpp */; };
</span><span class="cx">                 0783228518013ED800999E0C /* MediaStreamAudioSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 0783228318013ED800999E0C /* MediaStreamAudioSource.h */; };
</span><span class="cx">                 07846342145B151A00A58DF1 /* JSTrackEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07846340145B151A00A58DF1 /* JSTrackEvent.cpp */; };
</span><span class="lines">@@ -342,9 +345,12 @@
</span><span class="cx">                 07DC5FD417D3EEE90099F890 /* JSRTCStatsResponseCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07DC5FD317D3EEE90099F890 /* JSRTCStatsResponseCustom.cpp */; };
</span><span class="cx">                 07E116B11489C9A100EC5ACE /* JSTextTrackCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07E116B01489C9A100EC5ACE /* JSTextTrackCustom.cpp */; };
</span><span class="cx">                 07E117071489EBEB00EC5ACE /* JSTextTrackCueCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07E117061489EBEB00EC5ACE /* JSTextTrackCueCustom.cpp */; };
</span><ins>+                07E9E12E18F5E2760011A3A4 /* InbandMetadataTextTrackPrivateAVF.h in Headers */ = {isa = PBXBuildFile; fileRef = 07E9E12D18F5E2760011A3A4 /* InbandMetadataTextTrackPrivateAVF.h */; };
+                07E9E13018F62B370011A3A4 /* InbandMetadataTextTrackPrivateAVF.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07E9E12F18F62B370011A3A4 /* InbandMetadataTextTrackPrivateAVF.cpp */; };
</ins><span class="cx">                 07ED35A216D6DCC9002248F3 /* InbandTextTrackPrivateAVFIOS.mm in Sources */ = {isa = PBXBuildFile; fileRef = 07357C7716D2DF0D00ED99E7 /* InbandTextTrackPrivateAVFIOS.mm */; };
</span><span class="cx">                 07ED35A316D6DCE2002248F3 /* InbandTextTrackPrivateAVFIOS.h in Headers */ = {isa = PBXBuildFile; fileRef = 07357C7616D2DF0D00ED99E7 /* InbandTextTrackPrivateAVFIOS.h */; };
</span><span class="cx">                 07F944161864D046005D31CB /* MediaSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = CDAE8C081746B95700532D78 /* MediaSessionManager.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><ins>+                07FBDE2C18FED178001A7CFF /* JSDataCueCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07FBDE2B18FED178001A7CFF /* JSDataCueCustom.cpp */; };
</ins><span class="cx">                 07FE99DC18807A7D00256648 /* HTMLMediaSession.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07FE99DA18807A7D00256648 /* HTMLMediaSession.cpp */; };
</span><span class="cx">                 07FE99DD18807A7D00256648 /* HTMLMediaSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 07FE99DB18807A7D00256648 /* HTMLMediaSession.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 07FFDE68181AED420072D409 /* MediaStreamTrackPrivate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07FFDE66181AED420072D409 /* MediaStreamTrackPrivate.cpp */; };
</span><span class="lines">@@ -7079,6 +7085,9 @@
</span><span class="cx">                 0779BF0A18453168000B6AE7 /* HTMLMediaElementMediaStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HTMLMediaElementMediaStream.cpp; sourceTree = "<group>"; };
</span><span class="cx">                 0779BF0B18453168000B6AE7 /* HTMLMediaElementMediaStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTMLMediaElementMediaStream.h; sourceTree = "<group>"; };
</span><span class="cx">                 0779BF0C18453168000B6AE7 /* HTMLMediaElementMediaStream.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = HTMLMediaElementMediaStream.idl; sourceTree = "<group>"; };
</span><ins>+                077AF13E18F4AE400001ED61 /* SerializedPlatformRepresentation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SerializedPlatformRepresentation.h; sourceTree = "<group>"; };
+                077AF14118F4B1BB0001ED61 /* SerializedPlatformRepresentationMac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SerializedPlatformRepresentationMac.h; sourceTree = "<group>"; };
+                077AF14218F4B1BB0001ED61 /* SerializedPlatformRepresentationMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = SerializedPlatformRepresentationMac.mm; sourceTree = "<group>"; };
</ins><span class="cx">                 0783228218013ED700999E0C /* MediaStreamAudioSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MediaStreamAudioSource.cpp; sourceTree = "<group>"; };
</span><span class="cx">                 0783228318013ED800999E0C /* MediaStreamAudioSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaStreamAudioSource.h; sourceTree = "<group>"; };
</span><span class="cx">                 07846340145B151A00A58DF1 /* JSTrackEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSTrackEvent.cpp; sourceTree = "<group>"; };
</span><span class="lines">@@ -7165,6 +7174,9 @@
</span><span class="cx">                 07DC5FD317D3EEE90099F890 /* JSRTCStatsResponseCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSRTCStatsResponseCustom.cpp; sourceTree = "<group>"; };
</span><span class="cx">                 07E116B01489C9A100EC5ACE /* JSTextTrackCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSTextTrackCustom.cpp; sourceTree = "<group>"; };
</span><span class="cx">                 07E117061489EBEB00EC5ACE /* JSTextTrackCueCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSTextTrackCueCustom.cpp; sourceTree = "<group>"; };
</span><ins>+                07E9E12D18F5E2760011A3A4 /* InbandMetadataTextTrackPrivateAVF.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InbandMetadataTextTrackPrivateAVF.h; sourceTree = "<group>"; };
+                07E9E12F18F62B370011A3A4 /* InbandMetadataTextTrackPrivateAVF.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InbandMetadataTextTrackPrivateAVF.cpp; sourceTree = "<group>"; };
+                07FBDE2B18FED178001A7CFF /* JSDataCueCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSDataCueCustom.cpp; sourceTree = "<group>"; };
</ins><span class="cx">                 07FE99DA18807A7D00256648 /* HTMLMediaSession.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HTMLMediaSession.cpp; sourceTree = "<group>"; };
</span><span class="cx">                 07FE99DB18807A7D00256648 /* HTMLMediaSession.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTMLMediaSession.h; sourceTree = "<group>"; };
</span><span class="cx">                 07FFDE66181AED420072D409 /* MediaStreamTrackPrivate.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MediaStreamTrackPrivate.cpp; sourceTree = "<group>"; };
</span><span class="lines">@@ -14309,6 +14321,8 @@
</span><span class="cx">                         children = (
</span><span class="cx">                                 DF9AFD6F13FC31B00015FEB7 /* objc */,
</span><span class="cx">                                 CDE3A85217F5FCE600C5BE20 /* AudioTrackPrivateAVF.h */,
</span><ins>+                                07E9E12D18F5E2760011A3A4 /* InbandMetadataTextTrackPrivateAVF.h */,
+                                07E9E12F18F62B370011A3A4 /* InbandMetadataTextTrackPrivateAVF.cpp */,
</ins><span class="cx">                                 07B442D4166C70B000556CAD /* InbandTextTrackPrivateAVF.cpp */,
</span><span class="cx">                                 07B442D5166C70B000556CAD /* InbandTextTrackPrivateAVF.h */,
</span><span class="cx">                                 076F0D0912B8192700C26AA4 /* MediaPlayerPrivateAVFoundation.cpp */,
</span><span class="lines">@@ -16169,6 +16183,8 @@
</span><span class="cx">                                 1AA84F03143BA7BD0051D153 /* ScrollElasticityController.h */,
</span><span class="cx">                                 1AA84F02143BA7BD0051D153 /* ScrollElasticityController.mm */,
</span><span class="cx">                                 9353676A09AED88B00D35CD6 /* ScrollViewMac.mm */,
</span><ins>+                                077AF14118F4B1BB0001ED61 /* SerializedPlatformRepresentationMac.h */,
+                                077AF14218F4B1BB0001ED61 /* SerializedPlatformRepresentationMac.mm */,
</ins><span class="cx">                                 1A4A95510B4EDCFF002D8C3C /* SharedBufferMac.mm */,
</span><span class="cx">                                 93309E9F099EB78C0056E581 /* SharedTimerMac.mm */,
</span><span class="cx">                                 0A4844980CA44CB200B7BD48 /* SoftLinking.h */,
</span><span class="lines">@@ -20528,6 +20544,7 @@
</span><span class="cx">                 BC4EDEF70C08F414007EDD49 /* Custom */ = {
</span><span class="cx">                         isa = PBXGroup;
</span><span class="cx">                         children = (
</span><ins>+                                07FBDE2B18FED178001A7CFF /* JSDataCueCustom.cpp */,
</ins><span class="cx">                                 BC2ED6BB0C6BD2F000920BFF /* JSAttrCustom.cpp */,
</span><span class="cx">                                 FDEAAAEF12B02EE400DCF33B /* JSAudioBufferSourceNodeCustom.cpp */,
</span><span class="cx">                                 FDEAAAF012B02EE400DCF33B /* JSAudioContextCustom.cpp */,
</span><span class="lines">@@ -21073,6 +21090,7 @@
</span><span class="cx">                                 BC2441C30E8B65D00055320F /* ScrollView.cpp */,
</span><span class="cx">                                 BC6D6E2509AF943500F59759 /* ScrollView.h */,
</span><span class="cx">                                 AB7170880B3118080017123E /* SearchPopupMenu.h */,
</span><ins>+                                077AF13E18F4AE400001ED61 /* SerializedPlatformRepresentation.h */,
</ins><span class="cx">                                 1A4A954B0B4EDCCB002D8C3C /* SharedBuffer.cpp */,
</span><span class="cx">                                 1A4A954C0B4EDCCB002D8C3C /* SharedBuffer.h */,
</span><span class="cx">                                 37569E0013AF172C00CDBA8E /* SharedBufferChunkReader.cpp */,
</span><span class="lines">@@ -22954,6 +22972,7 @@
</span><span class="cx">                                 FD31603E12B0267600C1A359 /* AnalyserNode.h in Headers */,
</span><span class="cx">                                 31A795C71888BCB200382F90 /* ANGLEInstancedArrays.h in Headers */,
</span><span class="cx">                                 490707E71219C04300D90E51 /* ANGLEWebKitBridge.h in Headers */,
</span><ins>+                                077AF14018F4AE400001ED61 /* SerializedPlatformRepresentation.h in Headers */,
</ins><span class="cx">                                 49E912AB0EFAC906009D0CAF /* Animation.h in Headers */,
</span><span class="cx">                                 316FE1120E6E1DA700BF6088 /* AnimationBase.h in Headers */,
</span><span class="cx">                                 316FE1140E6E1DA700BF6088 /* AnimationController.h in Headers */,
</span><span class="lines">@@ -23038,6 +23057,7 @@
</span><span class="cx">                                 29A812380FBB9C1D00510293 /* AXObjectCache.h in Headers */,
</span><span class="cx">                                 51741D0F0B07259A00ED442C /* BackForwardClient.h in Headers */,
</span><span class="cx">                                 BCA8C81E11E3D36900812FB7 /* BackForwardController.h in Headers */,
</span><ins>+                                077AF14318F4B1BB0001ED61 /* SerializedPlatformRepresentationMac.h in Headers */,
</ins><span class="cx">                                 BCA8CA6011E4E6D100812FB7 /* BackForwardList.h in Headers */,
</span><span class="cx">                                 BC124EE80C2641CD009E2349 /* BarProp.h in Headers */,
</span><span class="cx">                                 379E61CA126CA5C400B63E8D /* BaseButtonInputType.h in Headers */,
</span><span class="lines">@@ -23950,6 +23970,7 @@
</span><span class="cx">                                 B2C3DA6C0D006CD600EF6F26 /* GlyphBuffer.h in Headers */,
</span><span class="cx">                                 C5D4AA7A116BAFB60069CA93 /* GlyphMetricsMap.h in Headers */,
</span><span class="cx">                                 0873B86B136064EA00A522C2 /* GlyphPage.h in Headers */,
</span><ins>+                                07E9E12E18F5E2760011A3A4 /* InbandMetadataTextTrackPrivateAVF.h in Headers */,
</ins><span class="cx">                                 B2C3DA6E0D006CD600EF6F26 /* GlyphPageTreeNode.h in Headers */,
</span><span class="cx">                                 BC53C5F50DA56B920021EB5D /* Gradient.h in Headers */,
</span><span class="cx">                                 B22279640D00BF220071B782 /* GradientAttributes.h in Headers */,
</span><span class="lines">@@ -27527,6 +27548,7 @@
</span><span class="cx">                                 A8EA79F30A1916DF00A8EF5F /* HTMLUListElement.cpp in Sources */,
</span><span class="cx">                                 E44613AA0CD6331000FADA75 /* HTMLVideoElement.cpp in Sources */,
</span><span class="cx">                                 0B8C56D40F28627F000502E1 /* HTTPHeaderMap.cpp in Sources */,
</span><ins>+                                077AF14418F4B1BB0001ED61 /* SerializedPlatformRepresentationMac.mm in Sources */,
</ins><span class="cx">                                 514C76720CE923A1007EF3CD /* HTTPParsers.cpp in Sources */,
</span><span class="cx">                                 371A67CB11C6C7DB00047B8B /* HyphenationCF.cpp in Sources */,
</span><span class="cx">                                 97E4028F13A696ED00913D67 /* IconController.cpp in Sources */,
</span><span class="lines">@@ -27954,6 +27976,7 @@
</span><span class="cx">                                 CDA98E0416039E1A00FEA3B1 /* JSMediaKeys.cpp in Sources */,
</span><span class="cx">                                 CDA98E0616039E1F00FEA3B1 /* JSMediaKeySession.cpp in Sources */,
</span><span class="cx">                                 BC3C39B60C0D3D8D005F4D7A /* JSMediaList.cpp in Sources */,
</span><ins>+                                07E9E13018F62B370011A3A4 /* InbandMetadataTextTrackPrivateAVF.cpp in Sources */,
</ins><span class="cx">                                 D3A94A46122DC40F00A37BBC /* JSMediaQueryList.cpp in Sources */,
</span><span class="cx">                                 7C5343FC17B74B63004232F0 /* JSMediaQueryListListener.cpp in Sources */,
</span><span class="cx">                                 CD9DE17417AAC74C00EA386D /* JSMediaSource.cpp in Sources */,
</span><span class="lines">@@ -28966,6 +28989,7 @@
</span><span class="cx">                                 FEAD7D8716C339EE00D4670B /* SQLTransactionBackendSync.cpp in Sources */,
</span><span class="cx">                                 97BC6A541505F081001B74AC /* SQLTransactionClient.cpp in Sources */,
</span><span class="cx">                                 97BC6A561505F081001B74AC /* SQLTransactionCoordinator.cpp in Sources */,
</span><ins>+                                07FBDE2C18FED178001A7CFF /* JSDataCueCustom.cpp in Sources */,
</ins><span class="cx">                                 FE36FD1616C7826500F887C1 /* SQLTransactionStateMachine.cpp in Sources */,
</span><span class="cx">                                 97BC6A5A1505F081001B74AC /* SQLTransactionSync.cpp in Sources */,
</span><span class="cx">                                 1A2E6E590CC55213004A2062 /* SQLValue.cpp in Sources */,
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSBindingsAllInOnecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSBindingsAllInOne.cpp (167631 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSBindingsAllInOne.cpp        2014-04-21 22:25:42 UTC (rev 167631)
+++ trunk/Source/WebCore/bindings/js/JSBindingsAllInOne.cpp        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -61,6 +61,7 @@
</span><span class="cx"> #include "JSDOMWindowCustom.cpp"
</span><span class="cx"> #include "JSDOMWindowShell.cpp"
</span><span class="cx"> #include "JSDOMWrapper.cpp"
</span><ins>+#include "JSDataCueCustom.cpp"
</ins><span class="cx"> #include "JSDataTransferCustom.cpp"
</span><span class="cx"> #include "JSDedicatedWorkerGlobalScopeCustom.cpp"
</span><span class="cx"> #include "JSDeviceOrientationEventCustom.cpp"
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSDataCueCustomcpp"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/bindings/js/JSDataCueCustom.cpp (0 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSDataCueCustom.cpp         (rev 0)
+++ trunk/Source/WebCore/bindings/js/JSDataCueCustom.cpp        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -0,0 +1,107 @@
</span><ins>+/*
+ * Copyright (C) 2014 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+
+#if ENABLE(VIDEO_TRACK)
+#include "JSDataCue.h"
+
+using namespace JSC;
+
+namespace WebCore {
+
+#if ENABLE(DATACUE_VALUE)
+JSValue JSDataCue::value(ExecState* exec) const
+{
+ return impl().value(exec);
+}
+
+void JSDataCue::setValue(ExecState* exec, JSValue value)
+{
+ impl().setValue(exec, value);
+}
+#endif
+
+EncodedJSValue JSC_HOST_CALL JSDataCueConstructor::constructJSDataCue(ExecState* exec)
+{
+ JSDataCueConstructor* castedThis = jsCast<JSDataCueConstructor*>(exec->callee());
+ if (exec->argumentCount() < 3)
+ return throwVMError(exec, createNotEnoughArgumentsError(exec));
+
+ ExceptionCode ec = 0;
+ double startTime(exec->argument(0).toNumber(exec));
+ if (UNLIKELY(exec->hadException()))
+ return JSValue::encode(jsUndefined());
+
+ double endTime(exec->argument(1).toNumber(exec));
+ if (UNLIKELY(exec->hadException()))
+ return JSValue::encode(jsUndefined());
+
+ ScriptExecutionContext* context = castedThis->scriptExecutionContext();
+ if (!context)
+ return throwConstructorDocumentUnavailableError(*exec, "DataCue");
+
+ String type;
+#if ENABLE(DATACUE_VALUE)
+ if (exec->argumentCount() > 3) {
+ if (!exec->argument(3).isString())
+ return throwVMError(exec, createTypeError(exec, "Second argument of the constructor is not of type String"));
+ type = exec->argument(3).getString(exec);
+ }
+#endif
+
+ JSValue valueArgument = exec->argument(2);
+ if (valueArgument.isUndefinedOrNull()) {
+ setDOMException(exec, TypeError);
+ return JSValue::encode(JSValue());
+ }
+
+ RefPtr<DataCue> object;
+ if (valueArgument.isCell() && valueArgument.asCell()->inherits(std::remove_pointer<JSArrayBuffer*>::type::info())) {
+
+ ArrayBuffer* data(toArrayBuffer(valueArgument));
+ if (UNLIKELY(exec->hadException()))
+ return JSValue::encode(jsUndefined());
+
+ object = DataCue::create(*context, startTime, endTime, data, type, ec);
+ if (ec) {
+ setDOMException(exec, ec);
+ return JSValue::encode(JSValue());
+ }
+
+ return JSValue::encode(asObject(toJS(exec, castedThis->globalObject(), object.get())));
+ }
+
+#if !ENABLE(DATACUE_VALUE)
+ return JSValue::encode(jsUndefined());
+#else
+ object = DataCue::create(*context, startTime, endTime, valueArgument, type);
+ return JSValue::encode(asObject(toJS(exec, castedThis->globalObject(), object.get())));
+#endif
+}
+
+} // namespace WebCore
+
+#endif
</ins></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLMediaElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLMediaElement.cpp (167631 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLMediaElement.cpp        2014-04-21 22:25:42 UTC (rev 167631)
+++ trunk/Source/WebCore/html/HTMLMediaElement.cpp        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -1380,7 +1380,8 @@
</span><span class="cx"> // whenever ... the media element's readyState is changed back to HAVE_NOTHING.
</span><span class="cx"> if (m_readyState != HAVE_NOTHING && m_player) {
</span><span class="cx"> currentCues = m_cueTree.allOverlaps(m_cueTree.createInterval(movieTime, movieTime));
</span><del>- std::sort(currentCues.begin(), currentCues.end(), &compareCueInterval);
</del><ins>+ if (currentCues.size() > 1)
+ std::sort(currentCues.begin(), currentCues.end(), &compareCueInterval);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> CueList previousCues;
</span><span class="lines">@@ -1426,7 +1427,7 @@
</span><span class="cx"> // element. (In the other cases, such as explicit seeks, relevant events get
</span><span class="cx"> // fired as part of the overall process of changing the current playback
</span><span class="cx"> // position.)
</span><del>- if (m_lastSeekTime <= lastTime)
</del><ins>+ if (!m_paused && m_lastSeekTime <= lastTime)
</ins><span class="cx"> scheduleTimeupdateEvent(false);
</span><span class="cx">
</span><span class="cx"> // Explicitly cache vector sizes, as their content is constant from here.
</span></span></pre></div>
<a id="trunkSourceWebCorehtmltrackDataCuecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/track/DataCue.cpp (167631 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/track/DataCue.cpp        2014-04-21 22:25:42 UTC (rev 167631)
+++ trunk/Source/WebCore/html/track/DataCue.cpp        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -1,5 +1,6 @@
</span><span class="cx"> /*
</span><span class="cx"> * Copyright (C) 2014 Cable Television Labs Inc. All rights reserved.
</span><ins>+ * Copyright (C) 2014 Apple Inc. All rights reserved.
</ins><span class="cx"> *
</span><span class="cx"> * Redistribution and use in source and binary forms, with or without
</span><span class="cx"> * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -31,11 +32,13 @@
</span><span class="cx"> #include "Logging.h"
</span><span class="cx"> #include "TextTrack.h"
</span><span class="cx"> #include "TextTrackCueList.h"
</span><ins>+#include <runtime/Protect.h>
</ins><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><del>-DataCue::DataCue(ScriptExecutionContext& context, double start, double end, ArrayBuffer* data, ExceptionCode& ec)
</del><ins>+DataCue::DataCue(ScriptExecutionContext& context, double start, double end, ArrayBuffer* data, const String& type, ExceptionCode& ec)
</ins><span class="cx"> : TextTrackCue(context, start, end)
</span><ins>+ , m_type(type)
</ins><span class="cx"> {
</span><span class="cx"> setData(data, ec);
</span><span class="cx"> }
</span><span class="lines">@@ -46,29 +49,65 @@
</span><span class="cx"> m_data = ArrayBuffer::create(data, length);
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+#if ENABLE(DATACUE_VALUE)
+DataCue::DataCue(ScriptExecutionContext& context, double start, double end, PassRefPtr<SerializedPlatformRepresentation> platformValue, const String& type)
+ : TextTrackCue(context, start, end)
+ , m_type(type)
+ , m_platformValue(platformValue)
+{
+}
+
+DataCue::DataCue(ScriptExecutionContext& context, double start, double end, JSC::JSValue value, const String& type)
+ : TextTrackCue(context, start, end)
+ , m_type(type)
+ , m_value(value)
+{
+}
+#endif
+
</ins><span class="cx"> DataCue::~DataCue()
</span><span class="cx"> {
</span><ins>+#if ENABLE(DATACUE_VALUE)
+ if (m_value)
+ JSC::gcUnprotect(m_value);
+#endif
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-RefPtr<ArrayBuffer> DataCue::data() const
</del><ins>+PassRefPtr<ArrayBuffer> DataCue::data() const
</ins><span class="cx"> {
</span><del>- ASSERT_WITH_SECURITY_IMPLICATION(m_data);
</del><ins>+#if ENABLE(DATACUE_VALUE)
+ if (m_platformValue)
+ return m_platformValue->data();
+#endif
+
+ if (!m_data)
+ return nullptr;
+
</ins><span class="cx"> return ArrayBuffer::create(m_data.get());
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void DataCue::setData(ArrayBuffer* data, ExceptionCode& ec)
</span><span class="cx"> {
</span><del>- if (!data)
</del><ins>+ if (!data) {
</ins><span class="cx"> ec = TypeError;
</span><del>- else
- m_data = ArrayBuffer::create(data);
</del><ins>+ return;
+ }
+
+#if ENABLE(DATACUE_VALUE)
+ m_platformValue = nullptr;
+ m_value = JSC::JSValue();
+#endif
+
+ m_data = ArrayBuffer::create(data);
</ins><span class="cx"> }
</span><span class="cx">
</span><ins>+#if !ENABLE(DATACUE_VALUE)
</ins><span class="cx"> String DataCue::text(bool& isNull) const
</span><span class="cx"> {
</span><span class="cx"> isNull = true;
</span><span class="cx"> return String();
</span><span class="cx"> }
</span><ins>+#endif
</ins><span class="cx">
</span><span class="cx"> DataCue* toDataCue(TextTrackCue* cue)
</span><span class="cx"> {
</span><span class="lines">@@ -82,6 +121,66 @@
</span><span class="cx"> return static_cast<const DataCue*>(cue);
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+bool DataCue::isEqual(const TextTrackCue& cue, TextTrackCue::CueMatchRules match) const
+{
+ if (!TextTrackCue::isEqual(cue, match))
+ return false;
+
+ if (cue.cueType() != TextTrackCue::Data)
+ return false;
+
+ const DataCue* dataCue = toDataCue(&cue);
+ RefPtr<ArrayBuffer> otherData = dataCue->data();
+ if ((otherData && !m_data) || (!otherData && m_data))
+ return false;
+ if (m_data && m_data->byteLength() != otherData->byteLength())
+ return false;
+ if (m_data && m_data->data() && memcmp(m_data->data(), otherData->data(), m_data->byteLength()))
+ return false;
+
+#if ENABLE(DATACUE_VALUE)
+ RefPtr<SerializedPlatformRepresentation> otherPlatformValue = dataCue->platformValue();
+ if ((otherPlatformValue && !m_platformValue) || (!otherPlatformValue && m_platformValue))
+ return false;
+ if (m_platformValue && !m_platformValue->isEqual(*otherPlatformValue.get()))
+ return false;
+
+ JSC::JSValue otherValue = dataCue->value(nullptr);
+ if ((otherValue && !m_value) || (!otherValue && m_value))
+ return false;
+ if (!JSC::JSValue::strictEqual(nullptr, m_value ? m_value : JSC::JSValue(), otherValue))
+ return false;
+#endif
+
+ return true;
+}
+
+#if ENABLE(DATACUE_VALUE)
+JSC::JSValue DataCue::value(JSC::ExecState* exec) const
+{
+ if (exec && m_platformValue)
+ return m_platformValue->deserialize(exec);
+
+ if (m_value)
+ return m_value;
+
+ return JSC::jsNull();
+}
+
+void DataCue::setValue(JSC::ExecState*, JSC::JSValue value)
+{
+ // FIXME: this should use a SerializedScriptValue.
+ if (m_value)
+ JSC::gcUnprotect(m_value);
+ m_value = value;
+ if (m_value)
+ JSC::gcProtect(m_value);
+
+ m_platformValue = nullptr;
+ m_data = nullptr;
+}
+#endif
+
</ins><span class="cx"> } // namespace WebCore
</span><span class="cx">
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceWebCorehtmltrackDataCueh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/track/DataCue.h (167631 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/track/DataCue.h        2014-04-21 22:25:42 UTC (rev 167631)
+++ trunk/Source/WebCore/html/track/DataCue.h        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -1,5 +1,6 @@
</span><span class="cx"> /*
</span><span class="cx"> * Copyright (C) 2014 Cable Television Labs Inc. All rights reserved.
</span><ins>+ * Copyright (C) 2014 Apple Inc. All rights reserved.
</ins><span class="cx"> *
</span><span class="cx"> * Redistribution and use in source and binary forms, with or without
</span><span class="cx"> * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -30,8 +31,13 @@
</span><span class="cx">
</span><span class="cx"> #include "TextTrackCue.h"
</span><span class="cx"> #include <runtime/ArrayBuffer.h>
</span><ins>+#include <runtime/JSCInlines.h>
</ins><span class="cx"> #include <wtf/RefCounted.h>
</span><span class="cx">
</span><ins>+#if ENABLE(DATACUE_VALUE)
+#include "SerializedPlatformRepresentation.h"
+#endif
+
</ins><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><span class="cx"> class ScriptExecutionContext;
</span><span class="lines">@@ -40,7 +46,7 @@
</span><span class="cx"> public:
</span><span class="cx"> static PassRefPtr<DataCue> create(ScriptExecutionContext& context, double start, double end, ArrayBuffer* data, ExceptionCode& ec)
</span><span class="cx"> {
</span><del>- return adoptRef(new DataCue(context, start, end, data, ec));
</del><ins>+ return adoptRef(new DataCue(context, start, end, data, emptyString(), ec));
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> static PassRefPtr<DataCue> create(ScriptExecutionContext& context, double start, double end, const void* data, unsigned length)
</span><span class="lines">@@ -48,19 +54,58 @@
</span><span class="cx"> return adoptRef(new DataCue(context, start, end, data, length));
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+ static PassRefPtr<DataCue> create(ScriptExecutionContext& context, double start, double end, ArrayBuffer* data, const String& type, ExceptionCode& ec)
+ {
+ return adoptRef(new DataCue(context, start, end, data, type, ec));
+ }
+
+#if ENABLE(DATACUE_VALUE)
+ static PassRefPtr<DataCue> create(ScriptExecutionContext& context, double start, double end, PassRefPtr<SerializedPlatformRepresentation> platformValue, const String& type)
+ {
+ return adoptRef(new DataCue(context, start, end, platformValue, type));
+ }
+
+ static PassRefPtr<DataCue> create(ScriptExecutionContext& context, double start, double end, JSC::JSValue value, const String& type)
+ {
+ return adoptRef(new DataCue(context, start, end, value, type));
+ }
+#endif
+
</ins><span class="cx"> virtual ~DataCue();
</span><span class="cx"> virtual CueType cueType() const { return Data; }
</span><span class="cx">
</span><del>- RefPtr<ArrayBuffer> data() const;
</del><ins>+ PassRefPtr<ArrayBuffer> data() const;
</ins><span class="cx"> void setData(ArrayBuffer*, ExceptionCode&);
</span><del>- String text(bool& isNull) const;
</del><span class="cx">
</span><ins>+#if ENABLE(DATACUE_VALUE)
+ const PassRefPtr<SerializedPlatformRepresentation> platformValue() const { return m_platformValue; }
+
+ JSC::JSValue value(JSC::ExecState*) const;
+ void setValue(JSC::ExecState*, JSC::JSValue);
+
+ String type() const { return m_type; }
+ void setType(const String& type) { m_type = type; }
+#else
+ String text(bool&) const;
+#endif
+
+ virtual bool isEqual(const TextTrackCue&, CueMatchRules) const override;
+
</ins><span class="cx"> protected:
</span><del>- DataCue(ScriptExecutionContext&, double start, double end, ArrayBuffer*, ExceptionCode&);
- DataCue(ScriptExecutionContext&, double start, double end, const void* data, unsigned length);
</del><ins>+ DataCue(ScriptExecutionContext&, double start, double end, ArrayBuffer*, const String&, ExceptionCode&);
+ DataCue(ScriptExecutionContext&, double start, double end, const void*, unsigned);
+#if ENABLE(DATACUE_VALUE)
+ DataCue(ScriptExecutionContext&, double start, double end, PassRefPtr<SerializedPlatformRepresentation>, const String&);
+ DataCue(ScriptExecutionContext&, double start, double end, JSC::JSValue, const String&);
+#endif
</ins><span class="cx">
</span><span class="cx"> private:
</span><span class="cx"> RefPtr<ArrayBuffer> m_data;
</span><ins>+ String m_type;
+#if ENABLE(DATACUE_VALUE)
+ RefPtr<SerializedPlatformRepresentation> m_platformValue;
+ JSC::JSValue m_value;
+#endif
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> DataCue* toDataCue(TextTrackCue*);
</span></span></pre></div>
<a id="trunkSourceWebCorehtmltrackDataCueidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/track/DataCue.idl (167631 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/track/DataCue.idl        2014-04-21 22:25:42 UTC (rev 167631)
+++ trunk/Source/WebCore/html/track/DataCue.idl        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -1,5 +1,6 @@
</span><span class="cx"> /*
</span><span class="cx"> * Copyright (C) 2014 Cable Television Labs Inc. All rights reserved.
</span><ins>+ * Copyright (C) 2014 Apple Inc. All rights reserved.
</ins><span class="cx"> *
</span><span class="cx"> * Redistribution and use in source and binary forms, with or without
</span><span class="cx"> * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -24,10 +25,21 @@
</span><span class="cx"> */
</span><span class="cx"> [
</span><span class="cx"> Conditional=VIDEO_TRACK,
</span><del>- Constructor(double startTime, double endTime, [StrictTypeChecking] ArrayBuffer data),
- ConstructorCallWith=ScriptExecutionContext,
</del><ins>+ CustomConstructor,
+#if defined(ENABLE_DATACUE_VALUE) && ENABLE_DATACUE_VALUE
+ CustomConstructor(double startTime, double endTime, any value, optional DOMString type),
+ InterfaceName=WebKitDataCue,
+#else
+ CustomConstructor(double startTime, double endTime, ArrayBuffer data),
+#endif
</ins><span class="cx"> ConstructorRaisesException,
</span><span class="cx"> ] interface DataCue : TextTrackCue {
</span><span class="cx"> [SetterRaisesException] attribute ArrayBuffer data;
</span><ins>+
+#if defined(ENABLE_DATACUE_VALUE) && ENABLE_DATACUE_VALUE
+ [CustomGetter, CustomSetter] attribute any value;
+ readonly attribute DOMString type;
+#else
</ins><span class="cx"> readonly attribute DOMString? text;
</span><ins>+#endif
</ins><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebCorehtmltrackInbandDataTextTrackcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/track/InbandDataTextTrack.cpp (167631 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/track/InbandDataTextTrack.cpp        2014-04-21 22:25:42 UTC (rev 167631)
+++ trunk/Source/WebCore/html/track/InbandDataTextTrack.cpp        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -1,5 +1,6 @@
</span><span class="cx"> /*
</span><span class="cx"> * Copyright (C) 2014 Cable Television Labs Inc. All rights reserved.
</span><ins>+ * Copyright (C) 2014 Apple Inc. All rights reserved.
</ins><span class="cx"> *
</span><span class="cx"> * Redistribution and use in source and binary forms, with or without
</span><span class="cx"> * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -30,7 +31,9 @@
</span><span class="cx">
</span><span class="cx"> #include "DataCue.h"
</span><span class="cx"> #include "ExceptionCodePlaceholder.h"
</span><ins>+#include "HTMLMediaElement.h"
</ins><span class="cx"> #include "InbandTextTrackPrivate.h"
</span><ins>+#include "Logging.h"
</ins><span class="cx"> #include <runtime/ArrayBuffer.h>
</span><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="lines">@@ -55,6 +58,81 @@
</span><span class="cx"> addCue(cue.release(), ASSERT_NO_EXCEPTION);
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+#if ENABLE(DATACUE_VALUE)
+void InbandDataTextTrack::addDataCue(InbandTextTrackPrivate*, double start, double end, PassRefPtr<SerializedPlatformRepresentation> prpPlatformValue, const String& type)
+{
+ RefPtr<SerializedPlatformRepresentation> platformValue = prpPlatformValue;
+ if (m_incompleteCueMap.find(platformValue.get()) != m_incompleteCueMap.end())
+ return;
+
+ RefPtr<DataCue> cue = DataCue::create(*scriptExecutionContext(), start, end, platformValue, type);
+ if (hasCue(cue.get(), TextTrackCue::IgnoreDuration)) {
+ LOG(Media, "InbandDataTextTrack::addDataCue ignoring already added cue: start=%.2f, end=%.2f\n", cue->startTime(), cue->endTime());
+ return;
+ }
+
+ if (std::isinf(end) && mediaElement()) {
+ cue->setEndTime(mediaElement()->duration(), IGNORE_EXCEPTION);
+ m_incompleteCueMap.add(platformValue, cue);
+ }
+
+ addCue(cue.release(), ASSERT_NO_EXCEPTION);
+}
+
+void InbandDataTextTrack::updateDataCue(InbandTextTrackPrivate*, double start, double end, PassRefPtr<SerializedPlatformRepresentation> prpPlatformValue)
+{
+ RefPtr<SerializedPlatformRepresentation> platformValue = prpPlatformValue;
+ auto iter = m_incompleteCueMap.find(platformValue.get());
+ if (iter == m_incompleteCueMap.end())
+ return;
+
+ RefPtr<DataCue> cue = iter->value;
+ if (!cue)
+ return;
+
+ cue->willChange();
+
+ if (std::isinf(end) && mediaElement())
+ end = mediaElement()->duration();
+ else
+ m_incompleteCueMap.remove(platformValue.get());
+
+ LOG(Media, "InbandDataTextTrack::updateDataCue: was start=%.2f, end=%.2f, will be start=%.2f, end=%.2f\n", cue->startTime(), cue->endTime(), start, end);
+
+ cue->setStartTime(start, IGNORE_EXCEPTION);
+ cue->setEndTime(end, IGNORE_EXCEPTION);
+
+ cue->didChange();
+}
+
+void InbandDataTextTrack::removeDataCue(InbandTextTrackPrivate*, double, double, PassRefPtr<SerializedPlatformRepresentation> prpPlatformValue)
+{
+ RefPtr<SerializedPlatformRepresentation> platformValue = prpPlatformValue;
+ auto iter = m_incompleteCueMap.find(platformValue.get());
+ if (iter == m_incompleteCueMap.end())
+ return;
+
+ RefPtr<DataCue> cue = iter->value;
+ if (cue) {
+ LOG(Media, "InbandDataTextTrack::removeDataCue removing cue: start=%.2f, end=%.2f\n", cue->startTime(), cue->endTime());
+ removeCue(cue.get(), IGNORE_EXCEPTION);
+ }
+}
+
+void InbandDataTextTrack::removeCue(TextTrackCue* cue, ExceptionCode& ec)
+{
+ ASSERT(cue->cueType() == TextTrackCue::Data);
+
+ RefPtr<SerializedPlatformRepresentation> platformValue = toDataCue(cue)->platformValue().get();
+ auto iter = m_incompleteCueMap.find(platformValue.get());
+ if (iter != m_incompleteCueMap.end())
+ m_incompleteCueMap.remove(platformValue.get());
+
+ InbandTextTrack::removeCue(cue, ec);
+}
+
+#endif
+
</ins><span class="cx"> } // namespace WebCore
</span><span class="cx">
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceWebCorehtmltrackInbandDataTextTrackh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/track/InbandDataTextTrack.h (167631 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/track/InbandDataTextTrack.h        2014-04-21 22:25:42 UTC (rev 167631)
+++ trunk/Source/WebCore/html/track/InbandDataTextTrack.h        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -1,5 +1,6 @@
</span><span class="cx"> /*
</span><span class="cx"> * Copyright (C) 2014 Cable Television Labs Inc. All rights reserved.
</span><ins>+ * Copyright (C) 2014 Apple Inc. All rights reserved.
</ins><span class="cx"> *
</span><span class="cx"> * Redistribution and use in source and binary forms, with or without
</span><span class="cx"> * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -33,10 +34,14 @@
</span><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><ins>+class DataCue;
</ins><span class="cx"> class Document;
</span><span class="cx"> class InbandTextTrackPrivate;
</span><del>-class TextTrackCue;
</del><span class="cx">
</span><ins>+#if ENABLE(DATACUE_VALUE)
+class SerializedPlatformRepresentation;
+#endif
+
</ins><span class="cx"> class InbandDataTextTrack : public InbandTextTrack {
</span><span class="cx"> public:
</span><span class="cx"> static PassRefPtr<InbandDataTextTrack> create(ScriptExecutionContext*, TextTrackClient*, PassRefPtr<InbandTextTrackPrivate>);
</span><span class="lines">@@ -46,6 +51,15 @@
</span><span class="cx"> InbandDataTextTrack(ScriptExecutionContext*, TextTrackClient*, PassRefPtr<InbandTextTrackPrivate>);
</span><span class="cx">
</span><span class="cx"> virtual void addDataCue(InbandTextTrackPrivate*, double start, double end, const void*, unsigned) override;
</span><ins>+
+#if ENABLE(DATACUE_VALUE)
+ virtual void addDataCue(InbandTextTrackPrivate*, double start, double end, PassRefPtr<SerializedPlatformRepresentation>, const String&) override;
+ virtual void updateDataCue(InbandTextTrackPrivate*, double start, double end, PassRefPtr<SerializedPlatformRepresentation>) override;
+ virtual void removeDataCue(InbandTextTrackPrivate*, double start, double end, PassRefPtr<SerializedPlatformRepresentation>) override;
+ virtual void removeCue(TextTrackCue*, ExceptionCode&) override;
+
+ HashMap<RefPtr<SerializedPlatformRepresentation>, RefPtr<DataCue>> m_incompleteCueMap;
+#endif
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCorehtmltrackInbandGenericTextTrackcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/track/InbandGenericTextTrack.cpp (167631 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/track/InbandGenericTextTrack.cpp        2014-04-21 22:25:42 UTC (rev 167631)
+++ trunk/Source/WebCore/html/track/InbandGenericTextTrack.cpp        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -151,7 +151,7 @@
</span><span class="cx">
</span><span class="cx"> RefPtr<TextTrackCueGeneric> cue = TextTrackCueGeneric::create(*scriptExecutionContext(), cueData->startTime(), cueData->endTime(), cueData->content());
</span><span class="cx"> updateCueFromCueData(cue.get(), cueData.get());
</span><del>- if (hasCue(cue.get(), VTTCue::IgnoreDuration)) {
</del><ins>+ if (hasCue(cue.get(), TextTrackCue::IgnoreDuration)) {
</ins><span class="cx"> LOG(Media, "InbandGenericTextTrack::addGenericCue ignoring already added cue: start=%.2f, end=%.2f, content=\"%s\"\n", cueData->startTime(), cueData->endTime(), cueData->content().utf8().data());
</span><span class="cx"> return;
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorehtmltrackInbandTextTrackh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/track/InbandTextTrack.h (167631 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/track/InbandTextTrack.h        2014-04-21 22:25:42 UTC (rev 167631)
+++ trunk/Source/WebCore/html/track/InbandTextTrack.h        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -71,6 +71,12 @@
</span><span class="cx">
</span><span class="cx"> virtual void addDataCue(InbandTextTrackPrivate*, double, double, const void*, unsigned) override { ASSERT_NOT_REACHED(); }
</span><span class="cx">
</span><ins>+#if ENABLE(DATACUE_VALUE)
+ virtual void addDataCue(InbandTextTrackPrivate*, double, double, PassRefPtr<SerializedPlatformRepresentation>, const String&) override { ASSERT_NOT_REACHED(); }
+ virtual void updateDataCue(InbandTextTrackPrivate*, double, double, PassRefPtr<SerializedPlatformRepresentation>) override { ASSERT_NOT_REACHED(); }
+ virtual void removeDataCue(InbandTextTrackPrivate*, double, double, PassRefPtr<SerializedPlatformRepresentation>) override { ASSERT_NOT_REACHED(); }
+#endif
+
</ins><span class="cx"> virtual void addGenericCue(InbandTextTrackPrivate*, PassRefPtr<GenericCueData>) override { ASSERT_NOT_REACHED(); }
</span><span class="cx"> virtual void updateGenericCue(InbandTextTrackPrivate*, GenericCueData*) override { ASSERT_NOT_REACHED(); }
</span><span class="cx"> virtual void removeGenericCue(InbandTextTrackPrivate*, GenericCueData*) override { ASSERT_NOT_REACHED(); }
</span></span></pre></div>
<a id="trunkSourceWebCorehtmltrackInbandWebVTTTextTrackcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/track/InbandWebVTTTextTrack.cpp (167631 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/track/InbandWebVTTTextTrack.cpp        2014-04-21 22:25:42 UTC (rev 167631)
+++ trunk/Source/WebCore/html/track/InbandWebVTTTextTrack.cpp        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -68,7 +68,7 @@
</span><span class="cx"> cue->setId(cueData->id());
</span><span class="cx"> cue->setCueSettings(cueData->settings());
</span><span class="cx">
</span><del>- if (hasCue(cue.get(), VTTCue::IgnoreDuration)) {
</del><ins>+ if (hasCue(cue.get(), TextTrackCue::IgnoreDuration)) {
</ins><span class="cx"> LOG(Media, "InbandWebVTTTextTrack::newCuesParsed ignoring already added cue: start=%.2f, end=%.2f, content=\"%s\"\n", cueData->startTime(), cueData->endTime(), cueData->content().utf8().data());
</span><span class="cx"> return;
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorehtmltrackTextTrackcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/track/TextTrack.cpp (167631 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/track/TextTrack.cpp        2014-04-21 22:25:42 UTC (rev 167631)
+++ trunk/Source/WebCore/html/track/TextTrack.cpp        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -483,7 +483,7 @@
</span><span class="cx"> return m_renderedTrackIndex;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-bool TextTrack::hasCue(VTTCue* cue, VTTCue::CueMatchRules match)
</del><ins>+bool TextTrack::hasCue(TextTrackCue* cue, TextTrackCue::CueMatchRules match)
</ins><span class="cx"> {
</span><span class="cx"> if (cue->startTime() < 0 || cue->endTime() < 0)
</span><span class="cx"> return false;
</span><span class="lines">@@ -519,13 +519,10 @@
</span><span class="cx"> return false;
</span><span class="cx">
</span><span class="cx"> existingCue = m_cues->item(searchStart - 1);
</span><del>- if (!cue->isRenderable())
- continue;
-
</del><span class="cx"> if (!existingCue || cue->startTime() > existingCue->startTime())
</span><span class="cx"> return false;
</span><span class="cx">
</span><del>- if (!toVTTCue(existingCue)->isEqual(*cue, match))
</del><ins>+ if (!existingCue->isEqual(*cue, match))
</ins><span class="cx"> continue;
</span><span class="cx">
</span><span class="cx"> return true;
</span><span class="lines">@@ -534,7 +531,7 @@
</span><span class="cx">
</span><span class="cx"> size_t index = (searchStart + searchEnd) / 2;
</span><span class="cx"> existingCue = m_cues->item(index);
</span><del>- if (cue->startTime() < existingCue->startTime() || (match != VTTCue::IgnoreDuration && cue->startTime() == existingCue->startTime() && cue->endTime() > existingCue->endTime()))
</del><ins>+ if (cue->startTime() < existingCue->startTime() || (match != TextTrackCue::IgnoreDuration && cue->startTime() == existingCue->startTime() && cue->endTime() > existingCue->endTime()))
</ins><span class="cx"> searchEnd = index;
</span><span class="cx"> else
</span><span class="cx"> searchStart = index + 1;
</span></span></pre></div>
<a id="trunkSourceWebCorehtmltrackTextTrackh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/track/TextTrack.h (167631 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/track/TextTrack.h        2014-04-21 22:25:42 UTC (rev 167631)
+++ trunk/Source/WebCore/html/track/TextTrack.h        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -112,7 +112,7 @@
</span><span class="cx"> void addCue(PassRefPtr<TextTrackCue>, ExceptionCode&);
</span><span class="cx"> virtual void removeCue(TextTrackCue*, ExceptionCode&);
</span><span class="cx">
</span><del>- bool hasCue(VTTCue*, VTTCue::CueMatchRules = VTTCue::MatchAllFields);
</del><ins>+ bool hasCue(TextTrackCue*, TextTrackCue::CueMatchRules = TextTrackCue::MatchAllFields);
</ins><span class="cx">
</span><span class="cx"> #if ENABLE(VIDEO_TRACK) && ENABLE(WEBVTT_REGIONS)
</span><span class="cx"> VTTRegionList* regions();
</span></span></pre></div>
<a id="trunkSourceWebCorehtmltrackTextTrackCuecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/track/TextTrackCue.cpp (167631 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/track/TextTrackCue.cpp        2014-04-21 22:25:42 UTC (rev 167631)
+++ trunk/Source/WebCore/html/track/TextTrackCue.cpp        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -202,6 +202,21 @@
</span><span class="cx"> return startTime() < other->startTime() || (startTime() == other->startTime() && endTime() > other->endTime());
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+bool TextTrackCue::isEqual(const TextTrackCue& cue, TextTrackCue::CueMatchRules match) const
+{
+ if (cueType() != cue.cueType())
+ return false;
+
+ if (match != IgnoreDuration && endTime() != cue.endTime())
+ return false;
+ if (startTime() != cue.startTime())
+ return false;
+ if (id() != cue.id())
+ return false;
+
+ return true;
+}
+
</ins><span class="cx"> } // namespace WebCore
</span><span class="cx">
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceWebCorehtmltrackTextTrackCueh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/track/TextTrackCue.h (167631 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/track/TextTrackCue.h        2014-04-21 22:25:42 UTC (rev 167631)
+++ trunk/Source/WebCore/html/track/TextTrackCue.h        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -91,6 +91,12 @@
</span><span class="cx"> virtual CueType cueType() const = 0;
</span><span class="cx"> virtual bool isRenderable() const { return false; }
</span><span class="cx">
</span><ins>+ enum CueMatchRules {
+ MatchAllFields,
+ IgnoreDuration,
+ };
+ virtual bool isEqual(const TextTrackCue&, CueMatchRules) const;
+
</ins><span class="cx"> void willChange();
</span><span class="cx"> virtual void didChange();
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCorehtmltrackTextTrackCueGenericcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/track/TextTrackCueGeneric.cpp (167631 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/track/TextTrackCueGeneric.cpp        2014-04-21 22:25:42 UTC (rev 167631)
+++ trunk/Source/WebCore/html/track/TextTrackCueGeneric.cpp        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -151,8 +151,11 @@
</span><span class="cx"> LOG(Media, "TextTrackCueGeneric::setFontSize - setting cue font size to %li", lround(size));
</span><span class="cx"> }
</span><span class="cx">
</span><del>-bool TextTrackCueGeneric::isEqual(const VTTCue& cue, VTTCue::CueMatchRules match) const
</del><ins>+bool TextTrackCueGeneric::isEqual(const TextTrackCue& cue, TextTrackCue::CueMatchRules match) const
</ins><span class="cx"> {
</span><ins>+ if (!TextTrackCue::isEqual(cue, match))
+ return false;
+
</ins><span class="cx"> if (cue.cueType() != TextTrackCue::Generic)
</span><span class="cx"> return false;
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCorehtmltrackTextTrackCueGenerich"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/track/TextTrackCueGeneric.h (167631 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/track/TextTrackCueGeneric.h        2014-04-21 22:25:42 UTC (rev 167631)
+++ trunk/Source/WebCore/html/track/TextTrackCueGeneric.h        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -72,7 +72,7 @@
</span><span class="cx">
</span><span class="cx"> virtual void setFontSize(int, const IntSize&, bool important) override;
</span><span class="cx">
</span><del>- virtual bool isEqual(const VTTCue&, CueMatchRules) const override;
</del><ins>+ virtual bool isEqual(const TextTrackCue&, CueMatchRules) const override;
</ins><span class="cx">
</span><span class="cx"> virtual TextTrackCue::CueType cueType() const override { return TextTrackCue::Generic; }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCorehtmltrackVTTCuecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/track/VTTCue.cpp (167631 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/track/VTTCue.cpp        2014-04-21 22:25:42 UTC (rev 167631)
+++ trunk/Source/WebCore/html/track/VTTCue.cpp        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -1062,29 +1062,27 @@
</span><span class="cx"> return m_displayPosition;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-bool VTTCue::isEqual(const VTTCue& cue, CueMatchRules match) const
</del><ins>+bool VTTCue::isEqual(const TextTrackCue& cue, TextTrackCue::CueMatchRules match) const
</ins><span class="cx"> {
</span><del>- if (cueType() != cue.cueType())
</del><ins>+ if (!TextTrackCue::isEqual(cue, match))
</ins><span class="cx"> return false;
</span><del>-
- if (match != IgnoreDuration && endTime() != cue.endTime())
</del><ins>+
+ if (cue.cueType() != WebVTT)
</ins><span class="cx"> return false;
</span><del>- if (startTime() != cue.startTime())
</del><ins>+
+ const VTTCue* vttCue = toVTTCue(&cue);
+ if (text() != vttCue->text())
</ins><span class="cx"> return false;
</span><del>- if (text() != cue.text())
</del><ins>+ if (cueSettings() != vttCue->cueSettings())
</ins><span class="cx"> return false;
</span><del>- if (cueSettings() != cue.cueSettings())
</del><ins>+ if (position() != vttCue->position())
</ins><span class="cx"> return false;
</span><del>- if (id() != cue.id())
</del><ins>+ if (line() != vttCue->line())
</ins><span class="cx"> return false;
</span><del>- if (position() != cue.position())
</del><ins>+ if (size() != vttCue->size())
</ins><span class="cx"> return false;
</span><del>- if (line() != cue.line())
</del><ins>+ if (align() != vttCue->align())
</ins><span class="cx"> return false;
</span><del>- if (size() != cue.size())
- return false;
- if (align() != cue.align())
- return false;
</del><span class="cx">
</span><span class="cx"> return true;
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorehtmltrackVTTCueh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/track/VTTCue.h (167631 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/track/VTTCue.h        2014-04-21 22:25:42 UTC (rev 167631)
+++ trunk/Source/WebCore/html/track/VTTCue.h        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -153,11 +153,7 @@
</span><span class="cx">
</span><span class="cx"> virtual void setFontSize(int, const IntSize&, bool important);
</span><span class="cx">
</span><del>- enum CueMatchRules {
- MatchAllFields,
- IgnoreDuration,
- };
- virtual bool isEqual(const VTTCue&, CueMatchRules) const;
</del><ins>+ virtual bool isEqual(const TextTrackCue&, CueMatchRules) const override;
</ins><span class="cx">
</span><span class="cx"> virtual CueType cueType() const { return WebVTT; }
</span><span class="cx"> virtual bool isRenderable() const override final { return true; }
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformSerializedPlatformRepresentationh"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/platform/SerializedPlatformRepresentation.h (0 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/SerializedPlatformRepresentation.h         (rev 0)
+++ trunk/Source/WebCore/platform/SerializedPlatformRepresentation.h        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -0,0 +1,58 @@
</span><ins>+/*
+ * Copyright (C) 2014 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef SerializedPlatformRepresentation_h
+#define SerializedPlatformRepresentation_h
+
+#if ENABLE(VIDEO) && ENABLE(DATACUE_VALUE)
+
+#include <runtime/JSCInlines.h>
+#include <wtf/PassRefPtr.h>
+#include <wtf/RefCounted.h>
+
+namespace WebCore {
+
+class SerializedPlatformRepresentation : public RefCounted<SerializedPlatformRepresentation> {
+public:
+ virtual ~SerializedPlatformRepresentation() { }
+
+ virtual JSC::JSValue deserialize(JSC::ExecState*) const = 0;
+ virtual PassRefPtr<ArrayBuffer> data() const = 0;
+ virtual bool isEqual(const SerializedPlatformRepresentation&) const = 0;
+
+ enum PlatformType {
+ ObjC,
+ };
+ virtual PlatformType platformType() const = 0;
+
+protected:
+ SerializedPlatformRepresentation() { }
+};
+
+} // namespace WebCore
+
+#endif
+#endif // SerializedPlatformRepresentation_h
+
</ins></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsInbandTextTrackPrivateClienth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/InbandTextTrackPrivateClient.h (167631 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/InbandTextTrackPrivateClient.h        2014-04-21 22:25:42 UTC (rev 167631)
+++ trunk/Source/WebCore/platform/graphics/InbandTextTrackPrivateClient.h        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -29,6 +29,10 @@
</span><span class="cx"> #include "Color.h"
</span><span class="cx"> #include "TrackPrivateBase.h"
</span><span class="cx">
</span><ins>+#if ENABLE(DATACUE_VALUE)
+#include "SerializedPlatformRepresentation.h"
+#endif
+
</ins><span class="cx"> #if ENABLE(VIDEO_TRACK)
</span><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="lines">@@ -128,14 +132,18 @@
</span><span class="cx"> Status m_status;
</span><span class="cx"> };
</span><span class="cx">
</span><del>-class WebVTTCueData;
-
</del><span class="cx"> class InbandTextTrackPrivateClient : public TrackPrivateBaseClient {
</span><span class="cx"> public:
</span><span class="cx"> virtual ~InbandTextTrackPrivateClient() { }
</span><span class="cx">
</span><span class="cx"> virtual void addDataCue(InbandTextTrackPrivate*, double start, double end, const void*, unsigned) = 0;
</span><span class="cx">
</span><ins>+#if ENABLE(DATACUE_VALUE)
+ virtual void addDataCue(InbandTextTrackPrivate*, double start, double end, PassRefPtr<SerializedPlatformRepresentation>, const String&) = 0;
+ virtual void updateDataCue(InbandTextTrackPrivate*, double start, double end, PassRefPtr<SerializedPlatformRepresentation>) = 0;
+ virtual void removeDataCue(InbandTextTrackPrivate*, double start, double end, PassRefPtr<SerializedPlatformRepresentation>) = 0;
+#endif
+
</ins><span class="cx"> virtual void addGenericCue(InbandTextTrackPrivate*, PassRefPtr<GenericCueData>) = 0;
</span><span class="cx"> virtual void updateGenericCue(InbandTextTrackPrivate*, GenericCueData*) = 0;
</span><span class="cx"> virtual void removeGenericCue(InbandTextTrackPrivate*, GenericCueData*) = 0;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsavfoundationInbandMetadataTextTrackPrivateAVFcpp"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/platform/graphics/avfoundation/InbandMetadataTextTrackPrivateAVF.cpp (0 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/avfoundation/InbandMetadataTextTrackPrivateAVF.cpp         (rev 0)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/InbandMetadataTextTrackPrivateAVF.cpp        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -0,0 +1,107 @@
</span><ins>+/*
+ * Copyright (C) 2014 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+
+#if ENABLE(VIDEO) && ENABLE(DATACUE_VALUE) && (USE(AVFOUNDATION) || PLATFORM(IOS))
+#include "InbandMetadataTextTrackPrivateAVF.h"
+
+#include "InbandTextTrackPrivateClient.h"
+#include "Logging.h"
+#include <CoreMedia/CoreMedia.h>
+#include <wtf/PassOwnPtr.h>
+#include <wtf/text/CString.h>
+#include <wtf/text/WTFString.h>
+#include <wtf/unicode/CharacterNames.h>
+
+namespace WebCore {
+
+PassRefPtr<InbandMetadataTextTrackPrivateAVF> InbandMetadataTextTrackPrivateAVF::create(InbandTextTrackPrivate::Kind kind, InbandTextTrackPrivate::CueFormat cueFormat, const AtomicString& id)
+{
+ return adoptRef(new InbandMetadataTextTrackPrivateAVF(kind, cueFormat, id));
+}
+
+InbandMetadataTextTrackPrivateAVF::InbandMetadataTextTrackPrivateAVF(InbandTextTrackPrivate::Kind kind, InbandTextTrackPrivate::CueFormat cueFormat, const AtomicString& id)
+ : InbandTextTrackPrivate(cueFormat)
+ , m_kind(kind)
+ , m_id(id)
+ , m_currentCueStartTime(0)
+{
+}
+
+InbandMetadataTextTrackPrivateAVF::~InbandMetadataTextTrackPrivateAVF()
+{
+}
+
+#if ENABLE(DATACUE_VALUE)
+void InbandMetadataTextTrackPrivateAVF::addDataCue(double start, double end, PassRefPtr<SerializedPlatformRepresentation> prpCueData, const String& type)
+{
+ ASSERT(cueFormat() == Data);
+ if (!client())
+ return;
+
+ RefPtr<SerializedPlatformRepresentation> cueData = prpCueData;
+ m_currentCueStartTime = start;
+ if (end == std::numeric_limits<double>::infinity())
+ m_incompleteCues.append(new IncompleteMetaDataCue(start, cueData));
+ client()->addDataCue(this, start, end, cueData, type);
+}
+
+void InbandMetadataTextTrackPrivateAVF::updatePendingCueEndTimes(double time)
+{
+ if (time >= m_currentCueStartTime) {
+ for (size_t i = 0; i < m_incompleteCues.size(); i++) {
+ IncompleteMetaDataCue* partialCue = m_incompleteCues[i];
+
+ LOG(Media, "InbandMetadataTextTrackPrivateAVF::addDataCue(%p) - updating cue: start=%.2f, end=%.2f", this, partialCue->startTime(), time);
+ client()->updateDataCue(this, partialCue->startTime(), time, partialCue->cueData());
+ }
+ } else
+ LOG(Media, "InbandMetadataTextTrackPrivateAVF::addDataCue negative length cue(s) ignored: start=%.2f, end=%.2f\n", m_currentCueStartTime, time);
+
+ m_incompleteCues.resize(0);
+ m_currentCueStartTime = 0;
+}
+#endif
+
+void InbandMetadataTextTrackPrivateAVF::flushPartialCues()
+{
+ if (m_currentCueStartTime && m_incompleteCues.size())
+ LOG(Media, "InbandMetadataTextTrackPrivateAVF::resetCueValues flushing incomplete data for cues: start=%.2f\n", m_currentCueStartTime);
+
+ if (client()) {
+ for (size_t i = 0; i < m_incompleteCues.size(); i++) {
+ IncompleteMetaDataCue* partialCue = m_incompleteCues[i];
+ client()->removeDataCue(this, partialCue->startTime(), std::numeric_limits<double>::infinity(), partialCue->cueData());
+ }
+ }
+
+ m_incompleteCues.resize(0);
+ m_currentCueStartTime = 0;
+}
+
+} // namespace WebCore
+
+#endif // ENABLE(VIDEO) && (USE(AVFOUNDATION) || PLATFORM(IOS))
</ins></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsavfoundationInbandMetadataTextTrackPrivateAVFh"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/platform/graphics/avfoundation/InbandMetadataTextTrackPrivateAVF.h (0 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/avfoundation/InbandMetadataTextTrackPrivateAVF.h         (rev 0)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/InbandMetadataTextTrackPrivateAVF.h        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -0,0 +1,88 @@
</span><ins>+/*
+ * Copyright (C) 2014 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef InbandMetadataTextTrackPrivateAVF_h
+#define InbandMetadataTextTrackPrivateAVF_h
+
+#if ENABLE(VIDEO) && USE(AVFOUNDATION)
+#include "InbandTextTrackPrivate.h"
+
+namespace WebCore {
+
+#if ENABLE(DATACUE_VALUE)
+class IncompleteMetaDataCue {
+public:
+ IncompleteMetaDataCue(double time, PassRefPtr<SerializedPlatformRepresentation> cueData)
+ : m_cueData(cueData)
+ , m_startTime(time)
+ {
+ }
+ ~IncompleteMetaDataCue() { }
+
+ RefPtr<SerializedPlatformRepresentation> cueData() const { return m_cueData; }
+ double startTime() const { return m_startTime; }
+
+private:
+ RefPtr<SerializedPlatformRepresentation> m_cueData;
+ double m_startTime;
+};
+#endif
+
+class InbandMetadataTextTrackPrivateAVF : public InbandTextTrackPrivate {
+public:
+ static PassRefPtr<InbandMetadataTextTrackPrivateAVF> create(Kind, CueFormat, const AtomicString& id = emptyAtom);
+
+ ~InbandMetadataTextTrackPrivateAVF();
+
+ virtual Kind kind() const override { return m_kind; }
+ virtual AtomicString id() const override { return m_id; }
+ virtual AtomicString inBandMetadataTrackDispatchType() const override { return m_inBandMetadataTrackDispatchType; }
+ void setInBandMetadataTrackDispatchType(const AtomicString& value) { m_inBandMetadataTrackDispatchType = value; }
+
+#if ENABLE(DATACUE_VALUE)
+ void addDataCue(double start, double end, PassRefPtr<SerializedPlatformRepresentation>, const String&);
+ void updatePendingCueEndTimes(double);
+#endif
+
+ void flushPartialCues();
+
+private:
+ InbandMetadataTextTrackPrivateAVF(Kind, CueFormat, const AtomicString&);
+
+ Kind m_kind;
+ AtomicString m_id;
+ AtomicString m_inBandMetadataTrackDispatchType;
+ double m_currentCueStartTime;
+#if ENABLE(DATACUE_VALUE)
+ Vector<IncompleteMetaDataCue*> m_incompleteCues;
+#endif
+};
+
+} // namespace WebCore
+
+#endif // ENABLE(VIDEO) && USE(AVFOUNDATION)
+
+#endif // InbandMetadataTextTrackPrivateAVF_h
</ins></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsavfoundationMediaPlayerPrivateAVFoundationcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp (167631 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp        2014-04-21 22:25:42 UTC (rev 167631)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -281,9 +281,9 @@
</span><span class="cx"> if (currentTime() == time)
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- if (currentTrack())
- currentTrack()->beginSeeking();
-
</del><ins>+ if (currentTextTrack())
+ currentTextTrack()->beginSeeking();
+
</ins><span class="cx"> LOG(Media, "MediaPlayerPrivateAVFoundation::seek(%p) - seeking to %f", this, time);
</span><span class="cx">
</span><span class="cx"> seekToTime(time, negativeTolerance, positiveTolerance);
</span><span class="lines">@@ -659,8 +659,8 @@
</span><span class="cx"> return;
</span><span class="cx"> }
</span><span class="cx">
</span><del>- if (currentTrack())
- currentTrack()->endSeeking();
</del><ins>+ if (currentTextTrack())
+ currentTextTrack()->endSeeking();
</ins><span class="cx">
</span><span class="cx"> updateStates();
</span><span class="cx"> m_player->timeChanged();
</span><span class="lines">@@ -929,7 +929,7 @@
</span><span class="cx"> trackToEnable = track;
</span><span class="cx"> }
</span><span class="cx">
</span><del>- setCurrentTrack(trackToEnable.get());
</del><ins>+ setCurrentTextTrack(trackToEnable.get());
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void MediaPlayerPrivateAVFoundation::trackModeChanged()
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsavfoundationMediaPlayerPrivateAVFoundationh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h (167631 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h        2014-04-21 22:25:42 UTC (rev 167631)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -39,6 +39,7 @@
</span><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><ins>+class InbandMetadataTextTrackPrivateAVF;
</ins><span class="cx"> class InbandTextTrackPrivateAVF;
</span><span class="cx"> class GenericCueData;
</span><span class="cx">
</span><span class="lines">@@ -57,8 +58,8 @@
</span><span class="cx"> virtual void didEnd();
</span><span class="cx"> virtual void contentsNeedsDisplay() { }
</span><span class="cx"> virtual void configureInbandTracks();
</span><del>- virtual void setCurrentTrack(InbandTextTrackPrivateAVF*) { }
- virtual InbandTextTrackPrivateAVF* currentTrack() const = 0;
</del><ins>+ virtual void setCurrentTextTrack(InbandTextTrackPrivateAVF*) { }
+ virtual InbandTextTrackPrivateAVF* currentTextTrack() const = 0;
</ins><span class="cx"> #if ENABLE(IOS_AIRPLAY)
</span><span class="cx"> void playbackTargetIsWirelessChanged();
</span><span class="cx"> #endif
</span><span class="lines">@@ -301,7 +302,7 @@
</span><span class="cx"> void processNewAndRemovedTextTracks(const Vector<RefPtr<InbandTextTrackPrivateAVF>>&);
</span><span class="cx"> void clearTextTracks();
</span><span class="cx"> Vector<RefPtr<InbandTextTrackPrivateAVF>> m_textTracks;
</span><del>-
</del><ins>+
</ins><span class="cx"> private:
</span><span class="cx"> MediaPlayer* m_player;
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsavfoundationcfMediaPlayerPrivateAVFoundationCFcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp (167631 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp        2014-04-21 22:25:42 UTC (rev 167631)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -110,8 +110,8 @@
</span><span class="cx"> void seekToTime(double, double, double);
</span><span class="cx"> void updateVideoLayerGravity();
</span><span class="cx">
</span><del>- void setCurrentTrack(InbandTextTrackPrivateAVF*);
- InbandTextTrackPrivateAVF* currentTrack() const { return m_currentTrack; }
</del><ins>+ void setCurrentTextTrack(InbandTextTrackPrivateAVF*);
+ InbandTextTrackPrivateAVF* currentTextTrack() const { return m_currentTextTrack; }
</ins><span class="cx">
</span><span class="cx"> #if HAVE(AVFOUNDATION_MEDIA_SELECTION_GROUP) && HAVE(AVFOUNDATION_LEGIBLE_OUTPUT_SUPPORT)
</span><span class="cx"> static void legibleOutputCallback(void* context, AVCFPlayerItemLegibleOutputRef, CFArrayRef attributedString, CFArrayRef nativeSampleBuffers, CMTime itemTime);
</span><span class="lines">@@ -170,7 +170,7 @@
</span><span class="cx"> OwnPtr<LayerClient> m_layerClient;
</span><span class="cx"> COMPtr<IDirect3DDevice9Ex> m_d3dDevice;
</span><span class="cx">
</span><del>- InbandTextTrackPrivateAVF* m_currentTrack;
</del><ins>+ InbandTextTrackPrivateAVF* m_currentTextTrack;
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> uintptr_t AVFWrapper::s_nextAVFWrapperObjectID;
</span><span class="lines">@@ -392,16 +392,16 @@
</span><span class="cx"> return (m_videoFrameHasDrawn || (videoLayer(m_avfWrapper) && AVCFPlayerLayerIsReadyForDisplay(videoLayer(m_avfWrapper))));
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void MediaPlayerPrivateAVFoundationCF::setCurrentTrack(InbandTextTrackPrivateAVF* track)
</del><ins>+void MediaPlayerPrivateAVFoundationCF::setCurrentTextTrack(InbandTextTrackPrivateAVF* track)
</ins><span class="cx"> {
</span><span class="cx"> if (m_avfWrapper)
</span><del>- m_avfWrapper->setCurrentTrack(track);
</del><ins>+ m_avfWrapper->setCurrentTextTrack(track);
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-InbandTextTrackPrivateAVF* MediaPlayerPrivateAVFoundationCF::currentTrack() const
</del><ins>+InbandTextTrackPrivateAVF* MediaPlayerPrivateAVFoundationCF::currentTextTrack() const
</ins><span class="cx"> {
</span><span class="cx"> if (m_avfWrapper)
</span><del>- return m_avfWrapper->currentTrack();
</del><ins>+ return m_avfWrapper->currentTextTrack();
</ins><span class="cx">
</span><span class="cx"> return 0;
</span><span class="cx"> }
</span><span class="lines">@@ -1102,14 +1102,14 @@
</span><span class="cx">
</span><span class="cx"> #endif // HAVE(AVFOUNDATION_MEDIA_SELECTION_GROUP)
</span><span class="cx">
</span><del>-void AVFWrapper::setCurrentTrack(InbandTextTrackPrivateAVF* track)
</del><ins>+void AVFWrapper::setCurrentTextTrack(InbandTextTrackPrivateAVF* track)
</ins><span class="cx"> {
</span><del>- if (m_currentTrack == track)
</del><ins>+ if (m_currentTextTrack == track)
</ins><span class="cx"> return;
</span><span class="cx">
</span><del>- LOG(Media, "MediaPlayerPrivateAVFoundationCF::setCurrentTrack(%p) - selecting track %p, language = %s", this, track, track ? track->language().string().utf8().data() : "");
</del><ins>+ LOG(Media, "MediaPlayerPrivateAVFoundationCF::setCurrentTextTrack(%p) - selecting track %p, language = %s", this, track, track ? track->language().string().utf8().data() : "");
</ins><span class="cx">
</span><del>- m_currentTrack = track;
</del><ins>+ m_currentTextTrack = track;
</ins><span class="cx">
</span><span class="cx"> if (track) {
</span><span class="cx"> if (track->textTrackCategory() == InbandTextTrackPrivateAVF::LegacyClosedCaption)
</span><span class="lines">@@ -1187,7 +1187,7 @@
</span><span class="cx"> AVFWrapper::AVFWrapper(MediaPlayerPrivateAVFoundationCF* owner)
</span><span class="cx"> : m_owner(owner)
</span><span class="cx"> , m_objectID(s_nextAVFWrapperObjectID++)
</span><del>- , m_currentTrack(0)
</del><ins>+ , m_currentTextTrack(0)
</ins><span class="cx"> {
</span><span class="cx"> ASSERT(isMainThread());
</span><span class="cx"> ASSERT(dispatch_get_main_queue() == dispatch_get_current_queue());
</span><span class="lines">@@ -1621,10 +1621,10 @@
</span><span class="cx"> return;
</span><span class="cx"> }
</span><span class="cx">
</span><del>- if (!self->m_currentTrack)
</del><ins>+ if (!self->m_currentTextTrack)
</ins><span class="cx"> return;
</span><span class="cx">
</span><del>- self->m_currentTrack->processCue(legibleOutputData->m_attributedStrings.get(), legibleOutputData->m_time);
</del><ins>+ self->m_currentTextTrack->processCue(legibleOutputData->m_attributedStrings.get(), legibleOutputData->m_time);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void AVFWrapper::legibleOutputCallback(void* context, AVCFPlayerItemLegibleOutputRef legibleOutput, CFArrayRef attributedStrings, CFArrayRef /*nativeSampleBuffers*/, CMTime itemTime)
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsavfoundationcfMediaPlayerPrivateAVFoundationCFh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.h (167631 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.h        2014-04-21 22:25:42 UTC (rev 167631)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.h        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -108,8 +108,8 @@
</span><span class="cx"> void processMediaSelectionOptions();
</span><span class="cx"> #endif
</span><span class="cx">
</span><del>- virtual void setCurrentTrack(InbandTextTrackPrivateAVF*) override;
- virtual InbandTextTrackPrivateAVF* currentTrack() const override;
</del><ins>+ virtual void setCurrentTextTrack(InbandTextTrackPrivateAVF*) override;
+ virtual InbandTextTrackPrivateAVF* currentTextTrack() const override;
</ins><span class="cx">
</span><span class="cx"> #if !HAVE(AVFOUNDATION_LEGIBLE_OUTPUT_SUPPORT)
</span><span class="cx"> void processLegacyClosedCaptionsTracks();
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsavfoundationobjcMediaPlayerPrivateAVFoundationObjCh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h (167631 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h        2014-04-21 22:25:42 UTC (rev 167631)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -60,6 +60,7 @@
</span><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><span class="cx"> class WebCoreAVFResourceLoader;
</span><ins>+class InbandMetadataTextTrackPrivateAVF;
</ins><span class="cx"> class InbandTextTrackPrivateAVFObjC;
</span><span class="cx"> class AudioTrackPrivateAVFObjC;
</span><span class="cx"> class VideoTrackPrivateAVFObjC;
</span><span class="lines">@@ -108,7 +109,7 @@
</span><span class="cx"> void presentationSizeDidChange(FloatSize);
</span><span class="cx"> void durationDidChange(double);
</span><span class="cx"> void rateDidChange(double);
</span><del>- void metadataDidArrive(RetainPtr<NSArray>);
</del><ins>+ void metadataDidArrive(RetainPtr<NSArray>, double);
</ins><span class="cx">
</span><span class="cx"> #if HAVE(AVFOUNDATION_VIDEO_OUTPUT)
</span><span class="cx"> void outputMediaDataWillChange(AVPlayerItemVideoOutput*);
</span><span class="lines">@@ -235,9 +236,13 @@
</span><span class="cx"> AVMediaSelectionGroup* safeMediaSelectionGroupForLegibleMedia();
</span><span class="cx"> #endif
</span><span class="cx">
</span><del>- virtual void setCurrentTrack(InbandTextTrackPrivateAVF*) override;
- virtual InbandTextTrackPrivateAVF* currentTrack() const override { return m_currentTrack; }
</del><ins>+#if ENABLE(DATACUE_VALUE)
+ void processMetadataTrack();
+#endif
</ins><span class="cx">
</span><ins>+ virtual void setCurrentTextTrack(InbandTextTrackPrivateAVF*) override;
+ virtual InbandTextTrackPrivateAVF* currentTextTrack() const override { return m_currentTextTrack; }
+
</ins><span class="cx"> #if !HAVE(AVFOUNDATION_LEGIBLE_OUTPUT_SUPPORT)
</span><span class="cx"> void processLegacyClosedCaptionsTracks();
</span><span class="cx"> #endif
</span><span class="lines">@@ -302,8 +307,12 @@
</span><span class="cx"> Vector<RefPtr<VideoTrackPrivateAVFObjC>> m_videoTracks;
</span><span class="cx"> #endif
</span><span class="cx">
</span><del>- InbandTextTrackPrivateAVF* m_currentTrack;
</del><ins>+ InbandTextTrackPrivateAVF* m_currentTextTrack;
</ins><span class="cx">
</span><ins>+#if ENABLE(DATACUE_VALUE)
+ RefPtr<InbandMetadataTextTrackPrivateAVF> m_metadataTrack;
+#endif
+
</ins><span class="cx"> mutable RetainPtr<NSArray> m_cachedSeekableRanges;
</span><span class="cx"> mutable RetainPtr<NSArray> m_cachedLoadedRanges;
</span><span class="cx"> RetainPtr<NSArray> m_cachedTracks;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsavfoundationobjcMediaPlayerPrivateAVFoundationObjCmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm (167631 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm        2014-04-21 22:25:42 UTC (rev 167631)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -26,7 +26,6 @@
</span><span class="cx"> #import "config.h"
</span><span class="cx">
</span><span class="cx"> #if ENABLE(VIDEO) && USE(AVFOUNDATION)
</span><del>-
</del><span class="cx"> #import "MediaPlayerPrivateAVFoundationObjC.h"
</span><span class="cx">
</span><span class="cx"> #import "AVTrackPrivateAVFObjCImpl.h"
</span><span class="lines">@@ -40,6 +39,7 @@
</span><span class="cx"> #import "FrameView.h"
</span><span class="cx"> #import "GraphicsContext.h"
</span><span class="cx"> #import "GraphicsContextCG.h"
</span><ins>+#import "InbandMetadataTextTrackPrivateAVF.h"
</ins><span class="cx"> #import "InbandTextTrackPrivateAVFObjC.h"
</span><span class="cx"> #import "InbandTextTrackPrivateLegacyAVFObjC.h"
</span><span class="cx"> #import "OutOfBandTextTrackPrivateAVF.h"
</span><span class="lines">@@ -47,6 +47,7 @@
</span><span class="cx"> #import "Logging.h"
</span><span class="cx"> #import "PlatformTimeRanges.h"
</span><span class="cx"> #import "SecurityOrigin.h"
</span><ins>+#import "SerializedPlatformRepresentationMac.h"
</ins><span class="cx"> #import "SoftLinking.h"
</span><span class="cx"> #import "TextTrackRepresentation.h"
</span><span class="cx"> #import "UUID.h"
</span><span class="lines">@@ -62,6 +63,7 @@
</span><span class="cx"> #import <runtime/Uint8Array.h>
</span><span class="cx"> #import <wtf/CurrentTime.h>
</span><span class="cx"> #import <wtf/Functional.h>
</span><ins>+#import <wtf/NeverDestroyed.h>
</ins><span class="cx"> #import <wtf/text/CString.h>
</span><span class="cx"> #import <wtf/text/StringBuilder.h>
</span><span class="cx">
</span><span class="lines">@@ -98,6 +100,7 @@
</span><span class="cx"> @end
</span><span class="cx"> #endif
</span><span class="cx">
</span><ins>+typedef AVPlayerItem AVPlayerItemType;
</ins><span class="cx"> typedef AVMetadataItem AVMetadataItemType;
</span><span class="cx">
</span><span class="cx"> SOFT_LINK_FRAMEWORK_OPTIONAL(AVFoundation)
</span><span class="lines">@@ -144,6 +147,7 @@
</span><span class="cx"> SOFT_LINK_POINTER(AVFoundation, AVMediaTypeClosedCaption, NSString *)
</span><span class="cx"> SOFT_LINK_POINTER(AVFoundation, AVMediaTypeVideo, NSString *)
</span><span class="cx"> SOFT_LINK_POINTER(AVFoundation, AVMediaTypeAudio, NSString *)
</span><ins>+SOFT_LINK_POINTER(AVFoundation, AVMediaTypeMetadata, NSString *)
</ins><span class="cx"> SOFT_LINK_POINTER(AVFoundation, AVPlayerItemDidPlayToEndTimeNotification, NSString *)
</span><span class="cx"> SOFT_LINK_POINTER(AVFoundation, AVURLAssetInheritURIQueryComponentFromReferencingURIKey, NSString *)
</span><span class="cx"> SOFT_LINK_POINTER(AVFoundation, AVAssetImageGeneratorApertureModeCleanAperture, NSString *)
</span><span class="lines">@@ -167,6 +171,7 @@
</span><span class="cx"> #define AVMediaTypeClosedCaption getAVMediaTypeClosedCaption()
</span><span class="cx"> #define AVMediaTypeVideo getAVMediaTypeVideo()
</span><span class="cx"> #define AVMediaTypeAudio getAVMediaTypeAudio()
</span><ins>+#define AVMediaTypeMetadata getAVMediaTypeMetadata()
</ins><span class="cx"> #define AVPlayerItemDidPlayToEndTimeNotification getAVPlayerItemDidPlayToEndTimeNotification()
</span><span class="cx"> #define AVURLAssetInheritURIQueryComponentFromReferencingURIKey getAVURLAssetInheritURIQueryComponentFromReferencingURIKey()
</span><span class="cx"> #define AVAssetImageGeneratorApertureModeCleanAperture getAVAssetImageGeneratorApertureModeCleanAperture()
</span><span class="lines">@@ -220,6 +225,20 @@
</span><span class="cx"> #define AVMediaCharacteristicTranscribesSpokenDialogForAccessibility getAVMediaCharacteristicTranscribesSpokenDialogForAccessibility()
</span><span class="cx"> #endif
</span><span class="cx">
</span><ins>+#if ENABLE(DATACUE_VALUE)
+SOFT_LINK_POINTER(AVFoundation, AVMetadataKeySpaceQuickTimeUserData, NSString*)
+SOFT_LINK_POINTER(AVFoundation, AVMetadataKeySpaceISOUserData, NSString*)
+SOFT_LINK_POINTER(AVFoundation, AVMetadataKeySpaceQuickTimeMetadata, NSString*)
+SOFT_LINK_POINTER(AVFoundation, AVMetadataKeySpaceiTunes, NSString*)
+SOFT_LINK_POINTER(AVFoundation, AVMetadataKeySpaceID3, NSString*)
+
+#define AVMetadataKeySpaceQuickTimeUserData getAVMetadataKeySpaceQuickTimeUserData()
+#define AVMetadataKeySpaceISOUserData getAVMetadataKeySpaceISOUserData()
+#define AVMetadataKeySpaceQuickTimeMetadata getAVMetadataKeySpaceQuickTimeMetadata()
+#define AVMetadataKeySpaceiTunes getAVMetadataKeySpaceiTunes()
+#define AVMetadataKeySpaceID3 getAVMetadataKeySpaceID3()
+#endif
+
</ins><span class="cx"> #define kCMTimeZero getkCMTimeZero()
</span><span class="cx">
</span><span class="cx"> using namespace WebCore;
</span><span class="lines">@@ -343,7 +362,7 @@
</span><span class="cx"> #if HAVE(AVFOUNDATION_LOADER_DELEGATE)
</span><span class="cx"> , m_loaderDelegate(adoptNS([[WebCoreAVFLoaderDelegate alloc] initWithCallback:this]))
</span><span class="cx"> #endif
</span><del>- , m_currentTrack(0)
</del><ins>+ , m_currentTextTrack(0)
</ins><span class="cx"> , m_cachedDuration(MediaPlayer::invalidTime())
</span><span class="cx"> , m_cachedRate(0)
</span><span class="cx"> , m_pendingStatusChanges(0)
</span><span class="lines">@@ -967,6 +986,9 @@
</span><span class="cx"> // setCurrentTime generates several event callbacks, update afterwards.
</span><span class="cx"> setDelayCallbacks(true);
</span><span class="cx">
</span><ins>+ if (m_metadataTrack)
+ m_metadataTrack->flushPartialCues();
+
</ins><span class="cx"> CMTime cmTime = CMTimeMakeWithSeconds(time, 600);
</span><span class="cx"> CMTime cmBefore = CMTimeMakeWithSeconds(negativeTolerance, 600);
</span><span class="cx"> CMTime cmAfter = CMTimeMakeWithSeconds(positiveTolerance, 600);
</span><span class="lines">@@ -1417,25 +1439,33 @@
</span><span class="cx"> } else {
</span><span class="cx"> bool hasVideo = false;
</span><span class="cx"> bool hasAudio = false;
</span><ins>+ bool hasMetaData = false;
</ins><span class="cx"> for (AVPlayerItemTrack *track in m_cachedTracks.get()) {
</span><span class="cx"> if ([track isEnabled]) {
</span><span class="cx"> AVAssetTrack *assetTrack = [track assetTrack];
</span><del>- if ([[assetTrack mediaType] isEqualToString:AVMediaTypeVideo])
</del><ins>+ NSString *mediaType = [assetTrack mediaType];
+ if ([mediaType isEqualToString:AVMediaTypeVideo])
</ins><span class="cx"> hasVideo = true;
</span><del>- else if ([[assetTrack mediaType] isEqualToString:AVMediaTypeAudio])
</del><ins>+ else if ([mediaType isEqualToString:AVMediaTypeAudio])
</ins><span class="cx"> hasAudio = true;
</span><del>- else if ([[assetTrack mediaType] isEqualToString:AVMediaTypeClosedCaption]) {
</del><ins>+ else if ([mediaType isEqualToString:AVMediaTypeClosedCaption]) {
</ins><span class="cx"> #if !HAVE(AVFOUNDATION_MEDIA_SELECTION_GROUP)
</span><span class="cx"> hasCaptions = true;
</span><span class="cx"> #endif
</span><span class="cx"> haveCCTrack = true;
</span><ins>+ } else if ([mediaType isEqualToString:AVMediaTypeMetadata]) {
+ hasMetaData = true;
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx"> }
</span><ins>+
</ins><span class="cx"> setHasVideo(hasVideo);
</span><span class="cx"> setHasAudio(hasAudio);
</span><ins>+#if ENABLE(DATACUE_VALUE)
+ if (hasMetaData)
+ processMetadataTrack();
+#endif
</ins><span class="cx">
</span><del>-
</del><span class="cx"> #if ENABLE(VIDEO_TRACK)
</span><span class="cx"> updateAudioTracks();
</span><span class="cx"> updateVideoTracks();
</span><span class="lines">@@ -2017,33 +2047,43 @@
</span><span class="cx"> processNewAndRemovedTextTracks(removedTextTracks);
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+void MediaPlayerPrivateAVFoundationObjC::processMetadataTrack()
+{
+ if (m_metadataTrack)
+ return;
+
+ m_metadataTrack = InbandMetadataTextTrackPrivateAVF::create(InbandTextTrackPrivate::Metadata, InbandTextTrackPrivate::Data);
+ m_metadataTrack->setInBandMetadataTrackDispatchType("com.apple.streaming");
+ player()->addTextTrack(m_metadataTrack);
+}
+
</ins><span class="cx"> void MediaPlayerPrivateAVFoundationObjC::processCue(NSArray *attributedStrings, double time)
</span><span class="cx"> {
</span><del>- if (!m_currentTrack)
</del><ins>+ if (!m_currentTextTrack)
</ins><span class="cx"> return;
</span><span class="cx">
</span><del>- m_currentTrack->processCue(reinterpret_cast<CFArrayRef>(attributedStrings), time);
</del><ins>+ m_currentTextTrack->processCue(reinterpret_cast<CFArrayRef>(attributedStrings), time);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void MediaPlayerPrivateAVFoundationObjC::flushCues()
</span><span class="cx"> {
</span><span class="cx"> LOG(Media, "MediaPlayerPrivateAVFoundationObjC::flushCues(%p)", this);
</span><span class="cx">
</span><del>- if (!m_currentTrack)
</del><ins>+ if (!m_currentTextTrack)
</ins><span class="cx"> return;
</span><span class="cx">
</span><del>- m_currentTrack->resetCueValues();
</del><ins>+ m_currentTextTrack->resetCueValues();
</ins><span class="cx"> }
</span><span class="cx"> #endif // HAVE(AVFOUNDATION_MEDIA_SELECTION_GROUP)
</span><span class="cx">
</span><del>-void MediaPlayerPrivateAVFoundationObjC::setCurrentTrack(InbandTextTrackPrivateAVF *track)
</del><ins>+void MediaPlayerPrivateAVFoundationObjC::setCurrentTextTrack(InbandTextTrackPrivateAVF *track)
</ins><span class="cx"> {
</span><del>- if (m_currentTrack == track)
</del><ins>+ if (m_currentTextTrack == track)
</ins><span class="cx"> return;
</span><span class="cx">
</span><del>- LOG(Media, "MediaPlayerPrivateAVFoundationObjC::setCurrentTrack(%p) - selecting track %p, language = %s", this, track, track ? track->language().string().utf8().data() : "");
</del><ins>+ LOG(Media, "MediaPlayerPrivateAVFoundationObjC::setCurrentTextTrack(%p) - selecting track %p, language = %s", this, track, track ? track->language().string().utf8().data() : "");
</ins><span class="cx">
</span><del>- m_currentTrack = track;
</del><ins>+ m_currentTextTrack = track;
</ins><span class="cx">
</span><span class="cx"> if (track) {
</span><span class="cx"> if (track->textTrackCategory() == InbandTextTrackPrivateAVF::LegacyClosedCaption)
</span><span class="lines">@@ -2234,12 +2274,70 @@
</span><span class="cx"> updateStates();
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void MediaPlayerPrivateAVFoundationObjC::metadataDidArrive(RetainPtr<NSArray> metadata)
</del><ins>+#if ENABLE(DATACUE_VALUE)
+static const AtomicString& metadataType(NSString *avMetadataKeySpace)
</ins><span class="cx"> {
</span><del>- if (!metadata || [metadata isKindOfClass:[NSNull class]])
</del><ins>+ static NeverDestroyed<const AtomicString> quickTimeUserData("com.apple.quicktime.udta", AtomicString::ConstructFromLiteral);
+ static NeverDestroyed<const AtomicString> isoUserData("org.mp4ra", AtomicString::ConstructFromLiteral);
+ static NeverDestroyed<const AtomicString> quickTimeMetadata("com.apple.quicktime.mdta", AtomicString::ConstructFromLiteral);
+ static NeverDestroyed<const AtomicString> iTunesMetadata("com.apple.itunes", AtomicString::ConstructFromLiteral);
+ static NeverDestroyed<const AtomicString> id3Metadata("org.id3", AtomicString::ConstructFromLiteral);
+
+ if ([avMetadataKeySpace isEqualToString:AVMetadataKeySpaceQuickTimeUserData])
+ return quickTimeUserData;
+ if ([avMetadataKeySpace isEqualToString:AVMetadataKeySpaceISOUserData])
+ return isoUserData;
+ if ([avMetadataKeySpace isEqualToString:AVMetadataKeySpaceQuickTimeMetadata])
+ return quickTimeMetadata;
+ if ([avMetadataKeySpace isEqualToString:AVMetadataKeySpaceiTunes])
+ return iTunesMetadata;
+ if ([avMetadataKeySpace isEqualToString:AVMetadataKeySpaceID3])
+ return id3Metadata;
+
+ return emptyAtom;
+}
+#endif
+
+void MediaPlayerPrivateAVFoundationObjC::metadataDidArrive(RetainPtr<NSArray> metadata, double mediaTime)
+{
+ m_currentMetaData = metadata && ![metadata isKindOfClass:[NSNull class]] ? metadata : nil;
+
+ LOG(Media, "MediaPlayerPrivateAVFoundationObjC::metadataDidArrive(%p) - adding %i cues at time %.2f", this, m_currentMetaData ? [m_currentMetaData.get() count] : 0, mediaTime);
+
+#if ENABLE(DATACUE_VALUE)
+ if (seeking())
</ins><span class="cx"> return;
</span><span class="cx">
</span><del>- m_currentMetaData = metadata;
</del><ins>+ if (!metadata || [metadata isKindOfClass:[NSNull class]]) {
+ m_metadataTrack->updatePendingCueEndTimes(mediaTime);
+ return;
+ }
+
+ if (!m_metadataTrack)
+ processMetadataTrack();
+
+ // Set the duration of all incomplete cues before adding new ones.
+ double earliesStartTime = std::numeric_limits<double>::infinity();
+ for (AVMetadataItemType *item in m_currentMetaData.get()) {
+ double start = CMTimeGetSeconds(item.time);
+ if (start < earliesStartTime)
+ earliesStartTime = start;
+ }
+ m_metadataTrack->updatePendingCueEndTimes(earliesStartTime);
+
+ for (AVMetadataItemType *item in m_currentMetaData.get()) {
+ double start = CMTimeGetSeconds(item.time);
+ double end = std::numeric_limits<double>::infinity();
+ if (CMTIME_IS_VALID(item.duration))
+ end = start + CMTimeGetSeconds(item.duration);
+
+ AtomicString type = nullAtom;
+ if (item.keySpace)
+ type = metadataType(item.keySpace);
+
+ m_metadataTrack->addDataCue(start, end, SerializedPlatformRepresentationMac::create(item), type);
+ }
+#endif
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void MediaPlayerPrivateAVFoundationObjC::tracksDidChange(RetainPtr<NSArray> tracks)
</span><span class="lines">@@ -2408,8 +2506,13 @@
</span><span class="cx"> function = WTF::bind(&MediaPlayerPrivateAVFoundationObjC::presentationSizeDidChange, m_callback, FloatSize([newValue sizeValue]));
</span><span class="cx"> else if ([keyPath isEqualToString:@"duration"])
</span><span class="cx"> function = WTF::bind(&MediaPlayerPrivateAVFoundationObjC::durationDidChange, m_callback, CMTimeGetSeconds([newValue CMTimeValue]));
</span><del>- else if ([keyPath isEqualToString:@"timedMetadata"] && newValue)
- function = WTF::bind(&MediaPlayerPrivateAVFoundationObjC::metadataDidArrive, m_callback, RetainPtr<NSArray>(newValue));
</del><ins>+ else if ([keyPath isEqualToString:@"timedMetadata"] && newValue) {
+ double now = 0;
+ CMTime itemTime = [(AVPlayerItemType *)object currentTime];
+ if (CMTIME_IS_NUMERIC(itemTime))
+ now = std::max(narrowPrecisionToFloat(CMTimeGetSeconds(itemTime)), 0.0f);
+ function = WTF::bind(&MediaPlayerPrivateAVFoundationObjC::metadataDidArrive, m_callback, RetainPtr<NSArray>(newValue), now);
+ }
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> if (context == MediaPlayerAVFoundationObservationContextPlayer && !willChange) {
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformmacSerializedPlatformRepresentationMach"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/platform/mac/SerializedPlatformRepresentationMac.h (0 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/mac/SerializedPlatformRepresentationMac.h         (rev 0)
+++ trunk/Source/WebCore/platform/mac/SerializedPlatformRepresentationMac.h        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -0,0 +1,65 @@
</span><ins>+/*
+ * Copyright (C) 2014 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef SerializedPlatformRepresentationMac_h
+#define SerializedPlatformRepresentationMac_h
+
+#if ENABLE(VIDEO_TRACK) && ENABLE(DATACUE_VALUE)
+
+#include "SerializedPlatformRepresentation.h"
+
+#if USE(FOUNDATION) && !defined(__OBJC__)
+typedef struct objc_object *id;
+#endif
+
+namespace WebCore {
+
+class SerializedPlatformRepresentationMac : public SerializedPlatformRepresentation {
+public:
+ virtual ~SerializedPlatformRepresentationMac();
+ static PassRef<SerializedPlatformRepresentation> create(id);
+
+ virtual JSC::JSValue deserialize(JSC::ExecState*) const override;
+ virtual PassRefPtr<ArrayBuffer> data() const override;
+
+ virtual bool isEqual(const SerializedPlatformRepresentation&) const override;
+
+ virtual PlatformType platformType() const { return SerializedPlatformRepresentation::ObjC; }
+
+ id nativeValue() const { return m_nativeValue.get(); }
+
+private:
+ SerializedPlatformRepresentationMac(id nativeValue);
+
+ RetainPtr<id> m_nativeValue;
+};
+
+SerializedPlatformRepresentationMac* toSerializedPlatformRepresentationMac(SerializedPlatformRepresentation*);
+const SerializedPlatformRepresentationMac* toSerializedPlatformRepresentationMac(const SerializedPlatformRepresentation*);
+
+} // namespace WebCore
+
+#endif
+#endif // SerializedPlatformRepresentationMac_h
</ins></span></pre></div>
<a id="trunkSourceWebCoreplatformmacSerializedPlatformRepresentationMacmm"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/platform/mac/SerializedPlatformRepresentationMac.mm (0 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/mac/SerializedPlatformRepresentationMac.mm         (rev 0)
+++ trunk/Source/WebCore/platform/mac/SerializedPlatformRepresentationMac.mm        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -0,0 +1,241 @@
</span><ins>+/*
+ * Copyright (C) 2014 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+
+#if ENABLE(VIDEO_TRACK) && ENABLE(DATACUE_VALUE)
+#include "SerializedPlatformRepresentationMac.h"
+
+#import "JSDOMBinding.h"
+#import "SoftLinking.h"
+#import <objc/runtime.h>
+#import <runtime/ArrayBuffer.h>
+#import <runtime/JSArrayBuffer.h>
+#import <AVFoundation/AVFoundation.h>
+#import <CoreMedia/CoreMedia.h>
+#import <Foundation/NSString.h>
+#import <JavaScriptCore/APICast.h>
+#import <JavaScriptCore/JavaScriptCore.h>
+#import <JavaScriptCore/JSContextRef.h>
+#import <JavaScriptCore/JSObjectRef.h>
+#import <wtf/text/Base64.h>
+
+SOFT_LINK_FRAMEWORK_OPTIONAL(CoreMedia)
+SOFT_LINK(CoreMedia, CMTimeCopyAsDictionary, CFDictionaryRef, (CMTime time, CFAllocatorRef allocator), (time, allocator))
+
+typedef AVMetadataItem AVMetadataItemType;
+SOFT_LINK_FRAMEWORK_OPTIONAL(AVFoundation)
+SOFT_LINK_CLASS(AVFoundation, AVMetadataItem)
+#define AVMetadataItem getAVMetadataItemClass()
+
+
+namespace WebCore {
+
+#if JSC_OBJC_API_ENABLED
+static JSValue *jsValueWithDataInContext(NSData *, JSContext *);
+static JSValue *jsValueWithArrayInContext(NSArray *, JSContext *);
+static JSValue *jsValueWithDictionaryInContext(NSDictionary *, JSContext *);
+static JSValue *jsValueWithAVMetadataItemInContext(AVMetadataItemType *, JSContext *);
+static JSValue *jsValueWithValueInContext(id, JSContext *);
+#endif
+
+SerializedPlatformRepresentationMac::SerializedPlatformRepresentationMac(id nativeValue)
+ : SerializedPlatformRepresentation()
+ , m_nativeValue(nativeValue)
+{
+}
+
+SerializedPlatformRepresentationMac::~SerializedPlatformRepresentationMac()
+{
+}
+
+PassRef<SerializedPlatformRepresentation> SerializedPlatformRepresentationMac::create(id nativeValue)
+{
+ return adoptRef(*new SerializedPlatformRepresentationMac(nativeValue));
+}
+
+PassRefPtr<ArrayBuffer> SerializedPlatformRepresentationMac::data() const
+{
+ return nullptr;
+}
+
+JSC::JSValue SerializedPlatformRepresentationMac::deserialize(JSC::ExecState* exec) const
+{
+#if JSC_OBJC_API_ENABLED
+ if (!m_nativeValue)
+ return JSC::jsNull();
+
+ JSGlobalContextRef jsGlobalContextRef = toGlobalRef(exec->lexicalGlobalObject()->globalExec());
+ JSContext *jsContext = [JSContext contextWithJSGlobalContextRef:jsGlobalContextRef];
+ JSValue *serializedValue = jsValueWithValueInContext(m_nativeValue.get(), jsContext);
+
+ return toJS(exec, [serializedValue JSValueRef]);
+#else
+ return JSC::jsNull();
+#endif
+}
+
+bool SerializedPlatformRepresentationMac::isEqual(const SerializedPlatformRepresentation& other) const
+{
+ if (other.platformType() != SerializedPlatformRepresentation::ObjC)
+ return false;
+
+ const SerializedPlatformRepresentationMac* otherObjC = toSerializedPlatformRepresentationMac(&other);
+
+ if (!m_nativeValue || !otherObjC->nativeValue())
+ return false;
+
+ return [m_nativeValue.get() isEqual:otherObjC->nativeValue()];
+}
+
+SerializedPlatformRepresentationMac* toSerializedPlatformRepresentationMac(SerializedPlatformRepresentation* rep)
+{
+ return const_cast<SerializedPlatformRepresentationMac*>(toSerializedPlatformRepresentationMac(const_cast<const SerializedPlatformRepresentation*>(rep)));
+}
+
+const SerializedPlatformRepresentationMac* toSerializedPlatformRepresentationMac(const SerializedPlatformRepresentation* rep)
+{
+ ASSERT_WITH_SECURITY_IMPLICATION(rep->platformType() == SerializedPlatformRepresentation::ObjC);
+ return static_cast<const SerializedPlatformRepresentationMac*>(rep);
+}
+
+#if JSC_OBJC_API_ENABLED
+static JSValue *jsValueWithValueInContext(id value, JSContext *context)
+{
+ if ([value isKindOfClass:[NSString class]] || [value isKindOfClass:[NSNumber class]])
+ return [JSValue valueWithObject:value inContext:context];
+
+ if ([value isKindOfClass:[NSLocale class]])
+ return [JSValue valueWithObject:[value localeIdentifier] inContext:context];
+
+ if ([value isKindOfClass:[NSDictionary class]])
+ return jsValueWithDictionaryInContext(value, context);
+
+ if ([value isKindOfClass:[NSArray class]])
+ return jsValueWithArrayInContext(value, context);
+
+ if ([value isKindOfClass:[NSData class]])
+ return jsValueWithDataInContext(value, context);
+
+ if ([value isKindOfClass:[AVMetadataItem class]])
+ return jsValueWithAVMetadataItemInContext(value, context);
+
+ return nil;
+}
+
+static JSValue *jsValueWithDataInContext(NSData *data, JSContext *context)
+{
+ RefPtr<ArrayBuffer> dataArray = ArrayBuffer::create([data bytes], [data length]);
+
+ JSC::ExecState* exec = toJS([context JSGlobalContextRef]);
+ JSC::JSValue array = toJS(exec, JSC::jsCast<JSDOMGlobalObject*>(exec->lexicalGlobalObject()), dataArray.get());
+
+ return [JSValue valueWithJSValueRef:toRef(exec, array) inContext:context];
+}
+
+static JSValue *jsValueWithArrayInContext(NSArray *array, JSContext *context)
+{
+ JSValueRef exception = 0;
+ JSValue *result = [JSValue valueWithNewArrayInContext:context];
+ JSObjectRef resultObject = JSValueToObject([context JSGlobalContextRef], [result JSValueRef], &exception);
+ if (exception)
+ return [JSValue valueWithUndefinedInContext:context];
+
+ NSUInteger count = [array count];
+ for (NSUInteger i = 0; i < count; ++i) {
+ JSValue *value = jsValueWithValueInContext([array objectAtIndex:i], context);
+ if (!value)
+ continue;
+
+ JSObjectSetPropertyAtIndex([context JSGlobalContextRef], resultObject, (unsigned)i, [value JSValueRef], &exception);
+ if (exception)
+ continue;
+ }
+
+ return result;
+}
+
+static JSValue *jsValueWithDictionaryInContext(NSDictionary *dictionary, JSContext *context)
+{
+ JSValueRef exception = 0;
+ JSValue *result = [JSValue valueWithNewObjectInContext:context];
+ JSObjectRef resultObject = JSValueToObject([context JSGlobalContextRef], [result JSValueRef], &exception);
+ if (exception)
+ return [JSValue valueWithUndefinedInContext:context];
+
+ for (id key in [dictionary keyEnumerator]) {
+ if (![key isKindOfClass:[NSString class]])
+ continue;
+
+ JSValue *value = jsValueWithValueInContext([dictionary objectForKey:key], context);
+ if (!value)
+ continue;
+
+ JSStringRef name = JSStringCreateWithCFString((CFStringRef)key);
+ JSObjectSetProperty([context JSGlobalContextRef], resultObject, name, [value JSValueRef], 0, &exception);
+ if (exception)
+ continue;
+ }
+
+ return result;
+}
+
+static JSValue *jsValueWithAVMetadataItemInContext(AVMetadataItemType *item, JSContext *context)
+{
+ NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];
+
+ NSDictionary *extras = [item extraAttributes];
+ for (id key in [extras keyEnumerator]) {
+ if (![key isKindOfClass:[NSString class]])
+ continue;
+ id value = [extras objectForKey:key];
+ NSString *keyString = key;
+
+ if ([key isEqualToString:@"MIMEtype"])
+ keyString = @"type";
+ else if ([key isEqualToString:@"info"] && [value isKindOfClass:[NSString class]] && ![value length]) {
+ // An "info" key is added to all TXXX, GEOB, and APIC items but the value may be empty.
+ continue;
+ }
+
+ [dictionary setObject:value forKey:keyString];
+ }
+
+ if (item.key)
+ [dictionary setObject:item.key forKey:@"key"];
+
+ if (item.locale)
+ [dictionary setObject:item.locale forKey:@"locale"];
+
+ if (item.value)
+ [dictionary setObject:item.value forKey:@"data"];
+
+ return jsValueWithDictionaryInContext(dictionary, context);
+}
+#endif
+
+} // namespace WebCore
+
+#endif
</ins></span></pre></div>
<a id="trunkSourceWebKitmacChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/ChangeLog (167631 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/ChangeLog        2014-04-21 22:25:42 UTC (rev 167631)
+++ trunk/Source/WebKit/mac/ChangeLog        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -1,3 +1,12 @@
</span><ins>+2014-04-21 Eric Carlson <eric.carlson@apple.com>
+
+ [Mac] implement WebKitDataCue
+ https://bugs.webkit.org/show_bug.cgi?id=131799
+
+ Reviewed by Dean Jackson.
+
+ * Configurations/FeatureDefines.xcconfig: Define ENABLE_DATACUE_VALUE.
+
</ins><span class="cx"> 2014-04-21 Joseph Pecoraro <pecoraro@apple.com>
</span><span class="cx">
</span><span class="cx"> Remove unused WebKitSystemInterface functions
</span></span></pre></div>
<a id="trunkSourceWebKitmacConfigurationsFeatureDefinesxcconfig"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/Configurations/FeatureDefines.xcconfig (167631 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/Configurations/FeatureDefines.xcconfig        2014-04-21 22:25:42 UTC (rev 167631)
+++ trunk/Source/WebKit/mac/Configurations/FeatureDefines.xcconfig        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -209,6 +209,7 @@
</span><span class="cx"> ENABLE_USERSELECT_ALL = ENABLE_USERSELECT_ALL;
</span><span class="cx"> ENABLE_VIDEO = ENABLE_VIDEO;
</span><span class="cx"> ENABLE_VIDEO_TRACK = ENABLE_VIDEO_TRACK;
</span><ins>+ENABLE_DATACUE_VALUE = ENABLE_DATACUE_VALUE;
</ins><span class="cx"> ENABLE_VIEW_MODE_CSS_MEDIA = ;
</span><span class="cx"> ENABLE_WEBGL = ENABLE_WEBGL;
</span><span class="cx"> ENABLE_WEB_AUDIO = ENABLE_WEB_AUDIO;
</span><span class="lines">@@ -243,4 +244,4 @@
</span><span class="cx">
</span><span class="cx"> ENABLE_LLINT_C_LOOP = ;
</span><span class="cx">
</span><del>-FEATURE_DEFINES = $(ENABLE_3D_RENDERING) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCELERATED_OVERFLOW_SCROLLING) $(ENABLE_AVF_CAPTIONS) $(ENABLE_BLOB) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CANVAS_PATH) $(ENABLE_CANVAS_PROXY) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CSP_NEXT) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_EXCLUSIONS) $(ENABLE_CSS_FILTERS) $(ENABLE_CSS_GRID_LAYOUT) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_REGIONS) $(ENABLE_CSS_SHAPES) $(ENABLE_CSS_STICKY_POSITION) $(ENABLE_CSS_TRANSFORMS_ANIMATIONS_UNPREFIXED) $(ENABLE_CSS3_CONDITIONAL_RULES) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS3_TEXT_LINE_BREAK) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DATA_TRANSFER_ITEMS) $(ENABLE_DETAILS_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DOM4_EVENTS_CONSTRUCTOR) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_ENCRYPTED_MEDIA_V2) $(ENABLE_FILTERS) $(ENABLE_FONT_LOAD_EVENTS) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_HIDDEN_PAGE_DOM_TIMER_THROTTLING) $(ENABLE_HIGH_DPI_CANVAS) $(ENABLE_ICONDATABASE) $(ENABLE_IMAGE_CONTROLS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INDIE_UI) $(ENABLE_INPUT_SPEECH) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_COLOR_POPOVER) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_INSPECTOR) $(ENABLE_IOS_AIRPLAY) $(ENABLE_IOS_TEXT_AUTOSIZING) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_NOTIFICATIONS) $(ENABLE_LEGACY_VENDOR_PREFIXES) $(ENABLE_LEGACY_WEB_AUDIO) $(ENABLE_LETTERPRESS) $(ENABLE_LINK_PREFETCH) $(ENABLE_MATHML) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NOTIFICATIONS) $(ENABLE_PAGE_VISIBILITY_API) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_PLUGIN_PROXY_FOR_VIDEO) $(ENABLE_PROGRESS_ELEMENT) $(ENABLE_PROMISES) $(ENABLE_PROXIMITY_EVENTS) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REQUEST_ANIMATION_FRAME) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_SCRIPTED_SPEECH) $(ENABLE_SHARED_WORKERS) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_SQL_DATABASE) $(ENABLE_SUBPIXEL_LAYOUT) $(ENABLE_SUBTLE_CRYPTO) $(ENABLE_SVG_FONTS) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEMPLATE_ELEMENT) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_TOUCH_ICON_LOADING) $(ENABLE_USERSELECT_ALL) $(ENABLE_VIDEO) $(ENABLE_VIDEO_TRACK) $(ENABLE_VIEW_MODE_CSS_MEDIA) $(ENABLE_WEBGL) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_REPLAY) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_WEBVTT_REGIONS) $(ENABLE_XHR_TIMEOUT) $(ENABLE_XSLT) $(ENABLE_FTL_JIT) $(ENABLE_LLINT_C_LOOP) $(FEATURE_DEFINES_$(PLATFORM_NAME));
</del><ins>+FEATURE_DEFINES = $(ENABLE_3D_RENDERING) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCELERATED_OVERFLOW_SCROLLING) $(ENABLE_AVF_CAPTIONS) $(ENABLE_BLOB) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CANVAS_PATH) $(ENABLE_CANVAS_PROXY) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CSP_NEXT) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_EXCLUSIONS) $(ENABLE_CSS_FILTERS) $(ENABLE_CSS_GRID_LAYOUT) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_REGIONS) $(ENABLE_CSS_SHAPES) $(ENABLE_CSS_STICKY_POSITION) $(ENABLE_CSS_TRANSFORMS_ANIMATIONS_UNPREFIXED) $(ENABLE_CSS3_CONDITIONAL_RULES) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS3_TEXT_LINE_BREAK) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DATA_TRANSFER_ITEMS) $(ENABLE_DETAILS_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DOM4_EVENTS_CONSTRUCTOR) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_ENCRYPTED_MEDIA_V2) $(ENABLE_FILTERS) $(ENABLE_FONT_LOAD_EVENTS) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_HIDDEN_PAGE_DOM_TIMER_THROTTLING) $(ENABLE_HIGH_DPI_CANVAS) $(ENABLE_ICONDATABASE) $(ENABLE_IMAGE_CONTROLS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INDIE_UI) $(ENABLE_INPUT_SPEECH) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_COLOR_POPOVER) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_INSPECTOR) $(ENABLE_IOS_AIRPLAY) $(ENABLE_IOS_TEXT_AUTOSIZING) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_NOTIFICATIONS) $(ENABLE_LEGACY_VENDOR_PREFIXES) $(ENABLE_LEGACY_WEB_AUDIO) $(ENABLE_LETTERPRESS) $(ENABLE_LINK_PREFETCH) $(ENABLE_MATHML) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NOTIFICATIONS) $(ENABLE_PAGE_VISIBILITY_API) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_PLUGIN_PROXY_FOR_VIDEO) $(ENABLE_PROGRESS_ELEMENT) $(ENABLE_PROMISES) $(ENABLE_PROXIMITY_EVENTS) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REQUEST_ANIMATION_FRAME) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_SCRIPTED_SPEECH) $(ENABLE_SHARED_WORKERS) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_SQL_DATABASE) $(ENABLE_SUBPIXEL_LAYOUT) $(ENABLE_SUBTLE_CRYPTO) $(ENABLE_SVG_FONTS) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEMPLATE_ELEMENT) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_TOUCH_ICON_LOADING) $(ENABLE_USERSELECT_ALL) $(ENABLE_VIDEO) $(ENABLE_VIDEO_TRACK) $(ENABLE_DATACUE_VALUE) $(ENABLE_VIEW_MODE_CSS_MEDIA) $(ENABLE_WEBGL) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_REPLAY) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_WEBVTT_REGIONS) $(ENABLE_XHR_TIMEOUT) $(ENABLE_XSLT) $(ENABLE_FTL_JIT) $(ENABLE_LLINT_C_LOOP) $(FEATURE_DEFINES_$(PLATFORM_NAME));
</ins></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (167631 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2014-04-21 22:25:42 UTC (rev 167631)
+++ trunk/Source/WebKit2/ChangeLog        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -1,3 +1,12 @@
</span><ins>+2014-04-21 Eric Carlson <eric.carlson@apple.com>
+
+ [Mac] implement WebKitDataCue
+ https://bugs.webkit.org/show_bug.cgi?id=131799
+
+ Reviewed by Dean Jackson.
+
+ * Configurations/FeatureDefines.xcconfig: Define ENABLE_DATACUE_VALUE.
+
</ins><span class="cx"> 2014-04-21 Beth Dakin <bdakin@apple.com>
</span><span class="cx">
</span><span class="cx"> topContentInset does not play well with fullscreen elements
</span></span></pre></div>
<a id="trunkSourceWebKit2ConfigurationsFeatureDefinesxcconfig"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Configurations/FeatureDefines.xcconfig (167631 => 167632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Configurations/FeatureDefines.xcconfig        2014-04-21 22:25:42 UTC (rev 167631)
+++ trunk/Source/WebKit2/Configurations/FeatureDefines.xcconfig        2014-04-21 23:18:23 UTC (rev 167632)
</span><span class="lines">@@ -209,6 +209,7 @@
</span><span class="cx"> ENABLE_USERSELECT_ALL = ENABLE_USERSELECT_ALL;
</span><span class="cx"> ENABLE_VIDEO = ENABLE_VIDEO;
</span><span class="cx"> ENABLE_VIDEO_TRACK = ENABLE_VIDEO_TRACK;
</span><ins>+ENABLE_DATACUE_VALUE = ENABLE_DATACUE_VALUE;
</ins><span class="cx"> ENABLE_VIEW_MODE_CSS_MEDIA = ;
</span><span class="cx"> ENABLE_WEBGL = ENABLE_WEBGL;
</span><span class="cx"> ENABLE_WEB_AUDIO = ENABLE_WEB_AUDIO;
</span><span class="lines">@@ -243,4 +244,4 @@
</span><span class="cx">
</span><span class="cx"> ENABLE_LLINT_C_LOOP = ;
</span><span class="cx">
</span><del>-FEATURE_DEFINES = $(ENABLE_3D_RENDERING) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCELERATED_OVERFLOW_SCROLLING) $(ENABLE_AVF_CAPTIONS) $(ENABLE_BLOB) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CANVAS_PATH) $(ENABLE_CANVAS_PROXY) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CSP_NEXT) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_EXCLUSIONS) $(ENABLE_CSS_FILTERS) $(ENABLE_CSS_GRID_LAYOUT) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_REGIONS) $(ENABLE_CSS_SHAPES) $(ENABLE_CSS_STICKY_POSITION) $(ENABLE_CSS_TRANSFORMS_ANIMATIONS_UNPREFIXED) $(ENABLE_CSS3_CONDITIONAL_RULES) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS3_TEXT_LINE_BREAK) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DATA_TRANSFER_ITEMS) $(ENABLE_DETAILS_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DOM4_EVENTS_CONSTRUCTOR) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_ENCRYPTED_MEDIA_V2) $(ENABLE_FILTERS) $(ENABLE_FONT_LOAD_EVENTS) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_HIDDEN_PAGE_DOM_TIMER_THROTTLING) $(ENABLE_HIGH_DPI_CANVAS) $(ENABLE_ICONDATABASE) $(ENABLE_IMAGE_CONTROLS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INDIE_UI) $(ENABLE_INPUT_SPEECH) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_COLOR_POPOVER) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_INSPECTOR) $(ENABLE_IOS_AIRPLAY) $(ENABLE_IOS_TEXT_AUTOSIZING) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_NOTIFICATIONS) $(ENABLE_LEGACY_VENDOR_PREFIXES) $(ENABLE_LEGACY_WEB_AUDIO) $(ENABLE_LETTERPRESS) $(ENABLE_LINK_PREFETCH) $(ENABLE_MATHML) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NOTIFICATIONS) $(ENABLE_PAGE_VISIBILITY_API) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_PLUGIN_PROXY_FOR_VIDEO) $(ENABLE_PROGRESS_ELEMENT) $(ENABLE_PROMISES) $(ENABLE_PROXIMITY_EVENTS) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REQUEST_ANIMATION_FRAME) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_SCRIPTED_SPEECH) $(ENABLE_SHARED_WORKERS) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_SQL_DATABASE) $(ENABLE_SUBPIXEL_LAYOUT) $(ENABLE_SUBTLE_CRYPTO) $(ENABLE_SVG_FONTS) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEMPLATE_ELEMENT) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_TOUCH_ICON_LOADING) $(ENABLE_USERSELECT_ALL) $(ENABLE_VIDEO) $(ENABLE_VIDEO_TRACK) $(ENABLE_VIEW_MODE_CSS_MEDIA) $(ENABLE_WEBGL) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_REPLAY) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_WEBVTT_REGIONS) $(ENABLE_XHR_TIMEOUT) $(ENABLE_XSLT) $(ENABLE_FTL_JIT) $(ENABLE_LLINT_C_LOOP) $(FEATURE_DEFINES_$(PLATFORM_NAME));
</del><ins>+FEATURE_DEFINES = $(ENABLE_3D_RENDERING) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCELERATED_OVERFLOW_SCROLLING) $(ENABLE_AVF_CAPTIONS) $(ENABLE_BLOB) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CANVAS_PATH) $(ENABLE_CANVAS_PROXY) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CSP_NEXT) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_EXCLUSIONS) $(ENABLE_CSS_FILTERS) $(ENABLE_CSS_GRID_LAYOUT) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_REGIONS) $(ENABLE_CSS_SHAPES) $(ENABLE_CSS_STICKY_POSITION) $(ENABLE_CSS_TRANSFORMS_ANIMATIONS_UNPREFIXED) $(ENABLE_CSS3_CONDITIONAL_RULES) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS3_TEXT_LINE_BREAK) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DATA_TRANSFER_ITEMS) $(ENABLE_DETAILS_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DOM4_EVENTS_CONSTRUCTOR) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_ENCRYPTED_MEDIA_V2) $(ENABLE_FILTERS) $(ENABLE_FONT_LOAD_EVENTS) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_HIDDEN_PAGE_DOM_TIMER_THROTTLING) $(ENABLE_HIGH_DPI_CANVAS) $(ENABLE_ICONDATABASE) $(ENABLE_IMAGE_CONTROLS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INDIE_UI) $(ENABLE_INPUT_SPEECH) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_COLOR_POPOVER) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_INSPECTOR) $(ENABLE_IOS_AIRPLAY) $(ENABLE_IOS_TEXT_AUTOSIZING) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_NOTIFICATIONS) $(ENABLE_LEGACY_VENDOR_PREFIXES) $(ENABLE_LEGACY_WEB_AUDIO) $(ENABLE_LETTERPRESS) $(ENABLE_LINK_PREFETCH) $(ENABLE_MATHML) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NOTIFICATIONS) $(ENABLE_PAGE_VISIBILITY_API) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_PLUGIN_PROXY_FOR_VIDEO) $(ENABLE_PROGRESS_ELEMENT) $(ENABLE_PROMISES) $(ENABLE_PROXIMITY_EVENTS) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REQUEST_ANIMATION_FRAME) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_SCRIPTED_SPEECH) $(ENABLE_SHARED_WORKERS) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_SQL_DATABASE) $(ENABLE_SUBPIXEL_LAYOUT) $(ENABLE_SUBTLE_CRYPTO) $(ENABLE_SVG_FONTS) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEMPLATE_ELEMENT) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_TOUCH_ICON_LOADING) $(ENABLE_USERSELECT_ALL) $(ENABLE_VIDEO) $(ENABLE_VIDEO_TRACK) $(ENABLE_DATACUE_VALUE) $(ENABLE_VIEW_MODE_CSS_MEDIA) $(ENABLE_WEBGL) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_REPLAY) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_WEBVTT_REGIONS) $(ENABLE_XHR_TIMEOUT) $(ENABLE_XSLT) $(ENABLE_FTL_JIT) $(ENABLE_LLINT_C_LOOP) $(FEATURE_DEFINES_$(PLATFORM_NAME));
</ins></span></pre>
</div>
</div>
</body>
</html>