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

Unified Diff: sky/engine/core/html/HTMLMediaElement.h

Issue 689373003: Remove most of the media stack. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 6 years, 1 month 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « sky/engine/core/frame/UseCounter.cpp ('k') | sky/engine/core/html/HTMLMediaElement.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sky/engine/core/html/HTMLMediaElement.h
diff --git a/sky/engine/core/html/HTMLMediaElement.h b/sky/engine/core/html/HTMLMediaElement.h
deleted file mode 100644
index 4730c4f72912ad79bcfbcc5e820093d8ec53bfa9..0000000000000000000000000000000000000000
--- a/sky/engine/core/html/HTMLMediaElement.h
+++ /dev/null
@@ -1,442 +0,0 @@
-/*
- * Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012, 2013 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 COMPUTER, 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 COMPUTER, 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.
- */
-
-#ifndef HTMLMediaElement_h
-#define HTMLMediaElement_h
-
-#include "core/dom/ActiveDOMObject.h"
-#include "core/events/GenericEventQueue.h"
-#include "core/html/HTMLElement.h"
-#include "platform/PODIntervalTree.h"
-#include "platform/Supplementable.h"
-#include "platform/graphics/media/MediaPlayer.h"
-#include "public/platform/WebMediaPlayerClient.h"
-#include "public/platform/WebMimeRegistry.h"
-
-namespace blink {
-class WebLayer;
-}
-
-namespace blink {
-
-class ContentType;
-class Event;
-class ExceptionState;
-class HTMLSourceElement;
-class KURL;
-class MediaError;
-class HTMLMediaSource;
-class TimeRanges;
-class URLRegistry;
-
-// FIXME: The inheritance from MediaPlayerClient here should be private inheritance.
-// But it can't be until the Chromium WebMediaPlayerClientImpl class is fixed so it
-// no longer depends on typecasting a MediaPlayerClient to an HTMLMediaElement.
-
-class HTMLMediaElement : public HTMLElement, public Supplementable<HTMLMediaElement>, public MediaPlayerClient, public ActiveDOMObject
-{
- DEFINE_WRAPPERTYPEINFO();
- WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(HTMLMediaElement);
-public:
- static blink::WebMimeRegistry::SupportsType supportsType(const ContentType&, const String& keySystem = String());
-
- // Do not use player().
- // FIXME: Replace all uses with webMediaPlayer() and remove this API.
- MediaPlayer* player() const { return m_player.get(); }
- blink::WebMediaPlayer* webMediaPlayer() const { return m_player ? m_player->webMediaPlayer() : 0; }
-
- virtual bool hasVideo() const { return false; }
- bool hasAudio() const;
-
- bool supportsSave() const;
-
- blink::WebLayer* platformLayer() const;
-
- enum DelayedActionType {
- LoadMediaResource = 1 << 0,
- };
- void scheduleDelayedAction(DelayedActionType);
-
- bool isActive() const { return m_active; }
-
- // error state
- PassRefPtr<MediaError> error() const;
-
- // network state
- void setSrc(const AtomicString&);
- const KURL& currentSrc() const { return m_currentSrc; }
-
- enum NetworkState { NETWORK_EMPTY, NETWORK_IDLE, NETWORK_LOADING, NETWORK_NO_SOURCE };
- NetworkState networkState() const;
-
- String preload() const;
- void setPreload(const AtomicString&);
-
- PassRefPtr<TimeRanges> buffered() const;
- void load();
- String canPlayType(const String& mimeType, const String& keySystem = String()) const;
-
- // ready state
- enum ReadyState { HAVE_NOTHING, HAVE_METADATA, HAVE_CURRENT_DATA, HAVE_FUTURE_DATA, HAVE_ENOUGH_DATA };
- ReadyState readyState() const;
- bool seeking() const;
-
- // playback state
- double currentTime() const;
- void setCurrentTime(double, ExceptionState&);
- double duration() const;
- bool paused() const;
- double defaultPlaybackRate() const;
- void setDefaultPlaybackRate(double);
- double playbackRate() const;
- void setPlaybackRate(double);
- void updatePlaybackRate();
- PassRefPtr<TimeRanges> played();
- PassRefPtr<TimeRanges> seekable() const;
- bool ended() const;
- bool autoplay() const;
- bool loop() const;
- void setLoop(bool b);
- void play();
- void pause();
-
- // media source extensions
- void closeMediaSource();
- void durationChanged(double duration, bool requestSeek);
-
- double volume() const;
- void setVolume(double, ExceptionState&);
- bool muted() const;
- void setMuted(bool);
-
- // play/pause toggling that uses the media controller if present. togglePlayStateWillPlay() is
- // true if togglePlayState() will call play() or unpause() on the media element or controller.
- bool togglePlayStateWillPlay() const;
- void togglePlayState();
-
- virtual KURL mediaPlayerPosterURL() override { return KURL(); }
-
- // EventTarget function.
- // Both Node (via HTMLElement) and ActiveDOMObject define this method, which
- // causes an ambiguity error at compile time. This class's constructor
- // ensures that both implementations return document, so return the result
- // of one of them here.
- using HTMLElement::executionContext;
-
- bool isFullscreen() const;
- void enterFullscreen();
- void exitFullscreen();
-
- void sourceWasRemoved(HTMLSourceElement*);
- void sourceWasAdded(HTMLSourceElement*);
-
- bool isPlaying() const { return m_playing; }
-
- // ActiveDOMObject functions.
- virtual bool hasPendingActivity() const override final;
- virtual void contextDestroyed() override final;
-
- enum InvalidURLAction { DoNothing, Complain };
- bool isSafeToLoadURL(const KURL&, InvalidURLAction);
-
- void scheduleEvent(PassRefPtr<Event>);
-
- // Returns the "effective media volume" value as specified in the HTML5 spec.
- double effectiveMediaVolume() const;
-
-#if ENABLE(OILPAN)
- bool isFinalizing() const { return m_isFinalizing; }
-
- // Oilpan: finalization of the media element is observable from its
- // attached MediaSource; it entering a closed state.
- //
- // Express that by having the MediaSource keep a weak reference
- // to the media element and signal that it wants to be notified
- // of destruction if it survives a GC, but the media element
- // doesn't.
- void setCloseMediaSourceWhenFinalizing();
-#endif
-
-protected:
- HTMLMediaElement(const QualifiedName&, Document&);
- virtual ~HTMLMediaElement();
-
- virtual void parseAttribute(const QualifiedName&, const AtomicString&) override;
- virtual void finishParsingChildren() override final;
- virtual bool isURLAttribute(const Attribute&) const override;
- virtual void attach(const AttachContext& = AttachContext()) override;
-
- virtual void didMoveToNewDocument(Document& oldDocument) override;
-
- enum DisplayMode { Unknown, Poster, PosterWaitingForVideo, Video };
- DisplayMode displayMode() const { return m_displayMode; }
- virtual void setDisplayMode(DisplayMode mode) { m_displayMode = mode; }
-
-private:
- void createMediaPlayer();
-
- virtual bool isMouseFocusable() const override final;
- virtual bool rendererIsNeeded(const RenderStyle&) override;
- virtual RenderObject* createRenderer(RenderStyle*) override;
- virtual InsertionNotificationRequest insertedInto(ContainerNode*) override final;
- virtual void didNotifySubtreeInsertionsToDocument() override;
- virtual void removedFrom(ContainerNode*) override final;
- virtual void didRecalcStyle(StyleRecalcChange) override final;
-
- virtual void defaultEventHandler(Event*) override final;
-
- // ActiveDOMObject functions.
- virtual void stop() override final;
-
- virtual void updateDisplayState() { }
-
- void setReadyState(ReadyState);
- void setNetworkState(blink::WebMediaPlayer::NetworkState);
-
- virtual void mediaPlayerNetworkStateChanged() override final;
- virtual void mediaPlayerReadyStateChanged() override final;
- virtual void mediaPlayerTimeChanged() override final;
- virtual void mediaPlayerDurationChanged() override final;
- virtual void mediaPlayerPlaybackStateChanged() override final;
- virtual void mediaPlayerRequestFullscreen() override final;
- virtual void mediaPlayerRequestSeek(double) override final;
- virtual void mediaPlayerRepaint() override final;
- virtual void mediaPlayerSizeChanged() override final;
- virtual void mediaPlayerSetWebLayer(blink::WebLayer*) override final;
- virtual void mediaPlayerMediaSourceOpened(blink::WebMediaSource*) override final;
-
- void loadTimerFired(Timer<HTMLMediaElement>*);
- void progressEventTimerFired(Timer<HTMLMediaElement>*);
- void playbackProgressTimerFired(Timer<HTMLMediaElement>*);
- void startPlaybackProgressTimer();
- void startProgressEventTimer();
- void stopPeriodicTimers();
-
- void seek(double time, ExceptionState&);
- void finishSeek();
- void checkIfSeekNeeded();
- void addPlayedRange(double start, double end);
-
- void scheduleTimeupdateEvent(bool periodicEvent);
- void scheduleEvent(const AtomicString& eventName); // FIXME: Rename to scheduleNamedEvent for clarity.
-
- // loading
- void prepareForLoad();
- void loadInternal();
- void selectMediaResource();
- void loadResource(const KURL&, ContentType&, const String& keySystem);
- void startPlayerLoad();
- void setPlayerPreload();
- blink::WebMediaPlayer::LoadType loadType() const;
- void scheduleNextSourceChild();
- void loadNextSourceChild();
- void userCancelledLoad();
- void clearMediaPlayer(int flags);
- void clearMediaPlayerAndAudioSourceProviderClientWithoutLocking();
- bool havePotentialSourceChild();
- void noneSupported();
- void mediaEngineError(PassRefPtr<MediaError>);
- void cancelPendingEventsAndCallbacks();
- void waitForSourceChange();
- void prepareToPlay();
-
- KURL selectNextSourceChild(ContentType*, String* keySystem, InvalidURLAction);
-
- void mediaLoadingFailed(blink::WebMediaPlayer::NetworkState);
-
- // deferred loading (preload=none)
- bool loadIsDeferred() const;
- void deferLoad();
- void cancelDeferredLoad();
- void startDeferredLoad();
- void executeDeferredLoad();
- void deferredLoadTimerFired(Timer<HTMLMediaElement>*);
-
- // This does not check user gesture restrictions.
- void playInternal();
-
- void allowVideoRendering();
-
- void updateVolume();
- void updatePlayState();
- bool potentiallyPlaying() const;
- bool endedPlayback() const;
- bool stoppedDueToErrors() const;
- bool couldPlayIfEnoughData() const;
-
- // Pauses playback without changing any states or generating events
- void setPausedInternal(bool);
-
- void setShouldDelayLoadEvent(bool);
- void invalidateCachedTime();
- void refreshCachedTime() const;
-
- void prepareMediaFragmentURI();
- void applyMediaFragmentURI();
-
- virtual void* preDispatchEventHandler(Event*) override final;
-
- void changeNetworkStateFromLoadingToIdle();
-
- const AtomicString& mediaGroup() const;
- void setMediaGroup(const AtomicString&);
- bool isBlocked() const;
- bool isAutoplaying() const { return m_autoplaying; }
-
- blink::WebMediaPlayer::CORSMode corsMode() const;
-
- // Returns the "direction of playback" value as specified in the HTML5 spec.
- enum DirectionOfPlayback { Backward, Forward };
- DirectionOfPlayback directionOfPlayback() const;
-
- // Returns the "effective playback rate" value as specified in the HTML5 spec.
- double effectivePlaybackRate() const;
-
- Timer<HTMLMediaElement> m_loadTimer;
- Timer<HTMLMediaElement> m_progressEventTimer;
- Timer<HTMLMediaElement> m_playbackProgressTimer;
- RefPtr<TimeRanges> m_playedTimeRanges;
- OwnPtr<GenericEventQueue> m_asyncEventQueue;
-
- double m_playbackRate;
- double m_defaultPlaybackRate;
- NetworkState m_networkState;
- ReadyState m_readyState;
- ReadyState m_readyStateMaximum;
- KURL m_currentSrc;
-
- RefPtr<MediaError> m_error;
-
- double m_volume;
- double m_lastSeekTime;
-
- double m_previousProgressTime;
-
- // Cached duration to suppress duplicate events if duration unchanged.
- double m_duration;
-
- // The last time a timeupdate event was sent (wall clock).
- double m_lastTimeUpdateEventWallTime;
-
- // The last time a timeupdate event was sent in movie time.
- double m_lastTimeUpdateEventMovieTime;
-
- // Loading state.
- enum LoadState { WaitingForSource, LoadingFromSrcAttr, LoadingFromSourceElement };
- LoadState m_loadState;
- RefPtr<HTMLSourceElement> m_currentSourceNode;
- RefPtr<Node> m_nextChildNodeToConsider;
-
- // "Deferred loading" state (for preload=none).
- enum DeferredLoadState {
- // The load is not deferred.
- NotDeferred,
- // The load is deferred, and waiting for the task to set the
- // delaying-the-load-event flag (to false).
- WaitingForStopDelayingLoadEventTask,
- // The load is the deferred, and waiting for a triggering event.
- WaitingForTrigger,
- // The load is deferred, and waiting for the task to set the
- // delaying-the-load-event flag, after which the load will be executed.
- ExecuteOnStopDelayingLoadEventTask
- };
- DeferredLoadState m_deferredLoadState;
- Timer<HTMLMediaElement> m_deferredLoadTimer;
-
- OwnPtr<MediaPlayer> m_player;
- blink::WebLayer* m_webLayer;
-
- MediaPlayer::Preload m_preload;
-
- DisplayMode m_displayMode;
-
- RefPtr<HTMLMediaSource> m_mediaSource;
-
- // Cached time value. Only valid when ready state is HAVE_METADATA or
- // higher, otherwise the current time is assumed to be zero.
- mutable double m_cachedTime;
-
- double m_fragmentStartTime;
- double m_fragmentEndTime;
-
- typedef unsigned PendingActionFlags;
- PendingActionFlags m_pendingActionFlags;
-
- // FIXME: MediaElement has way too many state bits.
- bool m_userGestureRequiredForPlay : 1;
- bool m_playing : 1;
- bool m_shouldDelayLoadEvent : 1;
- bool m_haveFiredLoadedData : 1;
- bool m_active : 1;
- bool m_autoplaying : 1;
- bool m_muted : 1;
- bool m_paused : 1;
- bool m_seeking : 1;
-
- // data has not been loaded since sending a "stalled" event
- bool m_sentStalledEvent : 1;
-
- // time has not changed since sending an "ended" event
- bool m_sentEndEvent : 1;
-
- bool m_pausedInternal : 1;
-
- bool m_closedCaptionsVisible : 1;
-
- bool m_completelyLoaded : 1;
- bool m_havePreparedToPlay : 1;
- bool m_delayingLoadForPreloadNone : 1;
-
- bool m_processingPreferenceChange : 1;
-#if ENABLE(OILPAN)
- bool m_isFinalizing : 1;
- bool m_closeMediaSourceWhenFinalizing : 1;
-#endif
-
- static URLRegistry* s_mediaStreamRegistry;
-};
-
-#ifndef NDEBUG
-// Template specializations required by PodIntervalTree in debug mode.
-template <>
-struct ValueToString<double> {
- static String string(const double value)
- {
- return String::number(value);
- }
-};
-#endif
-
-// FIXME(sky): Remove this.
-inline bool isHTMLMediaElement(const HTMLElement& element)
-{
- return false;
-}
-
-DEFINE_HTMLELEMENT_TYPE_CASTS_WITH_FUNCTION(HTMLMediaElement);
-
-} // namespace blink
-
-#endif // HTMLMediaElement_h
« no previous file with comments | « sky/engine/core/frame/UseCounter.cpp ('k') | sky/engine/core/html/HTMLMediaElement.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698