Rename AtomicString to AtomString
[WebKit-https.git] / Source / WebCore / platform / cocoa / VideoFullscreenModelVideoElement.h
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. ``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
27 #pragma once
28
29 #if PLATFORM(IOS_FAMILY) || (PLATFORM(MAC) && ENABLE(VIDEO_PRESENTATION_MODE))
30
31 #include "EventListener.h"
32 #include "FloatRect.h"
33 #include "HTMLMediaElementEnums.h"
34 #include "MediaPlayerEnums.h"
35 #include "PlatformLayer.h"
36 #include "VideoFullscreenModel.h"
37 #include <wtf/Function.h>
38 #include <wtf/HashSet.h>
39 #include <wtf/RefPtr.h>
40 #include <wtf/RetainPtr.h>
41 #include <wtf/Vector.h>
42
43 namespace WebCore {
44 class AudioTrack;
45 class HTMLVideoElement;
46 class TextTrack;
47 class PlaybackSessionModelMediaElement;
48
49 class VideoFullscreenModelVideoElement : public VideoFullscreenModel, public EventListener {
50 public:
51     static RefPtr<VideoFullscreenModelVideoElement> create()
52     {
53         return adoptRef(*new VideoFullscreenModelVideoElement());
54     }
55     WEBCORE_EXPORT virtual ~VideoFullscreenModelVideoElement();
56     WEBCORE_EXPORT void setVideoElement(HTMLVideoElement*);
57     HTMLVideoElement* videoElement() const { return m_videoElement.get(); }
58     WEBCORE_EXPORT void setVideoFullscreenLayer(PlatformLayer*, WTF::Function<void()>&& completionHandler = [] { });
59     WEBCORE_EXPORT void willExitFullscreen();
60     WEBCORE_EXPORT void waitForPreparedForInlineThen(WTF::Function<void()>&& completionHandler = [] { });
61     
62     WEBCORE_EXPORT void handleEvent(WebCore::ScriptExecutionContext&, WebCore::Event&) override;
63     void updateForEventName(const WTF::AtomString&);
64     bool operator==(const EventListener& rhs) const override { return static_cast<const WebCore::EventListener*>(this) == &rhs; }
65
66     WEBCORE_EXPORT void addClient(VideoFullscreenModelClient&) override;
67     WEBCORE_EXPORT void removeClient(VideoFullscreenModelClient&) override;
68     WEBCORE_EXPORT void requestFullscreenMode(HTMLMediaElementEnums::VideoFullscreenMode, bool finishedWithMedia = false) override;
69     WEBCORE_EXPORT void setVideoLayerFrame(FloatRect) override;
70     WEBCORE_EXPORT void setVideoLayerGravity(MediaPlayerEnums::VideoGravity) override;
71     WEBCORE_EXPORT void fullscreenModeChanged(HTMLMediaElementEnums::VideoFullscreenMode) override;
72     FloatSize videoDimensions() const override { return m_videoDimensions; }
73     bool hasVideo() const override { return m_hasVideo; }
74
75     WEBCORE_EXPORT void requestRouteSharingPolicyAndContextUID(CompletionHandler<void(RouteSharingPolicy, String)>&&) override;
76
77 protected:
78     WEBCORE_EXPORT VideoFullscreenModelVideoElement();
79
80 private:
81     void setHasVideo(bool);
82     void setVideoDimensions(const FloatSize&);
83
84     void willEnterPictureInPicture() override;
85     void didEnterPictureInPicture() override;
86     void failedToEnterPictureInPicture() override;
87     void willExitPictureInPicture() override;
88     void didExitPictureInPicture() override;
89
90     static const Vector<WTF::AtomString>& observedEventNames();
91     const WTF::AtomString& eventNameAll();
92
93     RefPtr<HTMLVideoElement> m_videoElement;
94     RetainPtr<PlatformLayer> m_videoFullscreenLayer;
95     bool m_isListening { false };
96     HashSet<VideoFullscreenModelClient*> m_clients;
97     bool m_hasVideo { false };
98     FloatSize m_videoDimensions;
99     FloatRect m_videoFrame;
100     Vector<RefPtr<TextTrack>> m_legibleTracksForMenu;
101     Vector<RefPtr<AudioTrack>> m_audioTracksForMenu;
102 };
103
104 }
105
106 #endif
107