| Index: Source/core/html/HTMLMediaElement.h
|
| diff --git a/Source/core/html/HTMLMediaElement.h b/Source/core/html/HTMLMediaElement.h
|
| index 7dccef802e17f16bc8e584a50b825246a6d9c776..0b9bff00b64c1cd3ea344446fca9778498fef230 100644
|
| --- a/Source/core/html/HTMLMediaElement.h
|
| +++ b/Source/core/html/HTMLMediaElement.h
|
| @@ -32,7 +32,8 @@
|
| #include "core/html/HTMLElement.h"
|
| #include "core/html/track/TextTrack.h"
|
| #include "platform/Supplementable.h"
|
| -#include "platform/graphics/media/MediaPlayer.h"
|
| +#include "platform/audio/AudioSourceProvider.h"
|
| +#include "public/platform/WebAudioSourceProviderClient.h"
|
| #include "public/platform/WebMediaPlayerClient.h"
|
| #include "public/platform/WebMimeRegistry.h"
|
|
|
| @@ -65,11 +66,11 @@ class TimeRanges;
|
| class URLRegistry;
|
| class VideoTrackList;
|
|
|
| -// 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 CORE_EXPORT HTMLMediaElement : public HTMLElement, public WillBeHeapSupplementable<HTMLMediaElement>, public MediaPlayerClient, public ActiveDOMObject {
|
| +// TODO(srirama.m): Make the WebMediaPlayerClient inheritance private by
|
| +// adding a means for getting a WebMediaPlayerEncryptedMediaClient and
|
| +// WebContentDecryptionModule from an HTMLMediaElement and calling
|
| +// WebFrameClient::createMediaPlayer() directly.
|
| +class CORE_EXPORT HTMLMediaElement : public HTMLElement, public WillBeHeapSupplementable<HTMLMediaElement>, public WebMediaPlayerClient, public ActiveDOMObject {
|
| DEFINE_WRAPPERTYPEINFO();
|
| WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(HTMLMediaElement);
|
| WILL_BE_USING_PRE_FINALIZER(HTMLMediaElement, dispose);
|
| @@ -83,7 +84,10 @@ public:
|
| #if ENABLE(WEB_AUDIO)
|
| void clearWeakMembers(Visitor*);
|
| #endif
|
| - WebMediaPlayer* webMediaPlayer() const { return m_player ? m_player->webMediaPlayer() : 0; }
|
| + WebMediaPlayer* webMediaPlayer() const
|
| + {
|
| + return m_webMediaPlayer.get();
|
| + }
|
|
|
| virtual bool hasVideo() const { return false; }
|
| bool hasAudio() const;
|
| @@ -114,8 +118,8 @@ public:
|
|
|
| String preload() const;
|
| void setPreload(const AtomicString&);
|
| - MediaPlayer::Preload preloadType() const;
|
| - MediaPlayer::Preload effectivePreloadType() const;
|
| + WebMediaPlayer::Preload preloadType() const;
|
| + WebMediaPlayer::Preload effectivePreloadType() const;
|
|
|
| PassRefPtrWillBeRawPtr<TimeRanges> buffered() const;
|
| void load();
|
| @@ -189,16 +193,6 @@ public:
|
| void didAddTrackElement(HTMLTrackElement*);
|
| void didRemoveTrackElement(HTMLTrackElement*);
|
|
|
| - WebMediaPlayer::TrackId addAudioTrack(const String& id, WebMediaPlayerClient::AudioTrackKind, const AtomicString& label, const AtomicString& language, bool enabled);
|
| - void removeAudioTrack(WebMediaPlayer::TrackId);
|
| - WebMediaPlayer::TrackId addVideoTrack(const String& id, WebMediaPlayerClient::VideoTrackKind, const AtomicString& label, const AtomicString& language, bool selected);
|
| - void removeVideoTrack(WebMediaPlayer::TrackId);
|
| -
|
| - void mediaPlayerDidAddTextTrack(WebInbandTextTrack*) final;
|
| - void mediaPlayerDidRemoveTextTrack(WebInbandTextTrack*) final;
|
| - // FIXME: Remove this when WebMediaPlayerClientImpl::loadInternal does not depend on it.
|
| - KURL mediaPlayerPosterURL() override { return KURL(); }
|
| -
|
| void honorUserPreferencesForAutomaticTextTrackSelection();
|
|
|
| bool textTracksAreReady() const;
|
| @@ -220,7 +214,7 @@ public:
|
| // of one of them here.
|
| using HTMLElement::executionContext;
|
|
|
| - bool hasSingleSecurityOrigin() const { return !m_player || (webMediaPlayer() && webMediaPlayer()->hasSingleSecurityOrigin()); }
|
| + bool hasSingleSecurityOrigin() const { return webMediaPlayer() && webMediaPlayer()->hasSingleSecurityOrigin(); }
|
|
|
| bool isFullscreen() const;
|
| void enterFullscreen();
|
| @@ -233,10 +227,6 @@ public:
|
| static void setTextTrackKindUserPreferenceForAllMediaElements(Document*);
|
| void automaticTrackSelectionForUpdatedUserPreference();
|
|
|
| - void remoteRouteAvailabilityChanged(bool);
|
| - void connectedToRemoteDevice();
|
| - void disconnectedFromRemoteDevice();
|
| -
|
| // Returns the MediaControls, or null if they have not been added yet.
|
| // Note that this can be non-null even if there is no controls attribute.
|
| MediaControls* mediaControls() const;
|
| @@ -256,7 +246,7 @@ public:
|
| AudioSourceProviderClient* audioSourceNode() { return m_audioSourceNode; }
|
| void setAudioSourceNode(AudioSourceProviderClient*);
|
|
|
| - AudioSourceProvider* audioSourceProvider();
|
| + AudioSourceProvider* audioSourceProvider() { return &m_audioSourceProvider; }
|
| #endif
|
|
|
| enum InvalidURLAction { DoNothing, Complain };
|
| @@ -292,6 +282,7 @@ protected:
|
| void attach(const AttachContext& = AttachContext()) override;
|
|
|
| void didMoveToNewDocument(Document& oldDocument) override;
|
| + virtual KURL posterImageURL() const { return KURL(); }
|
|
|
| enum DisplayMode { Unknown, Poster, Video };
|
| DisplayMode displayMode() const { return m_displayMode; }
|
| @@ -300,7 +291,7 @@ protected:
|
| void setControllerInternal(MediaController*);
|
|
|
| private:
|
| - void createMediaPlayer();
|
| + void resetMediaPlayerAndMediaSource();
|
|
|
| bool alwaysCreateUserAgentShadowRoot() const final { return true; }
|
| bool areAuthorShadowsAllowed() const final { return false; }
|
| @@ -329,16 +320,27 @@ private:
|
| void setReadyState(ReadyState);
|
| void setNetworkState(WebMediaPlayer::NetworkState);
|
|
|
| - void mediaPlayerNetworkStateChanged() final;
|
| - void mediaPlayerReadyStateChanged() final;
|
| - void mediaPlayerTimeChanged() final;
|
| - void mediaPlayerDurationChanged() final;
|
| - void mediaPlayerPlaybackStateChanged() final;
|
| - void mediaPlayerRequestSeek(double) final;
|
| - void mediaPlayerRepaint() final;
|
| - void mediaPlayerSizeChanged() final;
|
| - void mediaPlayerSetWebLayer(WebLayer*) final;
|
| - void mediaPlayerMediaSourceOpened(WebMediaSource*) final;
|
| + // WebMediaPlayerClient implementation.
|
| + void networkStateChanged() final;
|
| + void readyStateChanged() final;
|
| + void timeChanged() final;
|
| + void repaint() final;
|
| + void durationChanged() final;
|
| + void sizeChanged() final;
|
| + void playbackStateChanged() final;
|
| +
|
| + void setWebLayer(WebLayer*) final;
|
| + WebMediaPlayer::TrackId addAudioTrack(const WebString&, WebMediaPlayerClient::AudioTrackKind, const WebString&, const WebString&, bool) final;
|
| + void removeAudioTrack(WebMediaPlayer::TrackId) final;
|
| + WebMediaPlayer::TrackId addVideoTrack(const WebString&, WebMediaPlayerClient::VideoTrackKind, const WebString&, const WebString&, bool) final;
|
| + void removeVideoTrack(WebMediaPlayer::TrackId) final;
|
| + void addTextTrack(WebInbandTextTrack*) final;
|
| + void removeTextTrack(WebInbandTextTrack*) final;
|
| + void mediaSourceOpened(WebMediaSource*) final;
|
| + void requestSeek(double) final;
|
| + void remoteRouteAvailabilityChanged(bool) final;
|
| + void connectedToRemoteDevice() final;
|
| + void disconnectedFromRemoteDevice() final;
|
|
|
| void loadTimerFired(Timer<HTMLMediaElement>*);
|
| void progressEventTimerFired(Timer<HTMLMediaElement>*);
|
| @@ -505,7 +507,7 @@ private:
|
| DeferredLoadState m_deferredLoadState;
|
| Timer<HTMLMediaElement> m_deferredLoadTimer;
|
|
|
| - OwnPtr<MediaPlayer> m_player;
|
| + OwnPtr<WebMediaPlayer> m_webMediaPlayer;
|
| WebLayer* m_webLayer;
|
|
|
| DisplayMode m_displayMode;
|
| @@ -564,6 +566,52 @@ private:
|
| // FIXME: Oilpan: Consider making this a strongly traced pointer with oilpan where strong cycles are not a problem.
|
| GC_PLUGIN_IGNORE("http://crbug.com/404577")
|
| RawPtrWillBeWeakMember<AudioSourceProviderClient> m_audioSourceNode;
|
| +
|
| + // AudioClientImpl wraps an AudioSourceProviderClient.
|
| + // When the audio format is known, Chromium calls setFormat().
|
| + class AudioClientImpl final : public GarbageCollectedFinalized<AudioClientImpl>, public WebAudioSourceProviderClient {
|
| + public:
|
| + explicit AudioClientImpl(AudioSourceProviderClient* client)
|
| + : m_client(client)
|
| + {
|
| + }
|
| +
|
| + ~AudioClientImpl() override { }
|
| +
|
| + // WebAudioSourceProviderClient
|
| + void setFormat(size_t numberOfChannels, float sampleRate) override;
|
| +
|
| + DECLARE_TRACE();
|
| +
|
| + private:
|
| + Member<AudioSourceProviderClient> m_client;
|
| + };
|
| +
|
| + // AudioSourceProviderImpl wraps a WebAudioSourceProvider.
|
| + // provideInput() calls into Chromium to get a rendered audio stream.
|
| + class AudioSourceProviderImpl final : public AudioSourceProvider {
|
| + public:
|
| + AudioSourceProviderImpl()
|
| + : m_webAudioSourceProvider(nullptr)
|
| + {
|
| + }
|
| +
|
| + ~AudioSourceProviderImpl() override { }
|
| +
|
| + // Wraps the given WebAudioSourceProvider.
|
| + void wrap(WebAudioSourceProvider*);
|
| +
|
| + // AudioSourceProvider
|
| + void setClient(AudioSourceProviderClient*) override;
|
| + void provideInput(AudioBus*, size_t framesToProcess) override;
|
| +
|
| + private:
|
| + WebAudioSourceProvider* m_webAudioSourceProvider;
|
| + Persistent<AudioClientImpl> m_client;
|
| + Mutex provideInputLock;
|
| + };
|
| +
|
| + AudioSourceProviderImpl m_audioSourceProvider;
|
| #endif
|
|
|
| friend class MediaController;
|
|
|