1/*
2 * Copyright (C) 2013 Apple Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 *    notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 *    notice, this list of conditions and the following disclaimer in the
11 *    documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 */
25
26#ifndef MockMediaPlayerMediaSource_h
27#define MockMediaPlayerMediaSource_h
28
29#if ENABLE(MEDIA_SOURCE)
30
31#include "MediaPlayerPrivate.h"
32#include <wtf/MediaTime.h>
33
34namespace WebCore {
35
36class MediaSource;
37class MockMediaSourcePrivate;
38
39class MockMediaPlayerMediaSource : public MediaPlayerPrivateInterface {
40public:
41    // MediaPlayer Engine Support
42    static void registerMediaEngine(MediaEngineRegistrar);
43    static PassOwnPtr<MediaPlayerPrivateInterface> create(MediaPlayer*);
44    static void getSupportedTypes(HashSet<String>& types);
45    static MediaPlayer::SupportsType supportsType(const MediaEngineSupportParameters&);
46
47    virtual ~MockMediaPlayerMediaSource();
48
49    void advanceCurrentTime();
50    void updateDuration(const MediaTime&);
51
52    virtual MediaPlayer::ReadyState readyState() const override;
53    void setReadyState(MediaPlayer::ReadyState);
54    void setNetworkState(MediaPlayer::NetworkState);
55    void waitForSeekCompleted();
56    void seekCompleted();
57
58private:
59    MockMediaPlayerMediaSource(MediaPlayer*);
60
61    // MediaPlayerPrivate Overrides
62    virtual void load(const String& url) override;
63    virtual void load(const String& url, MediaSourcePrivateClient*) override;
64    virtual void cancelLoad() override;
65    virtual void play() override;
66    virtual void pause() override;
67    virtual IntSize naturalSize() const override;
68    virtual bool hasVideo() const override;
69    virtual bool hasAudio() const override;
70    virtual void setVisible(bool) override;
71    virtual bool seeking() const override;
72    virtual bool paused() const override;
73    virtual MediaPlayer::NetworkState networkState() const override;
74    virtual double maxTimeSeekableDouble() const override;
75    virtual std::unique_ptr<PlatformTimeRanges> buffered() const override;
76    virtual bool didLoadingProgress() const override;
77    virtual void setSize(const IntSize&) override;
78    virtual void paint(GraphicsContext*, const IntRect&) override;
79    virtual double currentTimeDouble() const override;
80    virtual double durationDouble() const override;
81    virtual void seekWithTolerance(double time, double, double) override;
82    virtual unsigned long totalVideoFrames() override;
83    virtual unsigned long droppedVideoFrames() override;
84    virtual unsigned long corruptedVideoFrames() override;
85    virtual double totalFrameDelay() override;
86
87    MediaPlayer* m_player;
88    RefPtr<MockMediaSourcePrivate> m_mediaSourcePrivate;
89
90    MediaTime m_currentTime;
91    MediaTime m_duration;
92    MediaPlayer::ReadyState m_readyState;
93    MediaPlayer::NetworkState m_networkState;
94    bool m_playing;
95    bool m_seekCompleted;
96};
97
98}
99
100#endif // ENABLE(MEDIA_SOURCE)
101
102#endif // MockMediaPlayerMediaSource_h
103
104