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

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

Issue 1810513002: Media element resource selection algorithm should "await a stable state" Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: changed loadtimer to texttrackloadtimer Created 4 years, 9 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
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 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
273 void attach(const AttachContext& = AttachContext()) override; 273 void attach(const AttachContext& = AttachContext()) override;
274 274
275 void didMoveToNewDocument(Document& oldDocument) override; 275 void didMoveToNewDocument(Document& oldDocument) override;
276 virtual KURL posterImageURL() const { return KURL(); } 276 virtual KURL posterImageURL() const { return KURL(); }
277 277
278 enum DisplayMode { Unknown, Poster, Video }; 278 enum DisplayMode { Unknown, Poster, Video };
279 DisplayMode getDisplayMode() const { return m_displayMode; } 279 DisplayMode getDisplayMode() const { return m_displayMode; }
280 virtual void setDisplayMode(DisplayMode mode) { m_displayMode = mode; } 280 virtual void setDisplayMode(DisplayMode mode) { m_displayMode = mode; }
281 281
282 private: 282 private:
283 class Task;
284
283 void resetMediaPlayerAndMediaSource(); 285 void resetMediaPlayerAndMediaSource();
284 286
285 bool alwaysCreateUserAgentShadowRoot() const final { return true; } 287 bool alwaysCreateUserAgentShadowRoot() const final { return true; }
286 bool areAuthorShadowsAllowed() const final { return false; } 288 bool areAuthorShadowsAllowed() const final { return false; }
287 289
288 bool supportsFocus() const final; 290 bool supportsFocus() const final;
289 bool isMouseFocusable() const final; 291 bool isMouseFocusable() const final;
290 bool layoutObjectIsNeeded(const ComputedStyle&) override; 292 bool layoutObjectIsNeeded(const ComputedStyle&) override;
291 LayoutObject* createLayoutObject(const ComputedStyle&) override; 293 LayoutObject* createLayoutObject(const ComputedStyle&) override;
292 InsertionNotificationRequest insertedInto(ContainerNode*) final; 294 InsertionNotificationRequest insertedInto(ContainerNode*) final;
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
324 WebMediaPlayer::TrackId addVideoTrack(const WebString&, WebMediaPlayerClient ::VideoTrackKind, const WebString&, const WebString&, bool) final; 326 WebMediaPlayer::TrackId addVideoTrack(const WebString&, WebMediaPlayerClient ::VideoTrackKind, const WebString&, const WebString&, bool) final;
325 void removeVideoTrack(WebMediaPlayer::TrackId) final; 327 void removeVideoTrack(WebMediaPlayer::TrackId) final;
326 void addTextTrack(WebInbandTextTrack*) final; 328 void addTextTrack(WebInbandTextTrack*) final;
327 void removeTextTrack(WebInbandTextTrack*) final; 329 void removeTextTrack(WebInbandTextTrack*) final;
328 void mediaSourceOpened(WebMediaSource*) final; 330 void mediaSourceOpened(WebMediaSource*) final;
329 void requestSeek(double) final; 331 void requestSeek(double) final;
330 void remoteRouteAvailabilityChanged(bool) final; 332 void remoteRouteAvailabilityChanged(bool) final;
331 void connectedToRemoteDevice() final; 333 void connectedToRemoteDevice() final;
332 void disconnectedFromRemoteDevice() final; 334 void disconnectedFromRemoteDevice() final;
333 335
334 void loadTimerFired(Timer<HTMLMediaElement>*); 336 void textTrackLoadTimerFired(Timer<HTMLMediaElement>*);
335 void progressEventTimerFired(Timer<HTMLMediaElement>*); 337 void progressEventTimerFired(Timer<HTMLMediaElement>*);
336 void playbackProgressTimerFired(Timer<HTMLMediaElement>*); 338 void playbackProgressTimerFired(Timer<HTMLMediaElement>*);
337 void startPlaybackProgressTimer(); 339 void startPlaybackProgressTimer();
338 void startProgressEventTimer(); 340 void startProgressEventTimer();
339 void stopPeriodicTimers(); 341 void stopPeriodicTimers();
340 342
341 void seek(double time); 343 void seek(double time);
342 void finishSeek(); 344 void finishSeek();
343 void checkIfSeekNeeded(); 345 void checkIfSeekNeeded();
344 void addPlayedRange(double start, double end); 346 void addPlayedRange(double start, double end);
345 347
346 void scheduleEvent(const AtomicString& eventName); // FIXME: Rename to sched uleNamedEvent for clarity. 348 void scheduleEvent(const AtomicString& eventName); // FIXME: Rename to sched uleNamedEvent for clarity.
347 349
348 // loading 350 // loading
349 void invokeLoadAlgorithm(); 351 void invokeLoadAlgorithm();
350 void invokeResourceSelectionAlgorithm(); 352 void invokeResourceSelectionAlgorithm();
353 void continueResourceSelectionAlgorithm();
354 void enqueueMicrotask();
351 void loadInternal(); 355 void loadInternal();
352 void selectMediaResource(); 356 void selectMediaResource();
353 void loadResource(const KURL&, ContentType&); 357 void loadResource(const KURL&, ContentType&);
354 void startPlayerLoad(); 358 void startPlayerLoad();
355 void setPlayerPreload(); 359 void setPlayerPreload();
356 WebMediaPlayer::LoadType loadType() const; 360 WebMediaPlayer::LoadType loadType() const;
357 void scheduleNextSourceChild();
358 void loadNextSourceChild(); 361 void loadNextSourceChild();
359 void clearMediaPlayer(); 362 void clearMediaPlayer();
360 void clearMediaPlayerAndAudioSourceProviderClientWithoutLocking(); 363 void clearMediaPlayerAndAudioSourceProviderClientWithoutLocking();
361 bool havePotentialSourceChild(); 364 bool havePotentialSourceChild();
362 void noneSupported(); 365 void noneSupported();
363 void mediaEngineError(MediaError*); 366 void mediaEngineError(MediaError*);
364 void cancelPendingEventsAndCallbacks(); 367 void cancelPendingEventsAndCallbacks();
365 void waitForSourceChange(); 368 void waitForSourceChange();
366 void setIgnorePreloadNone(); 369 void setIgnorePreloadNone();
367 370
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
458 void scheduleResolvePlayPromises(); 461 void scheduleResolvePlayPromises();
459 void scheduleRejectPlayPromises(ExceptionCode); 462 void scheduleRejectPlayPromises(ExceptionCode);
460 void scheduleNotifyPlaying(); 463 void scheduleNotifyPlaying();
461 464
462 void resolvePlayPromises(); 465 void resolvePlayPromises();
463 // TODO(mlamouri): this is used for cancellable tasks because we can't pass 466 // TODO(mlamouri): this is used for cancellable tasks because we can't pass
464 // parameters. 467 // parameters.
465 void rejectPlayPromises(); 468 void rejectPlayPromises();
466 void rejectPlayPromises(ExceptionCode, const String&); 469 void rejectPlayPromises(ExceptionCode, const String&);
467 470
468 UnthrottledTimer<HTMLMediaElement> m_loadTimer; 471 UnthrottledTimer<HTMLMediaElement> m_textTrackLoadTimer;
469 UnthrottledTimer<HTMLMediaElement> m_progressEventTimer; 472 UnthrottledTimer<HTMLMediaElement> m_progressEventTimer;
470 UnthrottledTimer<HTMLMediaElement> m_playbackProgressTimer; 473 UnthrottledTimer<HTMLMediaElement> m_playbackProgressTimer;
471 UnthrottledTimer<HTMLMediaElement> m_audioTracksTimer; 474 UnthrottledTimer<HTMLMediaElement> m_audioTracksTimer;
472 PersistentWillBeMember<TimeRanges> m_playedTimeRanges; 475 PersistentWillBeMember<TimeRanges> m_playedTimeRanges;
473 OwnPtrWillBeMember<GenericEventQueue> m_asyncEventQueue; 476 OwnPtrWillBeMember<GenericEventQueue> m_asyncEventQueue;
474 477
475 double m_playbackRate; 478 double m_playbackRate;
476 double m_defaultPlaybackRate; 479 double m_defaultPlaybackRate;
477 NetworkState m_networkState; 480 NetworkState m_networkState;
478 ReadyState m_readyState; 481 ReadyState m_readyState;
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
526 DisplayMode m_displayMode; 529 DisplayMode m_displayMode;
527 530
528 RefPtrWillBeMember<HTMLMediaSource> m_mediaSource; 531 RefPtrWillBeMember<HTMLMediaSource> m_mediaSource;
529 532
530 // Cached time value. Only valid when ready state is HAVE_METADATA or 533 // Cached time value. Only valid when ready state is HAVE_METADATA or
531 // higher, otherwise the current time is assumed to be zero. 534 // higher, otherwise the current time is assumed to be zero.
532 mutable double m_cachedTime; 535 mutable double m_cachedTime;
533 536
534 double m_fragmentEndTime; 537 double m_fragmentEndTime;
535 538
536 typedef unsigned PendingActionFlags;
537 PendingActionFlags m_pendingActionFlags;
538
539 // FIXME: HTMLMediaElement has way too many state bits. 539 // FIXME: HTMLMediaElement has way too many state bits.
540 bool m_userGestureRequiredForPlay : 1; 540 bool m_userGestureRequiredForPlay : 1;
541 bool m_playing : 1; 541 bool m_playing : 1;
542 bool m_shouldDelayLoadEvent : 1; 542 bool m_shouldDelayLoadEvent : 1;
543 bool m_haveFiredLoadedData : 1; 543 bool m_haveFiredLoadedData : 1;
544 bool m_autoplaying : 1; 544 bool m_autoplaying : 1;
545 bool m_muted : 1; 545 bool m_muted : 1;
546 bool m_paused : 1; 546 bool m_paused : 1;
547 bool m_seeking : 1; 547 bool m_seeking : 1;
548 548
(...skipping 26 matching lines...) Expand all
575 PersistentHeapVectorWillBeHeapVector<Member<ScriptPromiseResolver>> m_playRe solvers; 575 PersistentHeapVectorWillBeHeapVector<Member<ScriptPromiseResolver>> m_playRe solvers;
576 OwnPtr<CancellableTaskFactory> m_playPromiseResolveTask; 576 OwnPtr<CancellableTaskFactory> m_playPromiseResolveTask;
577 OwnPtr<CancellableTaskFactory> m_playPromiseRejectTask; 577 OwnPtr<CancellableTaskFactory> m_playPromiseRejectTask;
578 ExceptionCode m_playPromiseErrorCode; 578 ExceptionCode m_playPromiseErrorCode;
579 579
580 // This is a weak reference, since m_audioSourceNode holds a reference to us . 580 // This is a weak reference, since m_audioSourceNode holds a reference to us .
581 // FIXME: Oilpan: Consider making this a strongly traced pointer with oilpan where strong cycles are not a problem. 581 // FIXME: Oilpan: Consider making this a strongly traced pointer with oilpan where strong cycles are not a problem.
582 GC_PLUGIN_IGNORE("http://crbug.com/404577") 582 GC_PLUGIN_IGNORE("http://crbug.com/404577")
583 RawPtrWillBeWeakMember<AudioSourceProviderClient> m_audioSourceNode; 583 RawPtrWillBeWeakMember<AudioSourceProviderClient> m_audioSourceNode;
584 584
585 WeakPtr<Task> m_pendingTask; // owned by Microtask
586
585 // AudioClientImpl wraps an AudioSourceProviderClient. 587 // AudioClientImpl wraps an AudioSourceProviderClient.
586 // When the audio format is known, Chromium calls setFormat(). 588 // When the audio format is known, Chromium calls setFormat().
587 class AudioClientImpl final : public GarbageCollectedFinalized<AudioClientIm pl>, public WebAudioSourceProviderClient { 589 class AudioClientImpl final : public GarbageCollectedFinalized<AudioClientIm pl>, public WebAudioSourceProviderClient {
588 public: 590 public:
589 explicit AudioClientImpl(AudioSourceProviderClient* client) 591 explicit AudioClientImpl(AudioSourceProviderClient* client)
590 : m_client(client) 592 : m_client(client)
591 { 593 {
592 } 594 }
593 595
594 ~AudioClientImpl() override { } 596 ~AudioClientImpl() override { }
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
644 inline bool isHTMLMediaElement(const HTMLElement& element) 646 inline bool isHTMLMediaElement(const HTMLElement& element)
645 { 647 {
646 return isHTMLAudioElement(element) || isHTMLVideoElement(element); 648 return isHTMLAudioElement(element) || isHTMLVideoElement(element);
647 } 649 }
648 650
649 DEFINE_HTMLELEMENT_TYPE_CASTS_WITH_FUNCTION(HTMLMediaElement); 651 DEFINE_HTMLELEMENT_TYPE_CASTS_WITH_FUNCTION(HTMLMediaElement);
650 652
651 } // namespace blink 653 } // namespace blink
652 654
653 #endif // HTMLMediaElement_h 655 #endif // HTMLMediaElement_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698