Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(811)

Side by Side Diff: Source/core/html/HTMLMediaElement.h

Issue 913133003: Move text track active list management to CueTimeline (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Rename to CueTimeline. Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc. All rights reserved. 2 * Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 12 matching lines...) Expand all
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 */ 24 */
25 25
26 #ifndef HTMLMediaElement_h 26 #ifndef HTMLMediaElement_h
27 #define HTMLMediaElement_h 27 #define HTMLMediaElement_h
28 28
29 #include "core/dom/ActiveDOMObject.h" 29 #include "core/dom/ActiveDOMObject.h"
30 #include "core/events/GenericEventQueue.h" 30 #include "core/events/GenericEventQueue.h"
31 #include "core/html/HTMLElement.h" 31 #include "core/html/HTMLElement.h"
32 #include "core/html/track/TextTrack.h" 32 #include "core/html/track/TextTrack.h"
33 #include "core/html/track/TextTrackCue.h"
34 #include "core/html/track/vtt/VTTCue.h"
35 #include "platform/PODIntervalTree.h"
36 #include "platform/Supplementable.h" 33 #include "platform/Supplementable.h"
37 #include "platform/graphics/media/MediaPlayer.h" 34 #include "platform/graphics/media/MediaPlayer.h"
38 #include "public/platform/WebMediaPlayerClient.h" 35 #include "public/platform/WebMediaPlayerClient.h"
39 #include "public/platform/WebMimeRegistry.h" 36 #include "public/platform/WebMimeRegistry.h"
40 37
41 namespace blink { 38 namespace blink {
42 class WebInbandTextTrack; 39 class WebInbandTextTrack;
43 class WebLayer; 40 class WebLayer;
44 } 41 }
45 42
46 namespace blink { 43 namespace blink {
47 44
48 #if ENABLE(WEB_AUDIO) 45 #if ENABLE(WEB_AUDIO)
49 class AudioSourceProvider; 46 class AudioSourceProvider;
50 class AudioSourceProviderClient; 47 class AudioSourceProviderClient;
51 #endif 48 #endif
52 class AudioTrackList; 49 class AudioTrackList;
53 class ContentType; 50 class ContentType;
51 class CueTimeline;
54 class Event; 52 class Event;
55 class ExceptionState; 53 class ExceptionState;
56 class HTMLSourceElement; 54 class HTMLSourceElement;
57 class HTMLTrackElement; 55 class HTMLTrackElement;
58 class KURL; 56 class KURL;
59 class MediaController; 57 class MediaController;
60 class MediaControls; 58 class MediaControls;
61 class MediaError; 59 class MediaError;
62 class HTMLMediaSource; 60 class HTMLMediaSource;
63 class TextTrackList; 61 class TextTrackList;
64 class TimeRanges; 62 class TimeRanges;
65 class URLRegistry; 63 class URLRegistry;
66 class VideoTrackList; 64 class VideoTrackList;
67 65
68 typedef PODIntervalTree<double, TextTrackCue*> CueIntervalTree;
69 typedef CueIntervalTree::IntervalType CueInterval;
70 typedef Vector<CueInterval> CueList;
71
72 // FIXME: The inheritance from MediaPlayerClient here should be private inherita nce. 66 // FIXME: The inheritance from MediaPlayerClient here should be private inherita nce.
73 // But it can't be until the Chromium WebMediaPlayerClientImpl class is fixed so it 67 // But it can't be until the Chromium WebMediaPlayerClientImpl class is fixed so it
74 // no longer depends on typecasting a MediaPlayerClient to an HTMLMediaElement. 68 // no longer depends on typecasting a MediaPlayerClient to an HTMLMediaElement.
75 69
76 class HTMLMediaElement : public HTMLElement, public WillBeHeapSupplementable<HTM LMediaElement>, public MediaPlayerClient, public ActiveDOMObject { 70 class HTMLMediaElement : public HTMLElement, public WillBeHeapSupplementable<HTM LMediaElement>, public MediaPlayerClient, public ActiveDOMObject {
77 DEFINE_WRAPPERTYPEINFO(); 71 DEFINE_WRAPPERTYPEINFO();
78 WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(HTMLMediaElement); 72 WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(HTMLMediaElement);
79 public: 73 public:
80 static blink::WebMimeRegistry::SupportsType supportsType(const ContentType&, const String& keySystem = String()); 74 static blink::WebMimeRegistry::SupportsType supportsType(const ContentType&, const String& keySystem = String());
81 75
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 165
172 AudioTrackList& audioTracks(); 166 AudioTrackList& audioTracks();
173 void audioTrackChanged(); 167 void audioTrackChanged();
174 168
175 VideoTrackList& videoTracks(); 169 VideoTrackList& videoTracks();
176 void selectedVideoTrackChanged(blink::WebMediaPlayer::TrackId*); 170 void selectedVideoTrackChanged(blink::WebMediaPlayer::TrackId*);
177 171
178 PassRefPtrWillBeRawPtr<TextTrack> addTextTrack(const AtomicString& kind, con st AtomicString& label, const AtomicString& language, ExceptionState&); 172 PassRefPtrWillBeRawPtr<TextTrack> addTextTrack(const AtomicString& kind, con st AtomicString& label, const AtomicString& language, ExceptionState&);
179 173
180 TextTrackList* textTracks(); 174 TextTrackList* textTracks();
181 CueList currentlyActiveCues() const { return m_currentlyActiveCues; } 175 CueTimeline& cueTimeline();
182 176
183 void addTextTrack(TextTrack*); 177 void addTextTrack(TextTrack*);
184 void removeTextTrack(TextTrack*); 178 void removeTextTrack(TextTrack*);
185 void textTracksChanged(); 179 void textTracksChanged();
186 void notifyMediaPlayerOfTextTrackChanges(); 180 void notifyMediaPlayerOfTextTrackChanges();
187 181
188 // Implements the "forget the media element's media-resource-specific tracks " algorithm in the HTML5 spec. 182 // Implements the "forget the media element's media-resource-specific tracks " algorithm in the HTML5 spec.
189 void forgetResourceSpecificTracks(); 183 void forgetResourceSpecificTracks();
190 184
191 void didAddTrackElement(HTMLTrackElement*); 185 void didAddTrackElement(HTMLTrackElement*);
(...skipping 11 matching lines...) Expand all
203 197
204 void honorUserPreferencesForAutomaticTextTrackSelection(); 198 void honorUserPreferencesForAutomaticTextTrackSelection();
205 199
206 bool textTracksAreReady() const; 200 bool textTracksAreReady() const;
207 enum VisibilityChangeAssumption { 201 enum VisibilityChangeAssumption {
208 AssumeNoVisibleChange, 202 AssumeNoVisibleChange,
209 AssumeVisibleChange 203 AssumeVisibleChange
210 }; 204 };
211 void configureTextTrackDisplay(VisibilityChangeAssumption); 205 void configureTextTrackDisplay(VisibilityChangeAssumption);
212 void updateTextTrackDisplay(); 206 void updateTextTrackDisplay();
207 double lastSeekTime() const { return m_lastSeekTime; }
213 void textTrackReadyStateChanged(TextTrack*); 208 void textTrackReadyStateChanged(TextTrack*);
214 209
215 void textTrackKindChanged(TextTrack*); 210 void textTrackKindChanged(TextTrack*);
216 void textTrackModeChanged(TextTrack*); 211 void textTrackModeChanged(TextTrack*);
217 void textTrackAddCues(TextTrack*, const TextTrackCueList*);
218 void textTrackRemoveCues(TextTrack*, const TextTrackCueList*);
219 void textTrackAddCue(TextTrack*, PassRefPtrWillBeRawPtr<TextTrackCue>);
220 void textTrackRemoveCue(TextTrack*, PassRefPtrWillBeRawPtr<TextTrackCue>);
221 212
222 // EventTarget function. 213 // EventTarget function.
223 // Both Node (via HTMLElement) and ActiveDOMObject define this method, which 214 // Both Node (via HTMLElement) and ActiveDOMObject define this method, which
224 // causes an ambiguity error at compile time. This class's constructor 215 // causes an ambiguity error at compile time. This class's constructor
225 // ensures that both implementations return document, so return the result 216 // ensures that both implementations return document, so return the result
226 // of one of them here. 217 // of one of them here.
227 using HTMLElement::executionContext; 218 using HTMLElement::executionContext;
228 219
229 bool hasSingleSecurityOrigin() const { return !m_player || (webMediaPlayer() && webMediaPlayer()->hasSingleSecurityOrigin()); } 220 bool hasSingleSecurityOrigin() const { return !m_player || (webMediaPlayer() && webMediaPlayer()->hasSingleSecurityOrigin()); }
230 221
(...skipping 29 matching lines...) Expand all
260 bool isSafeToLoadURL(const KURL&, InvalidURLAction); 251 bool isSafeToLoadURL(const KURL&, InvalidURLAction);
261 252
262 // Checks to see if current media data is CORS-same-origin as the 253 // Checks to see if current media data is CORS-same-origin as the
263 // specified origin. 254 // specified origin.
264 bool isMediaDataCORSSameOrigin(SecurityOrigin*) const; 255 bool isMediaDataCORSSameOrigin(SecurityOrigin*) const;
265 256
266 MediaController* controller() const; 257 MediaController* controller() const;
267 void setController(PassRefPtrWillBeRawPtr<MediaController>); // Resets the M ediaGroup and sets the MediaController. 258 void setController(PassRefPtrWillBeRawPtr<MediaController>); // Resets the M ediaGroup and sets the MediaController.
268 259
269 void scheduleEvent(PassRefPtrWillBeRawPtr<Event>); 260 void scheduleEvent(PassRefPtrWillBeRawPtr<Event>);
261 void scheduleTimeupdateEvent(bool periodicEvent);
270 262
271 // Returns the "effective media volume" value as specified in the HTML5 spec . 263 // Returns the "effective media volume" value as specified in the HTML5 spec .
272 double effectiveMediaVolume() const; 264 double effectiveMediaVolume() const;
273 265
274 #if ENABLE(OILPAN) 266 #if ENABLE(OILPAN)
275 bool isFinalizing() const { return m_isFinalizing; } 267 bool isFinalizing() const { return m_isFinalizing; }
276 268
277 // Oilpan: finalization of the media element is observable from its 269 // Oilpan: finalization of the media element is observable from its
278 // attached MediaSource; it entering a closed state. 270 // attached MediaSource; it entering a closed state.
279 // 271 //
(...skipping 18 matching lines...) Expand all
298 virtual void attach(const AttachContext& = AttachContext()) override; 290 virtual void attach(const AttachContext& = AttachContext()) override;
299 291
300 virtual void didMoveToNewDocument(Document& oldDocument) override; 292 virtual void didMoveToNewDocument(Document& oldDocument) override;
301 293
302 enum DisplayMode { Unknown, Poster, Video }; 294 enum DisplayMode { Unknown, Poster, Video };
303 DisplayMode displayMode() const { return m_displayMode; } 295 DisplayMode displayMode() const { return m_displayMode; }
304 virtual void setDisplayMode(DisplayMode mode) { m_displayMode = mode; } 296 virtual void setDisplayMode(DisplayMode mode) { m_displayMode = mode; }
305 297
306 void setControllerInternal(PassRefPtrWillBeRawPtr<MediaController>); 298 void setControllerInternal(PassRefPtrWillBeRawPtr<MediaController>);
307 299
308 bool ignoreTrackDisplayUpdateRequests() const { return m_ignoreTrackDisplayU pdate > 0; }
309 void beginIgnoringTrackDisplayUpdateRequests();
310 void endIgnoringTrackDisplayUpdateRequests();
311
312 private: 300 private:
313 void createMediaPlayer(); 301 void createMediaPlayer();
314 302
315 virtual bool alwaysCreateUserAgentShadowRoot() const override final { return true; } 303 virtual bool alwaysCreateUserAgentShadowRoot() const override final { return true; }
316 virtual bool areAuthorShadowsAllowed() const override final { return false; } 304 virtual bool areAuthorShadowsAllowed() const override final { return false; }
317 305
318 virtual bool supportsFocus() const override final; 306 virtual bool supportsFocus() const override final;
319 virtual bool isMouseFocusable() const override final; 307 virtual bool isMouseFocusable() const override final;
320 virtual bool rendererIsNeeded(const LayoutStyle&) override; 308 virtual bool rendererIsNeeded(const LayoutStyle&) override;
321 virtual LayoutObject* createRenderer(const LayoutStyle&) override; 309 virtual LayoutObject* createRenderer(const LayoutStyle&) override;
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
354 void playbackProgressTimerFired(Timer<HTMLMediaElement>*); 342 void playbackProgressTimerFired(Timer<HTMLMediaElement>*);
355 void startPlaybackProgressTimer(); 343 void startPlaybackProgressTimer();
356 void startProgressEventTimer(); 344 void startProgressEventTimer();
357 void stopPeriodicTimers(); 345 void stopPeriodicTimers();
358 346
359 void seek(double time); 347 void seek(double time);
360 void finishSeek(); 348 void finishSeek();
361 void checkIfSeekNeeded(); 349 void checkIfSeekNeeded();
362 void addPlayedRange(double start, double end); 350 void addPlayedRange(double start, double end);
363 351
364 void scheduleTimeupdateEvent(bool periodicEvent);
365 void scheduleEvent(const AtomicString& eventName); // FIXME: Rename to sched uleNamedEvent for clarity. 352 void scheduleEvent(const AtomicString& eventName); // FIXME: Rename to sched uleNamedEvent for clarity.
366 353
367 // loading 354 // loading
368 void prepareForLoad(); 355 void prepareForLoad();
369 void loadInternal(); 356 void loadInternal();
370 void selectMediaResource(); 357 void selectMediaResource();
371 void loadResource(const KURL&, ContentType&, const String& keySystem); 358 void loadResource(const KURL&, ContentType&, const String& keySystem);
372 void startPlayerLoad(); 359 void startPlayerLoad();
373 void setPlayerPreload(); 360 void setPlayerPreload();
374 blink::WebMediaPlayer::LoadType loadType() const; 361 blink::WebMediaPlayer::LoadType loadType() const;
(...skipping 14 matching lines...) Expand all
389 void mediaLoadingFailed(blink::WebMediaPlayer::NetworkState); 376 void mediaLoadingFailed(blink::WebMediaPlayer::NetworkState);
390 377
391 // deferred loading (preload=none) 378 // deferred loading (preload=none)
392 bool loadIsDeferred() const; 379 bool loadIsDeferred() const;
393 void deferLoad(); 380 void deferLoad();
394 void cancelDeferredLoad(); 381 void cancelDeferredLoad();
395 void startDeferredLoad(); 382 void startDeferredLoad();
396 void executeDeferredLoad(); 383 void executeDeferredLoad();
397 void deferredLoadTimerFired(Timer<HTMLMediaElement>*); 384 void deferredLoadTimerFired(Timer<HTMLMediaElement>*);
398 385
399 void updateActiveTextTrackCues(double);
400 HTMLTrackElement* showingTrackWithSameKind(HTMLTrackElement*) const; 386 HTMLTrackElement* showingTrackWithSameKind(HTMLTrackElement*) const;
401 387
402 void markCaptionAndSubtitleTracksAsUnconfigured(); 388 void markCaptionAndSubtitleTracksAsUnconfigured();
403 389
404 // This does not check user gesture restrictions. 390 // This does not check user gesture restrictions.
405 void playInternal(); 391 void playInternal();
406 392
407 void gesturelessInitialPlayHalted(); 393 void gesturelessInitialPlayHalted();
408 void autoplayMediaEncountered(); 394 void autoplayMediaEncountered();
409 void allowVideoRendering(); 395 void allowVideoRendering();
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
552 538
553 bool m_tracksAreReady : 1; 539 bool m_tracksAreReady : 1;
554 bool m_haveVisibleTextTrack : 1; 540 bool m_haveVisibleTextTrack : 1;
555 bool m_processingPreferenceChange : 1; 541 bool m_processingPreferenceChange : 1;
556 bool m_remoteRoutesAvailable : 1; 542 bool m_remoteRoutesAvailable : 1;
557 bool m_playingRemotely : 1; 543 bool m_playingRemotely : 1;
558 #if ENABLE(OILPAN) 544 #if ENABLE(OILPAN)
559 bool m_isFinalizing : 1; 545 bool m_isFinalizing : 1;
560 bool m_closeMediaSourceWhenFinalizing : 1; 546 bool m_closeMediaSourceWhenFinalizing : 1;
561 #endif 547 #endif
562 double m_lastTextTrackUpdateTime;
563 bool m_initialPlayWithoutUserGestures : 1; 548 bool m_initialPlayWithoutUserGestures : 1;
564 bool m_autoplayMediaCounted : 1; 549 bool m_autoplayMediaCounted : 1;
565 550
566 RefPtrWillBeMember<AudioTrackList> m_audioTracks; 551 RefPtrWillBeMember<AudioTrackList> m_audioTracks;
567 RefPtrWillBeMember<VideoTrackList> m_videoTracks; 552 RefPtrWillBeMember<VideoTrackList> m_videoTracks;
568 RefPtrWillBeMember<TextTrackList> m_textTracks; 553 RefPtrWillBeMember<TextTrackList> m_textTracks;
569 WillBeHeapVector<RefPtrWillBeMember<TextTrack>> m_textTracksWhenResourceSele ctionBegan; 554 WillBeHeapVector<RefPtrWillBeMember<TextTrack>> m_textTracksWhenResourceSele ctionBegan;
570 555
571 CueIntervalTree m_cueTree; 556 OwnPtrWillBeMember<CueTimeline> m_cueTimeline;
572
573 CueList m_currentlyActiveCues;
574 int m_ignoreTrackDisplayUpdate;
575 557
576 #if ENABLE(WEB_AUDIO) 558 #if ENABLE(WEB_AUDIO)
577 // This is a weak reference, since m_audioSourceNode holds a reference to us . 559 // This is a weak reference, since m_audioSourceNode holds a reference to us .
578 // FIXME: Oilpan: Consider making this a strongly traced pointer with oilpan where strong cycles are not a problem. 560 // FIXME: Oilpan: Consider making this a strongly traced pointer with oilpan where strong cycles are not a problem.
579 GC_PLUGIN_IGNORE("http://crbug.com/404577") 561 GC_PLUGIN_IGNORE("http://crbug.com/404577")
580 RawPtrWillBeWeakMember<AudioSourceProviderClient> m_audioSourceNode; 562 RawPtrWillBeWeakMember<AudioSourceProviderClient> m_audioSourceNode;
581 #endif 563 #endif
582 564
583 friend class MediaController; 565 friend class MediaController;
584 RefPtrWillBeMember<MediaController> m_mediaController; 566 RefPtrWillBeMember<MediaController> m_mediaController;
585 567
586 friend class Internals; 568 friend class Internals;
587 friend class TrackDisplayUpdateScope; 569 friend class TrackDisplayUpdateScope;
588 570
589 static URLRegistry* s_mediaStreamRegistry; 571 static URLRegistry* s_mediaStreamRegistry;
590 }; 572 };
591 573
592 #ifndef NDEBUG
593 // Template specializations required by PodIntervalTree in debug mode.
594 template <>
595 struct ValueToString<double> {
596 static String string(const double value)
597 {
598 return String::number(value);
599 }
600 };
601
602 template <>
603 struct ValueToString<TextTrackCue*> {
604 static String string(TextTrackCue* const& cue)
605 {
606 return cue->toString();
607 }
608 };
609 #endif
610
611 inline bool isHTMLMediaElement(const HTMLElement& element) 574 inline bool isHTMLMediaElement(const HTMLElement& element)
612 { 575 {
613 return isHTMLAudioElement(element) || isHTMLVideoElement(element); 576 return isHTMLAudioElement(element) || isHTMLVideoElement(element);
614 } 577 }
615 578
616 DEFINE_HTMLELEMENT_TYPE_CASTS_WITH_FUNCTION(HTMLMediaElement); 579 DEFINE_HTMLELEMENT_TYPE_CASTS_WITH_FUNCTION(HTMLMediaElement);
617 580
618 } // namespace blink 581 } // namespace blink
619 582
620 #endif // HTMLMediaElement_h 583 #endif // HTMLMediaElement_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698