Use "= default" to denote default constructor or destructor
[WebKit-https.git] / Source / WebCore / html / track / InbandWebVTTTextTrack.cpp
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 #include "config.h"
27 #include "InbandWebVTTTextTrack.h"
28
29 #if ENABLE(VIDEO_TRACK)
30
31 #include "InbandTextTrackPrivate.h"
32 #include "Logging.h"
33 #include "VTTCue.h"
34 #include "VTTRegionList.h"
35 #include <wtf/text/CString.h>
36
37 namespace WebCore {
38
39 inline InbandWebVTTTextTrack::InbandWebVTTTextTrack(ScriptExecutionContext& context, TextTrackClient& client, InbandTextTrackPrivate& trackPrivate)
40     : InbandTextTrack(context, client, trackPrivate)
41 {
42 }
43
44 Ref<InbandTextTrack> InbandWebVTTTextTrack::create(ScriptExecutionContext& context, TextTrackClient& client, InbandTextTrackPrivate& trackPrivate)
45 {
46     return adoptRef(*new InbandWebVTTTextTrack(context, client, trackPrivate));
47 }
48
49 InbandWebVTTTextTrack::~InbandWebVTTTextTrack() = default;
50
51 WebVTTParser& InbandWebVTTTextTrack::parser()
52 {
53     if (!m_webVTTParser)
54         m_webVTTParser = std::make_unique<WebVTTParser>(static_cast<WebVTTParserClient*>(this), scriptExecutionContext());
55     return *m_webVTTParser;
56 }
57
58 void InbandWebVTTTextTrack::parseWebVTTCueData(const char* data, unsigned length)
59 {
60     parser().parseBytes(data, length);
61 }
62
63 void InbandWebVTTTextTrack::parseWebVTTCueData(const ISOWebVTTCue& cueData)
64 {
65     parser().parseCueData(cueData);
66 }
67
68 void InbandWebVTTTextTrack::newCuesParsed()
69 {
70     Vector<RefPtr<WebVTTCueData>> cues;
71     parser().getNewCues(cues);
72     for (auto& cueData : cues) {
73         auto vttCue = VTTCue::create(*scriptExecutionContext(), *cueData);
74         if (hasCue(vttCue.ptr(), TextTrackCue::IgnoreDuration)) {
75             DEBUG_LOG(LOGIDENTIFIER, "ignoring already added cue: ", vttCue.get());
76             return;
77         }
78
79         DEBUG_LOG(LOGIDENTIFIER, vttCue.get());
80
81         addCue(WTFMove(vttCue));
82     }
83 }
84     
85 void InbandWebVTTTextTrack::newRegionsParsed()
86 {
87     Vector<RefPtr<VTTRegion>> newRegions;
88     parser().getNewRegions(newRegions);
89     for (auto& region : newRegions) {
90         region->setTrack(this);
91         regions()->add(region.releaseNonNull());
92     }
93 }
94
95 void InbandWebVTTTextTrack::fileFailedToParse()
96 {
97     ERROR_LOG(LOGIDENTIFIER, "Error parsing WebVTT stream.");
98 }
99
100 } // namespace WebCore
101
102 #endif