1/*
2 * Copyright (C) 2014 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. AND ITS CONTRIBUTORS ``AS IS''
14 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23 * THE POSSIBILITY OF SUCH DAMAGE.
24 */
25
26#ifndef WebVideoFullscreenManagerProxy_h
27#define WebVideoFullscreenManagerProxy_h
28
29#if PLATFORM(IOS)
30
31#include "MessageReceiver.h"
32#include <WebCore/GraphicsLayer.h>
33#include <WebCore/WebVideoFullscreenInterfaceAVKit.h>
34#include <WebCore/WebVideoFullscreenModel.h>
35#include <wtf/PassRefPtr.h>
36#include <wtf/RefCounted.h>
37#include <wtf/RefPtr.h>
38
39OBJC_CLASS UIView;
40
41namespace WebKit {
42
43class WebPageProxy;
44
45class WebVideoFullscreenManagerProxy : public WebCore::WebVideoFullscreenInterfaceAVKit, public WebCore::WebVideoFullscreenChangeObserver, public WebCore::WebVideoFullscreenModel, private IPC::MessageReceiver {
46public:
47    static PassRefPtr<WebVideoFullscreenManagerProxy> create(WebPageProxy&);
48    virtual ~WebVideoFullscreenManagerProxy();
49
50    virtual void invalidate() override;
51    virtual void requestExitFullscreen() override;
52
53private:
54    explicit WebVideoFullscreenManagerProxy(WebPageProxy&);
55    virtual void didReceiveMessage(IPC::Connection*, IPC::MessageDecoder&) override;
56
57    // Translate to FullscreenInterface
58    void setupFullscreenWithID(uint32_t, WebCore::IntRect initialRect);
59    void setSeekableRangesVector(Vector<std::pair<double, double>>&);
60    void setExternalPlaybackProperties(bool enabled, uint32_t targetType, String localizedDeviceName);
61
62    // Fullscreen Observer
63    virtual void didSetupFullscreen() override;
64    virtual void didEnterFullscreen() override;
65    virtual void didExitFullscreen() override;
66    virtual void didCleanupFullscreen() override;
67
68    // FullscreenModel
69    virtual void play() override;
70    virtual void pause() override;
71    virtual void togglePlayState() override;
72    virtual void beginScrubbing() override;
73    virtual void endScrubbing() override;
74    virtual void seekToTime(double) override;
75    virtual void fastSeek(double time) override;
76    virtual void beginScanningForward() override;
77    virtual void beginScanningBackward() override;
78    virtual void endScanning() override;
79    virtual void setVideoLayerFrame(WebCore::FloatRect) override;
80    virtual void setVideoLayerGravity(WebCore::WebVideoFullscreenModel::VideoGravity) override;
81    virtual void selectAudioMediaOption(uint64_t) override;
82    virtual void selectLegibleMediaOption(uint64_t) override;
83
84    WebPageProxy* m_page;
85    RetainPtr<PlatformLayer> m_layerHost;
86};
87
88} // namespace WebKit
89
90#endif // PLATFORM(IOS)
91
92#endif // WebVideoFullscreenManagerProxy_h
93