Changeset 99984 in webkit
- Timestamp:
- Nov 11, 2011 9:33:51 AM (13 years ago)
- Location:
- trunk
- Files:
-
- 8 added
- 28 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r99982 r99984 1 2011-11-11 Eric Carlson <eric.carlson@apple.com> 2 3 Implement TextTrackList and the textTracks attribute of HTMLMediaElement 4 https://bugs.webkit.org/show_bug.cgi?id=71123 5 6 Reviewed by Sam Weinig. 7 8 * media/track/track-add-track-expected.txt: Added. 9 * media/track/track-add-track.html: Added. 10 * media/track/tracklist-is-reachable-expected.txt: Added. 11 * media/track/tracklist-is-reachable.html: Added. 12 1 13 2011-11-11 Gavin Peters <gavinp@chromium.org> 2 14 -
trunk/Source/WebCore/CMakeLists.txt
r99893 r99984 302 302 html/canvas/Uint8Array.idl 303 303 304 html/track/TextTrackList.idl 304 305 html/track/TrackEvent.idl 305 306 … … 2061 2062 html/TextTrackCueIndex.cpp 2062 2063 html/TextTrackCueList.cpp 2064 html/track/TextTrackList.cpp 2063 2065 html/track/TrackBase.cpp 2064 2066 html/track/TrackEvent.cpp -
trunk/Source/WebCore/ChangeLog
r99983 r99984 1 2011-11-11 Eric Carlson <eric.carlson@apple.com> 2 3 Implement TextTrackList and the textTracks attribute of HTMLMediaElement 4 https://bugs.webkit.org/show_bug.cgi?id=71123 5 6 Reviewed by Sam Weinig. 7 8 Test: media/track/track-add-track.html 9 media/track/tracklist-is-reachable.html 10 11 * CMakeLists.txt: Add new files for TextTrackList. 12 * DerivedSources.cpp: Ditto. 13 * DerivedSources.make: Ditto. 14 * DerivedSources.pri: Ditto. 15 * GNUmakefile.list.am: Ditto. 16 * Target.pri: Ditto. 17 * WebCore.gypi: Ditto. 18 * WebCore.xcodeproj/project.pbxproj: Ditto. 19 * bindings/js/JSBindingsAllInOne.cpp: Ditto. 20 21 * bindings/js/JSTextTrackListCustom.cpp: Added. 22 (WebCore::JSTextTrackListOwner::isReachableFromOpaqueRoots): 23 24 * dom/EventTargetFactory.in: Add TextTrackList, conditional on VIDEO_TRACK. 25 26 * html/HTMLAudioElement.cpp: 27 (WebCore::HTMLAudioElement::createForJSConstructor): Update for scheduleLoad change. 28 29 * html/HTMLMediaElement.cpp: 30 (WebCore::HTMLMediaElement::~HTMLMediaElement): Update for m_textTracks change from 31 generic Vector to TextTrackList. 32 (WebCore::HTMLMediaElement::attributeChanged): Ditto. 33 (WebCore::HTMLMediaElement::insertedIntoDocument): Update for scheduleLoad change. 34 (WebCore::HTMLMediaElement::scheduleLoad): Add a parameter so caller can specify if 35 the main resource or a text track should be loaded. 36 (WebCore::HTMLMediaElement::loadTimerFired): Update to allow text track loading. 37 (WebCore::HTMLMediaElement::loadInternal): Don't call loadTextTracks. 38 (WebCore::HTMLMediaElement::isSafeToLoadURL): Log when CSP denies load. 39 (WebCore::HTMLMediaElement::playInternal): Update for scheduleLoad change. 40 (WebCore::HTMLMediaElement::pauseInternal): Ditto. 41 (WebCore::HTMLMediaElement::addTrack): Update for m_textTracks change from 42 generic Vector to TextTrackList. 43 (WebCore::HTMLMediaElement::addTextTrack): New, add track to m_textTracks and configure. 44 (WebCore::HTMLMediaElement::configureTextTracks): New, add comments about what this should 45 do eventually. 46 (WebCore::HTMLMediaElement::textTracks): New, return TextTrackList. 47 (WebCore::HTMLMediaElement::trackWasAdded): Bail if runtime feature is not enabled, schedule 48 asynchronous text track load. 49 (WebCore::HTMLMediaElement::trackWillBeRemoved): Minor cleanup. 50 (WebCore::HTMLMediaElement::selectNextSourceChild): Ditto. 51 (WebCore::HTMLMediaElement::sourceWasAdded): Update for scheduleLoad change. 52 * html/HTMLMediaElement.h: 53 * html/HTMLMediaElement.idl: Add textTracks attribute. 54 55 * html/HTMLTrackElement.cpp: 56 (WebCore::HTMLTrackElement::insertedIntoTree): Use new mediaElement() method. 57 (WebCore::HTMLTrackElement::willRemove): Ditto. 58 (WebCore::HTMLTrackElement::attributeChanged): When 'src' is changed, call scheduleLoad 59 instead of HTMLMediaElement 60 (WebCore::HTMLTrackElement::isDefault): hasAttribute -> fastHasAttribute. 61 (WebCore::HTMLTrackElement::track): Allocate track if necessary. 62 (WebCore::HTMLTrackElement::scheduleLoad): New, tell the track to schedule a load. 63 (WebCore::HTMLTrackElement::canLoadUrl): New, check security policy to see if it is OK 64 to load a text track. If so, dispatch 'beforeload' event to give it a chance to disallow 65 load. 66 (WebCore::HTMLTrackElement::loadingCompleted): Renamed from textTrackLoadingCompleted. 67 (WebCore::HTMLTrackElement::textTrackReadyStateChanged): New, TextTrackLoadingClient interface 68 used to inform parent of TextTrack state changes. 69 (WebCore::HTMLTrackElement::textTrackModeChanged): Ditto. 70 (WebCore::HTMLTrackElement::textTrackAddCues): Ditto. 71 (WebCore::HTMLTrackElement::textTrackRemoveCues): Ditto. 72 (WebCore::HTMLTrackElement::textTrackAddCue): Ditto. 73 (WebCore::HTMLTrackElement::textTrackRemoveCue): Ditto. 74 (WebCore::HTMLTrackElement::mediaElement): New, return parent element. 75 * html/HTMLTrackElement.h: 76 77 * html/LoadableTextTrack.cpp: 78 (WebCore::LoadableTextTrack::LoadableTextTrack): Initialize new instance variables. 79 (WebCore::LoadableTextTrack::scheduleLoad): New, prime a timer to kick off loading. 80 (WebCore::LoadableTextTrack::loadTimerFired): Cancel current load, if any, check to see if 81 new url is allowed to load, and start new load. 82 (WebCore::LoadableTextTrack::cueLoadingCompleted): 83 * html/LoadableTextTrack.h: 84 (WebCore::LoadableTextTrackClient::~LoadableTextTrackClient): TextTrackLoadingClient -> LoadableTextTrackClient 85 (WebCore::LoadableTextTrackClient::canLoadUrl): 86 (WebCore::LoadableTextTrackClient::loadingCompleted): 87 (WebCore::LoadableTextTrack::create): 88 89 * html/TextTrack.cpp: 90 (WebCore::TextTrack::TextTrack): setClient(0) -> clearClient(). 91 * html/TextTrack.h: 92 (WebCore::TextTrack::clearClient): Renamed from setClient, because it is only used to clear the client pointer. 93 94 * html/TextTrackCueList.cpp: 95 (WebCore::TextTrackCueList::add): Get rid of a compiler warning that breaks the OS X build. 96 97 * html/track/TextTrackList.cpp: Added. Implement the TextTrackList object. 98 (TextTrackList::TextTrackList): 99 (TextTrackList::~TextTrackList): 100 (TextTrackList::length): 101 (TextTrackList::item): 102 (TextTrackList::append): 103 (TextTrackList::remove): 104 (TextTrackList::interfaceName): 105 (TextTrackList::scheduleAddTrackEvent): 106 (TextTrackList::asyncEventTimerFired): 107 * html/track/TextTrackList.h: Added. 108 (WebCore::TextTrackList::create): 109 (WebCore::TextTrackList::scriptExecutionContext): 110 (WebCore::TextTrackList::clearOwner): 111 (WebCore::TextTrackList::owner): 112 (WebCore::TextTrackList::refEventTarget): 113 (WebCore::TextTrackList::derefEventTarget): 114 (WebCore::TextTrackList::eventTargetData): 115 (WebCore::TextTrackList::ensureEventTargetData): 116 * html/track/TextTrackList.idl: Added. 117 118 * loader/TextTrackLoader.cpp: 119 (WebCore::TextTrackLoader::cancelLoad): New, cancel pending or in progress load and delete loader. 120 (WebCore::TextTrackLoader::notifyFinished): Call cancelLoad. 121 (WebCore::TextTrackLoader::load): Ditto. 122 * loader/TextTrackLoader.h: 123 * page/DOMWindow.idl: Add TextTrackList. 124 1 125 2011-11-11 Pavel Feldman <pfeldman@google.com> 2 126 -
trunk/Source/WebCore/DerivedSources.cpp
r99261 r99984 442 442 #include "JSTextTrackCue.cpp" 443 443 #include "JSTextTrackCueList.cpp" 444 #include "JSTextTrackList.cpp" 444 445 #include "JSTrackEvent.cpp" 445 446 #endif -
trunk/Source/WebCore/DerivedSources.make
r99261 r99984 511 511 TextTrackCue \ 512 512 TextTrackCueList \ 513 TextTrackList \ 513 514 TimeRanges \ 514 515 Touch \ -
trunk/Source/WebCore/DerivedSources.pri
r99825 r99984 591 591 html/TextTrackCue.idl \ 592 592 html/TextTrackCueList.idl \ 593 html/track/TextTrackList.idl \ 593 594 html/track/TrackEvent.idl \ 594 595 } -
trunk/Source/WebCore/GNUmakefile.list.am
r99893 r99984 505 505 DerivedSources/WebCore/JSTextTrackCueList.cpp \ 506 506 DerivedSources/WebCore/JSTextTrackCueList.h \ 507 DerivedSources/WebCore/JSTextTrackList.cpp \ 508 DerivedSources/WebCore/JSTextTrackList.h \ 507 509 DerivedSources/WebCore/JSTimeRanges.cpp \ 508 510 DerivedSources/WebCore/JSTimeRanges.h \ … … 851 853 Source/WebCore/bindings/js/JSStyleSheetListCustom.cpp \ 852 854 Source/WebCore/bindings/js/JSTextCustom.cpp \ 855 Source/WebCore/bindings/js/JSTextTrackListCustom.cpp \ 853 856 Source/WebCore/bindings/js/JSTouchCustom.cpp \ 854 857 Source/WebCore/bindings/js/JSTouchListCustom.cpp \ … … 1981 1984 Source/WebCore/html/TimeRanges.cpp \ 1982 1985 Source/WebCore/html/TimeRanges.h \ 1986 Source/WebCore/html/track/TextTrackList.cpp \ 1987 Source/WebCore/html/track/TextTrackList.h \ 1983 1988 Source/WebCore/html/track/TrackBase.cpp \ 1984 1989 Source/WebCore/html/track/TrackBase.h \ -
trunk/Source/WebCore/Target.pri
r99968 r99984 1894 1894 html/shadow/MediaControlElements.h \ 1895 1895 html/shadow/DetailsMarkerControl.h \ 1896 html/track/TextTrackList.h \ 1896 1897 html/track/TrackBase.h \ 1897 1898 html/track/TrackEvent.h \ … … 3571 3572 bindings/js/JSTrackCustom.h \ 3572 3573 bindings/js/JSTrackEventCustom.cpp 3574 bindings/js/JSTextTrackListCustom.cpp 3573 3575 } 3574 3576 } -
trunk/Source/WebCore/WebCore.gypi
r99893 r99984 1374 1374 'html/canvas/WebGLVertexArrayObjectOES.idl', 1375 1375 'html/canvas/WebKitLoseContext.idl', 1376 'html/track/TextTrackList.idl', 1376 1377 'html/track/TrackEvent.idl', 1377 1378 'inspector/InjectedScriptHost.idl', … … 1938 1939 'bindings/js/JSStyleSheetListCustom.cpp', 1939 1940 'bindings/js/JSTextCustom.cpp', 1941 'bindings/js/JSTextTrackListCustom.cpp', 1940 1942 'bindings/js/JSTouchCustom.cpp', 1941 1943 'bindings/js/JSTouchListCustom.cpp', … … 5795 5797 'html/shadow/TextControlInnerElements.cpp', 5796 5798 'html/shadow/TextControlInnerElements.h', 5799 'html/track/TextTrackList.cpp', 5797 5800 'html/track/TrackBase.cpp', 5798 5801 'html/track/TrackEvent.cpp', -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r99930 r99984 102 102 0753860214489E9800B78452 /* CachedTextTrack.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0753860014489E9800B78452 /* CachedTextTrack.cpp */; }; 103 103 0753860314489E9800B78452 /* CachedTextTrack.h in Headers */ = {isa = PBXBuildFile; fileRef = 0753860114489E9800B78452 /* CachedTextTrack.h */; }; 104 07689D6E145B52CC001CD132 /* JSTrackEventCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07689D6D145B52CC001CD132 /* JSTrackEventCustom.cpp */; }; 104 076970861463AD8700F502CF /* TextTrackList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 076970841463AD8700F502CF /* TextTrackList.cpp */; }; 105 076970871463AD8700F502CF /* TextTrackList.h in Headers */ = {isa = PBXBuildFile; fileRef = 076970851463AD8700F502CF /* TextTrackList.h */; }; 105 106 076F0D0E12B8192700C26AA4 /* MediaPlayerPrivateAVFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = 076F0D0A12B8192700C26AA4 /* MediaPlayerPrivateAVFoundation.h */; }; 106 107 07846342145B151A00A58DF1 /* JSTrackEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07846340145B151A00A58DF1 /* JSTrackEvent.cpp */; }; … … 108 109 07846385145B1B8E00A58DF1 /* JSTrackCustom.h in Headers */ = {isa = PBXBuildFile; fileRef = 07846384145B1B8E00A58DF1 /* JSTrackCustom.h */; }; 109 110 07B0113F1032242200FBDC33 /* AccessibilityMediaControls.h in Headers */ = {isa = PBXBuildFile; fileRef = 07B0113E1032242200FBDC33 /* AccessibilityMediaControls.h */; }; 111 07B5A2DB1464320A00A81ECE /* JSTextTrackList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07B5A2D91464320A00A81ECE /* JSTextTrackList.cpp */; }; 112 07B5A2DC1464320A00A81ECE /* JSTextTrackList.h in Headers */ = {isa = PBXBuildFile; fileRef = 07B5A2DA1464320A00A81ECE /* JSTextTrackList.h */; }; 113 07B5A30D14687D7100A81ECE /* JSTextTrackListCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07B5A30C14687D7100A81ECE /* JSTextTrackListCustom.cpp */; }; 114 07BDD6EC1469B4C2009C9F85 /* JSTrackEventCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07B5A30A14687B8400A81ECE /* JSTrackEventCustom.cpp */; }; 110 115 0806E57A12893045007CED32 /* SVGMatrix.h in Headers */ = {isa = PBXBuildFile; fileRef = 0806E57912893045007CED32 /* SVGMatrix.h */; settings = {ATTRIBUTES = (Private, ); }; }; 111 116 080E49261255F3BD00EFCA27 /* SVGTextLayoutEngineBaseline.h in Headers */ = {isa = PBXBuildFile; fileRef = 080E49221255F3BD00EFCA27 /* SVGTextLayoutEngineBaseline.h */; }; … … 7119 7124 0753860014489E9800B78452 /* CachedTextTrack.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CachedTextTrack.cpp; sourceTree = "<group>"; }; 7120 7125 0753860114489E9800B78452 /* CachedTextTrack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CachedTextTrack.h; sourceTree = "<group>"; }; 7121 07689D6D145B52CC001CD132 /* JSTrackEventCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSTrackEventCustom.cpp; sourceTree = "<group>"; }; 7126 076970841463AD8700F502CF /* TextTrackList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TextTrackList.cpp; sourceTree = "<group>"; }; 7127 076970851463AD8700F502CF /* TextTrackList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextTrackList.h; sourceTree = "<group>"; }; 7122 7128 076F0D0912B8192700C26AA4 /* MediaPlayerPrivateAVFoundation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MediaPlayerPrivateAVFoundation.cpp; sourceTree = "<group>"; }; 7123 7129 076F0D0A12B8192700C26AA4 /* MediaPlayerPrivateAVFoundation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaPlayerPrivateAVFoundation.h; sourceTree = "<group>"; }; … … 7128 7134 07AFE5900F1446BD00841617 /* mediaControlsQuickTime.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = mediaControlsQuickTime.css; sourceTree = "<group>"; }; 7129 7135 07B0113E1032242200FBDC33 /* AccessibilityMediaControls.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccessibilityMediaControls.h; sourceTree = "<group>"; }; 7136 07B5A2D91464320A00A81ECE /* JSTextTrackList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSTextTrackList.cpp; sourceTree = "<group>"; }; 7137 07B5A2DA1464320A00A81ECE /* JSTextTrackList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSTextTrackList.h; sourceTree = "<group>"; }; 7138 07B5A3061468537100A81ECE /* TextTrackList.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = TextTrackList.idl; sourceTree = "<group>"; }; 7139 07B5A30A14687B8400A81ECE /* JSTrackEventCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSTrackEventCustom.cpp; sourceTree = "<group>"; }; 7140 07B5A30C14687D7100A81ECE /* JSTextTrackListCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSTextTrackListCustom.cpp; sourceTree = "<group>"; }; 7130 7141 0806E57912893045007CED32 /* SVGMatrix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGMatrix.h; sourceTree = "<group>"; }; 7131 7142 080E49211255F3BD00EFCA27 /* SVGTextLayoutEngineBaseline.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGTextLayoutEngineBaseline.cpp; sourceTree = "<group>"; }; … … 17817 17828 070756D914239B4C00414161 /* JSTextTrackCueList.cpp */, 17818 17829 070756DA14239B4E00414161 /* JSTextTrackCueList.h */, 17830 07B5A2D91464320A00A81ECE /* JSTextTrackList.cpp */, 17831 07B5A2DA1464320A00A81ECE /* JSTextTrackList.h */, 17819 17832 E44614120CD6826900FADA75 /* JSTimeRanges.cpp */, 17820 17833 E44614130CD6826900FADA75 /* JSTimeRanges.h */, … … 18505 18518 isa = PBXGroup; 18506 18519 children = ( 18520 076970841463AD8700F502CF /* TextTrackList.cpp */, 18521 076970851463AD8700F502CF /* TextTrackList.h */, 18522 07B5A3061468537100A81ECE /* TextTrackList.idl */, 18507 18523 070334D8145A006F008D8D45 /* TrackBase.cpp */, 18508 18524 070334D61459FFD5008D8D45 /* TrackBase.h */, … … 19579 19595 isa = PBXGroup; 19580 19596 children = ( 19581 A85F22081430377D007CC884 /* JSPopStateEventCustom.cpp */,19582 19597 BC275CB211C5E85C00C9206C /* JSArrayBufferCustom.cpp */, 19583 19598 86243D0011BC31F700CC006A /* JSArrayBufferViewHelper.h */, … … 19675 19690 1A750DD30A90E729000FF215 /* JSNodeIteratorCustom.cpp */, 19676 19691 BCD9C2610C17AA67005C90A2 /* JSNodeListCustom.cpp */, 19692 A85F22081430377D007CC884 /* JSPopStateEventCustom.cpp */, 19677 19693 E1AD12D51295D0BD00ACA989 /* JSProcessingInstructionCustom.cpp */, 19678 19694 4998AED313FC417F0090B1AA /* JSRequestAnimationFrameCallbackCustom.cpp */, … … 19688 19704 B2C96D8C0B3AF2B7005E80EC /* JSSVGPathSegCustom.cpp */, 19689 19705 1A2C40AA0DEB55AA005AF19E /* JSTextCustom.cpp */, 19706 07B5A30C14687D7100A81ECE /* JSTextTrackListCustom.cpp */, 19690 19707 070334E8145A1F35008D8D45 /* JSTrackCustom.cpp */, 19691 19708 07846384145B1B8E00A58DF1 /* JSTrackCustom.h */, 19692 07 689D6D145B52CC001CD132/* JSTrackEventCustom.cpp */,19709 07B5A30A14687B8400A81ECE /* JSTrackEventCustom.cpp */, 19693 19710 516BB7920CE91E6800512F79 /* JSTreeWalkerCustom.cpp */, 19694 19711 49EECF7710508D9C00099FAB /* JSUint16ArrayCustom.cpp */, … … 24650 24667 CAE9F910146441F000C245B0 /* CSSAspectRatioValue.h in Headers */, 24651 24668 976F36EB14686225005E93B4 /* SecurityContext.h in Headers */, 24669 076970871463AD8700F502CF /* TextTrackList.h in Headers */, 24670 07B5A2DC1464320A00A81ECE /* JSTextTrackList.h in Headers */, 24652 24671 7134496E146941B300720312 /* SVGLengthContext.h in Headers */, 24653 24672 974D2DA5146A535D00D51F8B /* SecurityPolicy.h in Headers */, … … 27505 27524 070334E9145A1F36008D8D45 /* JSTrackCustom.cpp in Sources */, 27506 27525 07846342145B151A00A58DF1 /* JSTrackEvent.cpp in Sources */, 27507 07689D6E145B52CC001CD132 /* JSTrackEventCustom.cpp in Sources */,27508 27526 2D8FEBDC143E3EF70072502B /* CSSCrossfadeValue.cpp in Sources */, 27509 27527 08F859D41463F9CD0067D933 /* SVGImageCache.cpp in Sources */, … … 27513 27531 CDEA76351460B71A008B31F1 /* Clock.cpp in Sources */, 27514 27532 976F36EA14686225005E93B4 /* SecurityContext.cpp in Sources */, 27533 076970861463AD8700F502CF /* TextTrackList.cpp in Sources */, 27534 07B5A2DB1464320A00A81ECE /* JSTextTrackList.cpp in Sources */, 27535 07B5A30D14687D7100A81ECE /* JSTextTrackListCustom.cpp in Sources */, 27536 07BDD6EC1469B4C2009C9F85 /* JSTrackEventCustom.cpp in Sources */, 27515 27537 7134496D146941B300720312 /* SVGLengthContext.cpp in Sources */, 27516 27538 974D2DA4146A535D00D51F8B /* SecurityPolicy.cpp in Sources */, -
trunk/Source/WebCore/bindings/gobject/GNUmakefile.am
r99261 r99984 410 410 webkitgtk_built_h_api += \ 411 411 $(top_builddir)/DerivedSources/webkit/WebKitDOMTextTrack.h \ 412 $(top_builddir)/DerivedSources/webkit/WebKitDOMTextTrackList.h \ 412 413 $(top_builddir)/DerivedSources/webkit/WebKitDOMTextTrackCue.h \ 413 414 $(top_builddir)/DerivedSources/webkit/WebKitDOMTextTrackCueList.h \ … … 416 417 DerivedSources/webkit/WebKitDOMTextTrack.cpp \ 417 418 DerivedSources/webkit/WebKitDOMTextTrackPrivate.h \ 419 DerivedSources/webkit/WebKitDOMTextTrackList.cpp \ 420 DerivedSources/webkit/WebKitDOMTextTrackListPrivate.h \ 418 421 DerivedSources/webkit/WebKitDOMTextTrackCue.cpp \ 419 422 DerivedSources/webkit/WebKitDOMTextTrackCuePrivate.h \ -
trunk/Source/WebCore/bindings/gobject/WebKitHTMLElementWrapperFactory.cpp
r99261 r99984 162 162 #include "webkit/WebKitDOMTextTrackCueListPrivate.h" 163 163 #include "webkit/WebKitDOMTextTrackCuePrivate.h" 164 #include "webkit/WebKitDOMTextTrackListPrivate.h" 164 165 #include "webkit/WebKitDOMTextTrackPrivate.h" 165 166 #include "webkit/WebKitDOMTrackEventPrivate.h" -
trunk/Source/WebCore/bindings/js/JSBindingsAllInOne.cpp
r99261 r99984 139 139 #include "JSStyleSheetListCustom.cpp" 140 140 #include "JSTextCustom.cpp" 141 #include "JSTextTrackListCustom.cpp" 141 142 #include "JSTouchCustom.cpp" 142 143 #include "JSTouchListCustom.cpp" -
trunk/Source/WebCore/dom/EventTargetFactory.in
r98412 r99984 22 22 SharedWorkerContext conditional=SHARED_WORKERS 23 23 SVGElementInstance conditional=SVG 24 TextTrackList conditional=VIDEO_TRACK 24 25 WebSocket conditional=WEB_SOCKETS 25 26 Worker conditional=WORKERS -
trunk/Source/WebCore/html/HTMLAudioElement.cpp
r61293 r99984 53 53 if (!src.isNull()) { 54 54 audio->setSrc(src); 55 audio->scheduleLoad( );55 audio->scheduleLoad(HTMLMediaElement::MediaResource); 56 56 } 57 57 return audio.release(); -
trunk/Source/WebCore/html/HTMLMediaElement.cpp
r99742 r99984 90 90 #include "HTMLTrackElement.h" 91 91 #include "RuntimeEnabledFeatures.h" 92 #include "TextTrackList.h" 92 93 #endif 93 94 … … 174 175 , m_cachedTimeWallClockUpdateTime(0) 175 176 , m_minimumWallClockTimeToCacheMediaTime(0) 177 , m_pendingLoadFlags(0) 176 178 , m_playing(false) 177 179 , m_isWaitingUntilMediaCanStart(false) … … 199 201 , m_audioSourceNode(0) 200 202 #endif 203 #if ENABLE(VIDEO_TRACK) 204 , m_textTracks(0) 205 #endif 201 206 { 202 207 LOG(Media, "HTMLMediaElement::HTMLMediaElement"); … … 226 231 document()->unregisterForPrivateBrowsingStateChangedCallbacks(this); 227 232 #if ENABLE(VIDEO_TRACK) 228 for (unsigned i = 0; i < m_textTracks.size(); ++i) 229 m_textTracks[i]->setClient(0); 233 if (m_textTracks) 234 m_textTracks->clearOwner(); 235 if (m_textTracks) { 236 for (unsigned i = 0; i < m_textTracks->length(); ++i) 237 m_textTracks->item(i)->clearClient(); 238 } 230 239 #endif 231 240 } … … 269 278 // Trigger a reload, as long as the 'src' attribute is present. 270 279 if (!getAttribute(srcAttr).isEmpty()) 271 scheduleLoad( );280 scheduleLoad(MediaResource); 272 281 } else if (attrName == controlsAttr) 273 282 configureMediaControls(); … … 382 391 void HTMLMediaElement::insertedIntoDocument() 383 392 { 384 LOG(Media, "HTMLMediaElement:: removedFromDocument");393 LOG(Media, "HTMLMediaElement::insertedIntoDocument"); 385 394 HTMLElement::insertedIntoDocument(); 386 395 if (!getAttribute(srcAttr).isEmpty() && m_networkState == NETWORK_EMPTY) 387 scheduleLoad( );396 scheduleLoad(MediaResource); 388 397 } 389 398 … … 424 433 } 425 434 426 void HTMLMediaElement::scheduleLoad( )435 void HTMLMediaElement::scheduleLoad(LoadType loadType) 427 436 { 428 437 LOG(Media, "HTMLMediaElement::scheduleLoad"); 438 439 if ((loadType & MediaResource) && !(m_pendingLoadFlags & MediaResource)) { 429 440 #if ENABLE(PLUGIN_PROXY_FOR_VIDEO) 430 createMediaPlayerProxy(); 431 #endif 432 433 if (m_loadTimer.isActive()) 434 return; 435 prepareForLoad(); 436 m_loadTimer.startOneShot(0); 441 createMediaPlayerProxy(); 442 #endif 443 444 prepareForLoad(); 445 m_pendingLoadFlags |= MediaResource; 446 } 447 448 #if ENABLE(VIDEO_TRACK) 449 if (loadType & TextTrackResource) 450 m_pendingLoadFlags |= TextTrackResource; 451 #endif 452 453 if (!m_loadTimer.isActive()) 454 m_loadTimer.startOneShot(0); 437 455 } 438 456 … … 440 458 { 441 459 // Schedule the timer to try the next <source> element WITHOUT resetting state ala prepareForLoad. 460 m_pendingLoadFlags |= MediaResource; 442 461 m_loadTimer.startOneShot(0); 443 462 } … … 475 494 void HTMLMediaElement::loadTimerFired(Timer<HTMLMediaElement>*) 476 495 { 477 if (m_loadState == LoadingFromSourceElement) 478 loadNextSourceChild(); 479 else 480 loadInternal(); 496 if (m_pendingLoadFlags & MediaResource) { 497 if (m_loadState == LoadingFromSourceElement) 498 loadNextSourceChild(); 499 else 500 loadInternal(); 501 } 502 503 #if ENABLE(VIDEO_TRACK) 504 if (m_pendingLoadFlags & TextTrackResource) 505 configureTextTracks(); 506 #endif 507 508 m_pendingLoadFlags = 0; 481 509 } 482 510 … … 634 662 635 663 selectMediaResource(); 636 #if ENABLE(VIDEO_TRACK)637 loadTextTracks();638 #endif639 664 } 640 665 … … 838 863 839 864 #if ENABLE(VIDEO_TRACK) 840 void HTMLMediaElement::loadTextTracks()841 {842 if (!RuntimeEnabledFeatures::webkitVideoTrackEnabled())843 return;844 845 for (Node* node = firstChild(); node; node = node->nextSibling()) {846 if (node->hasTagName(trackTag))847 loadNextTextTrack(static_cast<HTMLTrackElement*>(node));848 }849 }850 851 void HTMLMediaElement::loadNextTextTrack(HTMLTrackElement* track)852 {853 // FIXME(71124): This should schedule an *asynchronous* load.854 track->load(ActiveDOMObject::scriptExecutionContext(), this);855 RefPtr<TextTrack> textTrack = track->track();856 if (textTrack)857 m_textTracks.append(textTrack.release());858 859 // FIXME(71123): Set the text track mode accordingly.860 }861 862 865 void HTMLMediaElement::textTrackReadyStateChanged(TextTrack*) 863 866 { … … 870 873 } 871 874 872 void HTMLMediaElement::textTrack Created(TextTrack*)875 void HTMLMediaElement::textTrackAddCues(TextTrack*, const TextTrackCueList*) 873 876 { 874 877 // FIXME(62885): Implement. 875 878 } 876 879 877 void HTMLMediaElement::textTrack AddCues(TextTrack*, const TextTrackCueList*)880 void HTMLMediaElement::textTrackRemoveCues(TextTrack*, const TextTrackCueList*) 878 881 { 879 882 // FIXME(62885): Implement. 880 883 } 881 884 882 void HTMLMediaElement::textTrack RemoveCues(TextTrack*, const TextTrackCueList*)885 void HTMLMediaElement::textTrackAddCue(TextTrack*, PassRefPtr<TextTrackCue>) 883 886 { 884 887 // FIXME(62885): Implement. 885 888 } 886 889 887 void HTMLMediaElement::textTrack AddCue(TextTrack*, PassRefPtr<TextTrackCue>)890 void HTMLMediaElement::textTrackRemoveCue(TextTrack*, PassRefPtr<TextTrackCue>) 888 891 { 889 892 // FIXME(62885): Implement. 890 893 } 891 894 892 void HTMLMediaElement::textTrackRemoveCue(TextTrack*, PassRefPtr<TextTrackCue>) 893 { 894 // FIXME(62885): Implement. 895 } 896 897 #endif 898 899 bool HTMLMediaElement::isSafeToLoadURL(const KURL& url, InvalidSourceAction actionIfInvalid) 895 #endif 896 897 bool HTMLMediaElement::isSafeToLoadURL(const KURL& url, InvalidURLAction actionIfInvalid) 900 898 { 901 899 if (!url.isValid()) { … … 912 910 } 913 911 914 if (!document()->contentSecurityPolicy()->allowMediaFromSource(url)) 912 if (!document()->contentSecurityPolicy()->allowMediaFromSource(url)) { 913 LOG(Media, "HTMLMediaElement::isSafeToLoadURL(%s) -> rejected by Content Security Policy", urlForLogging(url).utf8().data()); 915 914 return false; 915 } 916 916 917 917 return true; … … 1671 1671 // 4.8.10.9. Playing the media resource 1672 1672 if (!m_player || m_networkState == NETWORK_EMPTY) 1673 scheduleLoad( );1673 scheduleLoad(MediaResource); 1674 1674 1675 1675 if (endedPlayback()) { … … 1710 1710 // 4.8.10.9. Playing the media resource 1711 1711 if (!m_player || m_networkState == NETWORK_EMPTY) 1712 scheduleLoad( );1712 scheduleLoad(MediaResource); 1713 1713 1714 1714 m_autoplaying = false; … … 1990 1990 PassRefPtr<TextTrack> HTMLMediaElement::addTrack(const String& kind, const String& label, const String& language) 1991 1991 { 1992 if (!RuntimeEnabledFeatures::webkitVideoTrackEnabled()) 1993 return 0; 1994 1995 // FIXME(71915): addTrack should throw a SyntaxError exception if 'kind' is an unknown value. 1992 1996 RefPtr<TextTrack> textTrack = TextTrack::create(this, kind, label, language); 1993 m_textTracks.append(textTrack);1997 addTextTrack(textTrack); 1994 1998 return textTrack.release(); 1995 1999 } 1996 2000 1997 void HTMLMediaElement::trackWasAdded(HTMLTrackElement* track) 1998 { 2001 void HTMLMediaElement::addTextTrack(PassRefPtr<TextTrack> track) 2002 { 2003 if (!m_textTracks) 2004 m_textTracks = TextTrackList::create(this, ActiveDOMObject::scriptExecutionContext()); 2005 m_textTracks->append(track); 2006 2007 configureTextTracks(); 2008 } 2009 2010 void HTMLMediaElement::configureTextTracks() 2011 { 2012 if (!RuntimeEnabledFeatures::webkitVideoTrackEnabled()) 2013 return; 2014 2015 // 4.8.10.12.3 Sourcing out-of-band text tracks 2016 2017 // When a text track corresponding to a track element is added to a media element's list of text tracks, 2018 // the user agent must set the text track mode appropriately, as determined by the following conditions: 2019 2020 // * If the text track kind is subtitles or captions and the user has indicated an interest in having a 2021 // track with this text track kind, text track language, and text track label enabled, and there is no 2022 // other text track in the media element's list of text tracks with a text track kind of either subtitles 2023 // or captions whose text track mode is showing 2024 // * If the text track kind is descriptions and the user has indicated an interest in having text 2025 // descriptions with this text track language and text track label enabled, and there is no other text 2026 // track in the media element's list of text tracks with a text track kind of descriptions whose text 2027 // track mode is showing 2028 // Let the text track mode be showing. 2029 // If there is a text track in the media element's list of text tracks whose text track mode is showing 2030 // by default, the user agent must furthermore change that text track's text track mode to hidden. 2031 2032 // * If the text track kind is chapters and the text track language is one that the user agent has reason 2033 // to believe is appropriate for the user, and there is no other text track in the media element's list of 2034 // text tracks with a text track kind of chapters whose text track mode is showing 2035 // Let the text track mode be showing. 2036 2037 // * If the track element has a default attribute specified, and there is no other text track in the media 2038 // element's list of text tracks whose text track mode is showing or showing by default 2039 // Let the text track mode be showing by default. 2040 2041 // Otherwise 2042 // Let the text track mode be disabled. 2043 2044 // FIXME(71123): Until the above logic has been implemented, just tell all text tracks to load. 2045 for (Node* node = firstChild(); node; node = node->nextSibling()) { 2046 if (node->hasTagName(trackTag)) 2047 static_cast<HTMLTrackElement*>(node)->scheduleLoad(); 2048 } 2049 } 2050 2051 TextTrackList* HTMLMediaElement::textTracks() const 2052 { 2053 if (!RuntimeEnabledFeatures::webkitVideoTrackEnabled()) 2054 return 0; 2055 2056 if (m_textTracks) 2057 return m_textTracks.get(); 2058 2059 return 0; 2060 } 2061 2062 void HTMLMediaElement::trackWasAdded(HTMLTrackElement* trackElement) 2063 { 2064 if (!RuntimeEnabledFeatures::webkitVideoTrackEnabled()) 2065 return; 2066 1999 2067 #if !LOG_DISABLED 2000 if (track ->hasTagName(trackTag)) {2001 KURL url = track ->getNonEmptyURLAttribute(srcAttr);2068 if (trackElement->hasTagName(trackTag)) { 2069 KURL url = trackElement->getNonEmptyURLAttribute(srcAttr); 2002 2070 LOG(Media, "HTMLMediaElement::trackWasAdded - 'src' is %s", urlForLogging(url).utf8().data()); 2003 2071 } 2004 2072 #endif 2005 loadNextTextTrack(track); 2073 2074 // 4.8.10.12.3 Sourcing out-of-band text tracks 2075 // When a track element's parent element changes and the new parent is a media element, 2076 // then the user agent must add the track element's corresponding text track to the 2077 // media element's list of text tracks ... [continues in TextTrackList::append] 2078 RefPtr<TextTrack> textTrack = trackElement->track(); 2079 if (!textTrack) 2080 return; 2081 addTextTrack(textTrack); 2082 scheduleLoad(TextTrackResource); 2006 2083 } 2007 2084 2008 void HTMLMediaElement::trackWillBeRemoved(HTMLTrackElement* track )2085 void HTMLMediaElement::trackWillBeRemoved(HTMLTrackElement* trackElement) 2009 2086 { 2010 2087 #if !LOG_DISABLED 2011 if (track ->hasTagName(trackTag)) {2012 KURL url = track ->getNonEmptyURLAttribute(srcAttr);2088 if (trackElement->hasTagName(trackTag)) { 2089 KURL url = trackElement->getNonEmptyURLAttribute(srcAttr); 2013 2090 LOG(Media, "HTMLMediaElement::trackWillBeRemoved - 'src' is %s", urlForLogging(url).utf8().data()); 2014 2091 } 2015 2092 #endif 2016 } 2017 2018 void HTMLMediaElement::trackSourceChanged(HTMLTrackElement* track) 2019 { 2020 #if !LOG_DISABLED 2021 if (track->hasTagName(trackTag)) { 2022 KURL url = track->getNonEmptyURLAttribute(srcAttr); 2023 LOG(Media, "HTMLMediaElement::trackSourceChanged - 'src' is %s", urlForLogging(url).utf8().data()); 2024 } 2025 #endif 2026 loadNextTextTrack(track); 2093 2094 RefPtr<TextTrack> textTrack = trackElement->track(); 2095 if (!textTrack) 2096 return; 2097 2098 // 4.8.10.12.3 Sourcing out-of-band text tracks 2099 // When a track element's parent element changes and the old parent was a media element, 2100 // then the user agent must remove the track element's corresponding text track from the 2101 // media element's list of text tracks. 2102 m_textTracks->remove(textTrack); 2027 2103 } 2028 2104 #endif … … 2043 2119 } 2044 2120 2045 KURL HTMLMediaElement::selectNextSourceChild(ContentType *contentType, Invalid SourceAction actionIfInvalid)2121 KURL HTMLMediaElement::selectNextSourceChild(ContentType *contentType, InvalidURLAction actionIfInvalid) 2046 2122 { 2047 2123 #if !LOG_DISABLED … … 2155 2231 // the media element's resource selection algorithm. 2156 2232 if (networkState() == HTMLMediaElement::NETWORK_EMPTY) { 2157 scheduleLoad( );2233 scheduleLoad(MediaResource); 2158 2234 return; 2159 2235 } -
trunk/Source/WebCore/html/HTMLMediaElement.h
r98860 r99984 54 54 class MediaError; 55 55 class KURL; 56 class TextTrackList; 56 57 class TimeRanges; 57 58 class Uint8Array; … … 90 91 #endif 91 92 92 void scheduleLoad(); 93 enum LoadType { 94 MediaResource = 1 << 0, 95 TextTrackResource = 1 << 1 96 }; 97 void scheduleLoad(LoadType); 93 98 94 99 MediaPlayer::MovieLoadType movieLoadType() const; … … 182 187 #if ENABLE(VIDEO_TRACK) 183 188 PassRefPtr<TextTrack> addTrack(const String& kind, const String& label = "", const String& language = ""); 189 TextTrackList* textTracks() const; 190 191 void addTextTrack(PassRefPtr<TextTrack>); 192 184 193 virtual void trackWasAdded(HTMLTrackElement*); 185 194 virtual void trackWillBeRemoved(HTMLTrackElement*); 186 virtual void trackSourceChanged(HTMLTrackElement*); 195 196 // TextTrackClient 197 virtual void textTrackReadyStateChanged(TextTrack*); 198 virtual void textTrackModeChanged(TextTrack*); 199 virtual void textTrackAddCues(TextTrack*, const TextTrackCueList*); 200 virtual void textTrackRemoveCues(TextTrack*, const TextTrackCueList*); 201 virtual void textTrackAddCue(TextTrack*, PassRefPtr<TextTrackCue>); 202 virtual void textTrackRemoveCue(TextTrack*, PassRefPtr<TextTrackCue>); 187 203 #endif 188 204 … … 230 246 AudioSourceProvider* audioSourceProvider(); 231 247 #endif 248 249 enum InvalidURLAction { DoNothing, Complain }; 250 bool isSafeToLoadURL(const KURL&, InvalidURLAction); 232 251 233 252 protected: … … 350 369 void prepareToPlay(); 351 370 352 enum InvalidSourceAction { DoNothing, Complain }; 353 bool isSafeToLoadURL(const KURL&, InvalidSourceAction); 354 KURL selectNextSourceChild(ContentType*, InvalidSourceAction); 371 KURL selectNextSourceChild(ContentType*, InvalidURLAction); 355 372 void mediaLoadingFailed(MediaPlayer::NetworkState); 356 373 357 374 #if ENABLE(VIDEO_TRACK) 358 void loadTextTracks(); 359 void loadNextTextTrack(HTMLTrackElement*); 360 361 // TextTrackClient 362 virtual void textTrackReadyStateChanged(TextTrack*); 363 virtual void textTrackModeChanged(TextTrack*); 364 virtual void textTrackCreated(TextTrack*); 365 virtual void textTrackAddCues(TextTrack*, const TextTrackCueList*); 366 virtual void textTrackRemoveCues(TextTrack*, const TextTrackCueList*); 367 virtual void textTrackAddCue(TextTrack*, PassRefPtr<TextTrackCue>); 368 virtual void textTrackRemoveCue(TextTrack*, PassRefPtr<TextTrackCue>); 375 void configureTextTracks(); 369 376 #endif 370 377 … … 472 479 mutable double m_cachedTimeWallClockUpdateTime; 473 480 mutable double m_minimumWallClockTimeToCacheMediaTime; 481 482 typedef unsigned PendingLoadFlags; 483 PendingLoadFlags m_pendingLoadFlags; 474 484 475 485 bool m_playing : 1; … … 515 525 516 526 #if ENABLE(VIDEO_TRACK) 517 Vector<RefPtr<TextTrack>> m_textTracks;527 RefPtr<TextTrackList> m_textTracks; 518 528 #endif 519 529 }; -
trunk/Source/WebCore/html/HTMLMediaElement.idl
r98238 r99984 114 114 #if defined(ENABLE_VIDEO_TRACK) && ENABLE_VIDEO_TRACK 115 115 [EnabledAtRuntime=webkitVideoTrack] TextTrack addTrack(in DOMString kind, in [Optional] DOMString label, in [Optional] DOMString language); 116 readonly attribute [EnabledAtRuntime=webkitVideoTrack] TextTrackList textTracks; 116 117 #endif 117 118 }; -
trunk/Source/WebCore/html/HTMLTrackElement.cpp
r99742 r99984 33 33 #include "HTMLNames.h" 34 34 #include "Logging.h" 35 #include "RuntimeEnabledFeatures.h" 35 36 #include "ScriptEventListener.h" 36 37 … … 50 51 HTMLTrackElement::~HTMLTrackElement() 51 52 { 53 if (m_track) 54 m_track->clearClient(); 52 55 } 53 56 … … 60 63 { 61 64 HTMLElement::insertedIntoTree(deep); 62 Element* parent = parentElement(); 63 if ( parent && parent->isMediaElement())64 static_cast<HTMLMediaElement*>(parentNode())->trackWasAdded(this);65 66 if (HTMLMediaElement* parent = mediaElement()) 67 parent->trackWasAdded(this); 65 68 } 66 69 67 70 void HTMLTrackElement::willRemove() 68 71 { 69 Element* parent = parentElement();70 if (parent && parent->isMediaElement())71 static_cast<HTMLMediaElement*>(parentNode())->trackWillBeRemoved(this); 72 if (HTMLMediaElement* parent = mediaElement()) 73 parent->trackWillBeRemoved(this); 74 72 75 HTMLElement::willRemove(); 73 76 } … … 91 94 const QualifiedName& attrName = attr->name(); 92 95 if (attrName == srcAttr) { 93 if (!getAttribute(srcAttr).isEmpty() && parentNode())94 s tatic_cast<HTMLMediaElement*>(parentNode())->trackSourceChanged(this);96 if (!getAttribute(srcAttr).isEmpty() && mediaElement()) 97 scheduleLoad(); 95 98 } 96 99 } … … 138 141 bool HTMLTrackElement::isDefault() const 139 142 { 140 return hasAttribute(defaultAttr);143 return fastHasAttribute(defaultAttr); 141 144 } 142 145 … … 146 149 } 147 150 148 TextTrack* HTMLTrackElement::track() const 149 { 150 if (m_track) 151 return m_track.get(); 152 return 0; 151 LoadableTextTrack* HTMLTrackElement::ensureTrack() 152 { 153 if (!RuntimeEnabledFeatures::webkitVideoTrackEnabled()) 154 return 0; 155 156 if (!m_track) 157 m_track = LoadableTextTrack::create(this, kind(), label(), srclang(), isDefault()); 158 return m_track.get(); 159 } 160 161 TextTrack* HTMLTrackElement::track() 162 { 163 return ensureTrack(); 153 164 } 154 165 … … 158 169 } 159 170 160 void HTMLTrackElement::load(ScriptExecutionContext* context, TextTrackClient* trackClient) 161 { 162 m_track = LoadableTextTrack::create(trackClient, this, kind(), label(), srclang(), isDefault()); 163 164 if (hasAttribute(srcAttr)) 165 m_track->load(getNonEmptyURLAttribute(srcAttr), context); 166 } 167 168 void HTMLTrackElement::textTrackLoadingCompleted(LoadableTextTrack*, bool loadingFailed) 171 void HTMLTrackElement::scheduleLoad() 172 { 173 if (!mediaElement()) 174 return; 175 176 if (!fastHasAttribute(srcAttr)) 177 return; 178 179 ensureTrack()->scheduleLoad(getNonEmptyURLAttribute(srcAttr)); 180 } 181 182 bool HTMLTrackElement::canLoadUrl(LoadableTextTrack*, const KURL& url) 183 { 184 HTMLMediaElement* parent = mediaElement(); 185 if (!parent) 186 return false; 187 188 if (!parent->isSafeToLoadURL(url, HTMLMediaElement::Complain)) 189 return false; 190 191 return dispatchBeforeLoadEvent(url.string()); 192 } 193 194 void HTMLTrackElement::didCompleteLoad(LoadableTextTrack*, bool loadingFailed) 169 195 { 170 196 ExceptionCode ec = 0; 171 197 dispatchEvent(Event::create(loadingFailed ? eventNames().errorEvent : eventNames().loadEvent, false, false), ec); 172 198 } 199 200 void HTMLTrackElement::textTrackReadyStateChanged(TextTrack* track) 201 { 202 if (HTMLMediaElement* parent = mediaElement()) 203 return parent->textTrackReadyStateChanged(track); 204 } 205 206 void HTMLTrackElement::textTrackModeChanged(TextTrack* track) 207 { 208 if (HTMLMediaElement* parent = mediaElement()) 209 return parent->textTrackModeChanged(track); 210 } 211 212 void HTMLTrackElement::textTrackAddCues(TextTrack* track, const TextTrackCueList* cues) 213 { 214 if (HTMLMediaElement* parent = mediaElement()) 215 return parent->textTrackAddCues(track, cues); 216 } 217 218 void HTMLTrackElement::textTrackRemoveCues(TextTrack* track, const TextTrackCueList* cues) 219 { 220 if (HTMLMediaElement* parent = mediaElement()) 221 return parent->textTrackAddCues(track, cues); 222 } 223 224 void HTMLTrackElement::textTrackAddCue(TextTrack* track, PassRefPtr<TextTrackCue> cue) 225 { 226 if (HTMLMediaElement* parent = mediaElement()) 227 return parent->textTrackAddCue(track, cue); 228 } 229 230 void HTMLTrackElement::textTrackRemoveCue(TextTrack* track, PassRefPtr<TextTrackCue> cue) 231 { 232 if (HTMLMediaElement* parent = mediaElement()) 233 return parent->textTrackRemoveCue(track, cue); 234 } 235 236 HTMLMediaElement* HTMLTrackElement::mediaElement() const 237 { 238 Element* parent = parentElement(); 239 if (parent && parent->isMediaElement()) 240 return static_cast<HTMLMediaElement*>(parentNode()); 241 242 return 0; 243 } 173 244 174 245 #if ENABLE(MICRODATA) -
trunk/Source/WebCore/html/HTMLTrackElement.h
r98860 r99984 34 34 namespace WebCore { 35 35 36 class HTMLTrackElement : public HTMLElement, private TextTrackLoadingClient { 36 class HTMLMediaElement; 37 38 class HTMLTrackElement : public HTMLElement, public TextTrackClient { 37 39 public: 38 40 static PassRefPtr<HTMLTrackElement> create(const QualifiedName&, Document*); … … 49 51 void setLabel(const String&); 50 52 void setIsDefault(bool); 51 TextTrack* track() const;53 TextTrack* track(); 52 54 53 void load(ScriptExecutionContext*, TextTrackClient*); 55 void scheduleLoad(); 56 virtual bool canLoadUrl(LoadableTextTrack*, const KURL&); 57 virtual void didCompleteLoad(LoadableTextTrack*, bool /* loadingFailed */); 54 58 55 59 private: 56 57 // TextTrackLoadingClient58 virtual void textTrackLoadingCompleted(LoadableTextTrack*, bool);59 60 60 HTMLTrackElement(const QualifiedName&, Document*); 61 61 virtual ~HTMLTrackElement(); 62 62 63 63 virtual void parseMappedAttribute(Attribute*); 64 64 virtual void attributeChanged(Attribute*, bool preserveDecls); … … 73 73 #endif 74 74 75 HTMLMediaElement* mediaElement() const; 76 77 // TextTrackClient 78 virtual void textTrackReadyStateChanged(TextTrack*); 79 virtual void textTrackModeChanged(TextTrack*); 80 virtual void textTrackAddCues(TextTrack*, const TextTrackCueList*); 81 virtual void textTrackRemoveCues(TextTrack*, const TextTrackCueList*); 82 virtual void textTrackAddCue(TextTrack*, PassRefPtr<TextTrackCue>); 83 virtual void textTrackRemoveCue(TextTrack*, PassRefPtr<TextTrackCue>); 84 85 LoadableTextTrack* ensureTrack(); 86 75 87 RefPtr<LoadableTextTrack> m_track; 76 88 }; -
trunk/Source/WebCore/html/LoadableTextTrack.cpp
r99234 r99984 30 30 #include "LoadableTextTrack.h" 31 31 32 #include "HTMLTrackElement.h" 33 #include "ScriptEventListener.h" 32 34 #include "TextTrackCueList.h" 33 35 34 36 namespace WebCore { 35 37 36 LoadableTextTrack::LoadableTextTrack(TextTrackClient* trackClient, TextTrackLoadingClient* loadingClient, const String& kind, const String& label, const String& language, bool isDefault) 37 : TextTrack(trackClient, kind, label, language) 38 , m_loadingClient(loadingClient) 38 LoadableTextTrack::LoadableTextTrack(HTMLTrackElement* track, const String& kind, const String& label, const String& language, bool isDefault) 39 : TextTrack(track, kind, label, language) 40 , m_trackElement(track) 41 , m_loadTimer(this, &LoadableTextTrack::loadTimerFired) 39 42 , m_isDefault(isDefault) 40 43 { … … 45 48 } 46 49 47 void LoadableTextTrack:: load(const KURL& url, ScriptExecutionContext* context)50 void LoadableTextTrack::clearClient() 48 51 { 49 if (!m_loader) 50 m_loader = TextTrackLoader::create(this, context); 51 m_loader->load(url); 52 m_trackElement = 0; 53 TextTrack::clearClient(); 54 } 55 56 void LoadableTextTrack::scheduleLoad(const KURL& url) 57 { 58 m_url = url; 59 if (!m_loadTimer.isActive()) 60 m_loadTimer.startOneShot(0); 61 } 62 63 void LoadableTextTrack::loadTimerFired(Timer<LoadableTextTrack>*) 64 { 65 setReadyState(TextTrack::LOADING); 66 67 if (m_loader) 68 m_loader->cancelLoad(); 69 70 if (!m_trackElement || !m_trackElement->canLoadUrl(this, m_url)) { 71 setReadyState(TextTrack::HTML_ERROR); 72 return; 73 } 74 75 m_loader = TextTrackLoader::create(this, static_cast<ScriptExecutionContext*>(m_trackElement->document())); 76 m_loader->load(m_url); 52 77 } 53 78 … … 83 108 loadingFailed ? setReadyState(TextTrack::HTML_ERROR) : setReadyState(TextTrack::LOADED); 84 109 85 if (m_ loadingClient)86 m_ loadingClient->textTrackLoadingCompleted(this, loadingFailed);110 if (m_trackElement) 111 m_trackElement->didCompleteLoad(this, loadingFailed); 87 112 } 88 113 -
trunk/Source/WebCore/html/LoadableTextTrack.h
r98000 r99984 38 38 class HTMLTrackElement; 39 39 class LoadableTextTrack; 40 class ScriptExecutionContext;41 40 42 class TextTrackLoadingClient {41 class LoadableTextTrackClient : public TextTrackClient { 43 42 public: 44 virtual ~ TextTrackLoadingClient() { }43 virtual ~LoadableTextTrackClient() { } 45 44 46 virtual void textTrackLoadingCompleted(LoadableTextTrack*, bool /* loadingFailed */) = 0; 45 virtual bool canLoadUrl(LoadableTextTrack*, const KURL&) { return false; } 46 virtual void loadingCompleted(LoadableTextTrack*, bool /* loadingFailed */) { } 47 47 }; 48 48 49 49 class LoadableTextTrack : public TextTrack, private TextTrackLoaderClient { 50 50 public: 51 static PassRefPtr<LoadableTextTrack> create( TextTrackClient* trackClient, TextTrackLoadingClient* loadingClient, const String& kind, const String& label, const String& language, bool isDefault)51 static PassRefPtr<LoadableTextTrack> create(HTMLTrackElement* track, const String& kind, const String& label, const String& language, bool isDefault) 52 52 { 53 return adoptRef(new LoadableTextTrack(track Client, loadingClient, kind, label, language, isDefault));53 return adoptRef(new LoadableTextTrack(track, kind, label, language, isDefault)); 54 54 } 55 55 virtual ~LoadableTextTrack(); 56 56 57 void load(const KURL&, ScriptExecutionContext*); 58 bool supportsType(const String&); 57 void scheduleLoad(const KURL&); 58 59 virtual void clearClient(); 59 60 60 61 private: … … 65 66 virtual void cueLoadingCompleted(TextTrackLoader*, bool loadingFailed); 66 67 67 LoadableTextTrack( TextTrackClient*, TextTrackLoadingClient*, const String& kind, const String& label, const String& language, bool isDefault);68 LoadableTextTrack(HTMLTrackElement*, const String& kind, const String& label, const String& language, bool isDefault); 68 69 70 void loadTimerFired(Timer<LoadableTextTrack>*); 71 72 HTMLTrackElement* m_trackElement; 73 Timer<LoadableTextTrack> m_loadTimer; 69 74 OwnPtr<TextTrackLoader> m_loader; 70 TextTrackLoadingClient* m_loadingClient;75 KURL m_url; 71 76 bool m_isDefault; 72 77 }; -
trunk/Source/WebCore/html/TextTrack.cpp
r99645 r99984 56 56 if (m_client) 57 57 m_client->textTrackRemoveCues(this, m_cues.get()); 58 setClient(0);58 clearClient(); 59 59 } 60 60 -
trunk/Source/WebCore/html/TextTrack.h
r99645 r99984 47 47 virtual void textTrackReadyStateChanged(TextTrack*) = 0; 48 48 virtual void textTrackModeChanged(TextTrack*) = 0; 49 virtual void textTrackCreated(TextTrack*) = 0;50 49 virtual void textTrackAddCues(TextTrack*, const TextTrackCueList*) = 0; 51 50 virtual void textTrackRemoveCues(TextTrack*, const TextTrackCueList*) = 0; … … 79 78 void modeChanged(); 80 79 80 virtual void clearClient() { m_client = 0; } 81 81 TextTrackClient* client() { return m_client; } 82 void setClient(TextTrackClient* client) { m_client = client; }83 82 84 83 void addCue(PassRefPtr<TextTrackCue>, ExceptionCode&); 85 84 void removeCue(PassRefPtr<TextTrackCue>, ExceptionCode&); 86 85 87 v irtual void newCuesLoaded();88 v irtual void fetchNewestCues(Vector<TextTrackCue*>&);86 void newCuesLoaded(); 87 void fetchNewestCues(Vector<TextTrackCue*>&); 89 88 90 89 protected: -
trunk/Source/WebCore/html/TextTrackCueList.cpp
r99234 r99984 70 70 void TextTrackCueList::add(PassRefPtr<TextTrackCue> cue, size_t start, size_t end) 71 71 { 72 ASSERT(start >= 0 && start<= m_list.size());73 ASSERT(end >= 0 && end<= m_list.size());72 ASSERT(start <= m_list.size()); 73 ASSERT(end <= m_list.size()); 74 74 75 75 // Maintain text track cue order: -
trunk/Source/WebCore/loader/TextTrackLoader.cpp
r98911 r99984 67 67 if (m_state >= Finished) 68 68 m_client->cueLoadingCompleted(this, m_state == Failed); 69 } 70 71 void TextTrackLoader::cancelLoad() 72 { 73 if (m_cachedCueData) { 74 m_cachedCueData->removeClient(this); 75 m_cachedCueData = 0; 76 } 69 77 } 70 78 … … 143 151 m_cueLoadTimer.startOneShot(0); 144 152 145 m_cachedCueData->removeClient(this); 146 m_cachedCueData = 0; 153 cancelLoad(); 147 154 } 148 155 … … 152 159 return false; 153 160 154 if (m_cachedCueData) { 155 m_cachedCueData->removeClient(this); 156 m_cachedCueData = 0; 157 } 161 cancelLoad(); 158 162 159 163 ASSERT(m_scriptExecutionContext->isDocument()); -
trunk/Source/WebCore/loader/TextTrackLoader.h
r98000 r99984 63 63 64 64 bool load(const KURL&); 65 void cancelLoad(); 65 66 void getNewCues(Vector<RefPtr<TextTrackCue> >& outputCues); 66 67 -
trunk/Source/WebCore/page/DOMWindow.idl
r99750 r99984 614 614 attribute [EnabledAtRuntime=webkitVideoTrack] TextTrackCueConstructor TextTrackCue; // Usable with the new operator 615 615 attribute [EnabledAtRuntime=webkitVideoTrack] TextTrackCueListConstructor TextTrackCueList; 616 attribute [EnabledAtRuntime=webkitVideoTrack] TextTrackListConstructor TextTrackList; 616 617 attribute [EnabledAtRuntime=webkitVideoTrack] TrackEventConstructor TrackEvent; 617 618 #endif
Note: See TracChangeset
for help on using the changeset viewer.