# Copyright (C) 2020 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 INC. AND ITS CONTRIBUTORS ``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 INC. OR ITS 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.

#if ENABLE(GPU_PROCESS)

messages -> RemoteMediaPlayerProxy NotRefCounted {
    PrepareForPlayback(bool privateMode, enum:uint8_t WebCore::MediaPlayerEnums::Preload preload, bool preservesPitch, bool prepareForRendering, float videoContentScale, enum:uint8_t WebCore::DynamicRangeMode mode) -> (std::optional<WebKit::LayerHostingContextID> inlineLayerHostingContextId) Async

    Load(URL url, std::optional<WebKit::SandboxExtension::Handle> sandboxExtension, WebCore::ContentType contentType, String keySystem) -> (struct WebKit::RemoteMediaPlayerConfiguration playerConfiguration) Async
#if ENABLE(MEDIA_SOURCE)
    LoadMediaSource(URL url, WebCore::ContentType contentType, bool webMParserEnabled, WebKit::RemoteMediaSourceIdentifier mediaSourceIdentifier) -> (struct WebKit::RemoteMediaPlayerConfiguration playerConfiguration) Async
#endif
    CancelLoad()

    PrepareToPlay()

    Play()
    Pause()

    SetVolume(double volume)
    SetMuted(bool muted)

    Seek(MediaTime time)
    SeekWithTolerance(MediaTime time, MediaTime negativeTolerance, MediaTime positiveTolerance)

    SetPreload(enum:uint8_t WebCore::MediaPlayerEnums::Preload preload)
    SetPrivateBrowsingMode(bool privateMode)
    SetPreservesPitch(bool preservesPitch)
    SetPitchCorrectionAlgorithm(WebCore::MediaPlayer::PitchCorrectionAlgorithm algorithm)

    PrepareForRendering()
    SetPageIsVisible(bool visible)
    SetShouldMaintainAspectRatio(bool maintainAspectRatio)
    AcceleratedRenderingStateChanged(bool canBeAccelerated)
    SetShouldDisableSleep(bool disable)
    SetRate(double rate)
    DidLoadingProgress() -> (bool flag) Async

#if ENABLE(VIDEO_PRESENTATION_MODE)
    UpdateVideoFullscreenInlineImage()
    SetVideoFullscreenMode(WebCore::MediaPlayer::VideoFullscreenMode mode)
    SetVideoFullscreenGravity(enum:uint8_t WebCore::MediaPlayerEnums::VideoGravity gravity)
    VideoFullscreenStandbyChanged(bool standby)
#endif

    SetBufferingPolicy(WebCore::MediaPlayer::BufferingPolicy policy)

#if PLATFORM(COCOA)
    SetVideoInlineSizeFenced(WebCore::FloatSize size, MachSendRight machSendRight)
#endif

#if ENABLE(WIRELESS_PLAYBACK_TARGET)
    SetWirelessVideoPlaybackDisabled(bool disabled)
    SetWirelessPlaybackTarget(WebCore::MediaPlaybackTargetContext target)
    SetShouldPlayToPlaybackTarget(bool shouldPlay)
#endif

#if ENABLE(LEGACY_ENCRYPTED_MEDIA)
    SetLegacyCDMSession(std::optional<WebKit::RemoteLegacyCDMSessionIdentifier> instanceId)
    KeyAdded()
#endif

#if ENABLE(ENCRYPTED_MEDIA)
    CdmInstanceAttached(WebKit::RemoteCDMInstanceIdentifier instanceId)
    CdmInstanceDetached(WebKit::RemoteCDMInstanceIdentifier instanceId)
    AttemptToDecryptWithInstance(WebKit::RemoteCDMInstanceIdentifier instanceId)
#endif

#if ENABLE(LEGACY_ENCRYPTED_MEDIA) && ENABLE(ENCRYPTED_MEDIA)
    SetShouldContinueAfterKeyNeeded(bool should)
#endif

    BeginSimulatedHDCPError()
    EndSimulatedHDCPError()

    NotifyActiveSourceBuffersChanged()

    ApplicationWillResignActive()
    ApplicationDidBecomeActive()

    NotifyTrackModeChanged()
    TracksChanged()

    AudioTrackSetEnabled(WebKit::TrackPrivateRemoteIdentifier identifier, bool enabled)
    VideoTrackSetSelected(WebKit::TrackPrivateRemoteIdentifier identifier, bool selected)
    TextTrackSetMode(WebKit::TrackPrivateRemoteIdentifier identifier, enum:uint8_t WebCore::InbandTextTrackPrivate::Mode mode)

    PerformTaskAtMediaTime(MediaTime mediaTime, MonotonicTime messageTime) -> (std::optional<MediaTime> mediaTime, std::optional<MonotonicTime> monotonicTime) Async
    WouldTaintOrigin(struct WebCore::SecurityOriginData origin) -> (std::optional<bool> wouldTaint) Synchronous

    SetVideoPlaybackMetricsUpdateInterval(double interval)

    SetPreferredDynamicRangeMode(enum:uint8_t WebCore::DynamicRangeMode mode)

#if PLATFORM(IOS_FAMILY)
    ErrorLog() -> (String errorLog) Synchronous
    AccessLog() -> (String accessLog) Synchronous
#endif

#if ENABLE(WEB_AUDIO)
    CreateAudioSourceProvider()
    SetShouldEnableAudioSourceProvider(bool shouldEnable)
#endif

#if PLATFORM(COCOA)
    NativeImageForCurrentTime() -> (std::optional<MachSendRight> sendRight, WebCore::DestinationColorSpace colorSpace) Synchronous
    ColorSpace() -> (WebCore::DestinationColorSpace colorSpace) Synchronous
#endif
    VideoFrameForCurrentTimeIfChanged() -> (std::optional<WebKit::RemoteVideoFrameProxy::Properties> videoFrame, bool changed) Synchronous

    PlayAtHostTime(MonotonicTime time)
    PauseAtHostTime(MonotonicTime time)

    StartVideoFrameMetadataGathering()
    StopVideoFrameMetadataGathering()
}

#endif
