1/*
2 * Copyright (C) 2012-2017 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#pragma once
27
28#if ENABLE(VIDEO_TRACK)
29
30#include "InbandTextTrackPrivateClient.h"
31#include "TextTrack.h"
32
33namespace WebCore {
34
35class InbandTextTrack : public TextTrack, private InbandTextTrackPrivateClient {
36 WTF_MAKE_ISO_ALLOCATED(InbandTextTrack);
37public:
38 static Ref<InbandTextTrack> create(ScriptExecutionContext&, TextTrackClient&, InbandTextTrackPrivate&);
39 virtual ~InbandTextTrack();
40
41 bool isClosedCaptions() const override;
42 bool isSDH() const override;
43 bool containsOnlyForcedSubtitles() const override;
44 bool isMainProgramContent() const override;
45 bool isEasyToRead() const override;
46 void setMode(Mode) override;
47 size_t inbandTrackIndex();
48
49 AtomicString inBandMetadataTrackDispatchType() const override;
50
51 void setPrivate(InbandTextTrackPrivate&);
52 void setMediaElement(HTMLMediaElement*) override;
53
54protected:
55 InbandTextTrack(ScriptExecutionContext&, TextTrackClient&, InbandTextTrackPrivate&);
56
57 void setModeInternal(Mode);
58 void updateKindFromPrivate();
59
60 Ref<InbandTextTrackPrivate> m_private;
61
62private:
63 bool isInband() const final { return true; }
64 void idChanged(const AtomicString&) override;
65 void labelChanged(const AtomicString&) override;
66 void languageChanged(const AtomicString&) override;
67 void willRemove() override;
68
69 void addDataCue(const MediaTime&, const MediaTime&, const void*, unsigned) override { ASSERT_NOT_REACHED(); }
70
71#if ENABLE(DATACUE_VALUE)
72 void addDataCue(const MediaTime&, const MediaTime&, Ref<SerializedPlatformRepresentation>&&, const String&) override { ASSERT_NOT_REACHED(); }
73 void updateDataCue(const MediaTime&, const MediaTime&, SerializedPlatformRepresentation&) override { ASSERT_NOT_REACHED(); }
74 void removeDataCue(const MediaTime&, const MediaTime&, SerializedPlatformRepresentation&) override { ASSERT_NOT_REACHED(); }
75#endif
76
77 void addGenericCue(GenericCueData&) override { ASSERT_NOT_REACHED(); }
78 void updateGenericCue(GenericCueData&) override { ASSERT_NOT_REACHED(); }
79 void removeGenericCue(GenericCueData&) override { ASSERT_NOT_REACHED(); }
80
81 void parseWebVTTFileHeader(String&&) override { ASSERT_NOT_REACHED(); }
82 void parseWebVTTCueData(const char*, unsigned) override { ASSERT_NOT_REACHED(); }
83 void parseWebVTTCueData(const ISOWebVTTCue&) override { ASSERT_NOT_REACHED(); }
84
85 MediaTime startTimeVariance() const override;
86};
87
88} // namespace WebCore
89
90SPECIALIZE_TYPE_TRAITS_BEGIN(WebCore::InbandTextTrack)
91 static bool isType(const WebCore::TextTrack& track) { return track.isInband(); }
92SPECIALIZE_TYPE_TRAITS_END()
93
94#endif // ENABLE(VIDEO_TRACK)
95