summaryrefslogtreecommitdiff
path: root/Source/WebCore/html/track/TextTrack.h
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/html/track/TextTrack.h')
-rw-r--r--Source/WebCore/html/track/TextTrack.h175
1 files changed, 90 insertions, 85 deletions
diff --git a/Source/WebCore/html/track/TextTrack.h b/Source/WebCore/html/track/TextTrack.h
index 43e788f33..8bb47b276 100644
--- a/Source/WebCore/html/track/TextTrack.h
+++ b/Source/WebCore/html/track/TextTrack.h
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2011 Google Inc. All rights reserved.
- * Copyright (C) 2011, 2012, 2013 Apple Inc. All rights reserved.
+ * Copyright (C) 2011-2017 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -11,10 +11,10 @@
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
@@ -24,78 +24,68 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef TextTrack_h
-#define TextTrack_h
+#pragma once
#if ENABLE(VIDEO_TRACK)
-#include "ExceptionCode.h"
#include "TextTrackCue.h"
#include "TrackBase.h"
-#include <wtf/PassOwnPtr.h>
-#include <wtf/RefCounted.h>
-#include <wtf/text/WTFString.h>
-
-#if USE(PLATFORM_TEXT_TRACK_MENU)
-#include "PlatformTextTrack.h"
-#endif
namespace WebCore {
class ScriptExecutionContext;
class TextTrack;
class TextTrackCueList;
-#if ENABLE(WEBVTT_REGIONS)
-class TextTrackRegion;
-class TextTrackRegionList;
-#endif
+class VTTRegion;
+class VTTRegionList;
class TextTrackClient {
public:
virtual ~TextTrackClient() { }
- virtual void textTrackKindChanged(TextTrack*) = 0;
- virtual void textTrackModeChanged(TextTrack*) = 0;
- virtual void textTrackAddCues(TextTrack*, const TextTrackCueList*) = 0;
- virtual void textTrackRemoveCues(TextTrack*, const TextTrackCueList*) = 0;
- virtual void textTrackAddCue(TextTrack*, PassRefPtr<TextTrackCue>) = 0;
- virtual void textTrackRemoveCue(TextTrack*, PassRefPtr<TextTrackCue>) = 0;
+ virtual void textTrackKindChanged(TextTrack&) = 0;
+ virtual void textTrackModeChanged(TextTrack&) = 0;
+ virtual void textTrackAddCues(TextTrack&, const TextTrackCueList&) = 0;
+ virtual void textTrackRemoveCues(TextTrack&, const TextTrackCueList&) = 0;
+ virtual void textTrackAddCue(TextTrack&, TextTrackCue&) = 0;
+ virtual void textTrackRemoveCue(TextTrack&, TextTrackCue&) = 0;
};
-class TextTrack : public TrackBase, public EventTargetWithInlineData
-#if USE(PLATFORM_TEXT_TRACK_MENU)
- , public PlatformTextTrackClient
-#endif
- {
+class TextTrack : public TrackBase, public EventTargetWithInlineData {
public:
- static PassRefPtr<TextTrack> create(ScriptExecutionContext* context, TextTrackClient* client, const AtomicString& kind, const AtomicString& id, const AtomicString& label, const AtomicString& language)
+ static Ref<TextTrack> create(ScriptExecutionContext* context, TextTrackClient* client, const AtomicString& kind, const AtomicString& id, const AtomicString& label, const AtomicString& language)
{
- return adoptRef(new TextTrack(context, client, kind, id, label, language, AddTrack));
+ return adoptRef(*new TextTrack(context, client, kind, id, label, language, AddTrack));
}
virtual ~TextTrack();
- virtual EventTargetInterface eventTargetInterface() const override final { return TextTrackEventTargetInterfaceType; }
- virtual ScriptExecutionContext* scriptExecutionContext() const override final { return m_scriptExecutionContext; }
+ EventTargetInterface eventTargetInterface() const final { return TextTrackEventTargetInterfaceType; }
+ ScriptExecutionContext* scriptExecutionContext() const final { return m_scriptExecutionContext; }
static TextTrack* captionMenuOffItem();
static TextTrack* captionMenuAutomaticItem();
static const AtomicString& subtitlesKeyword();
- static const AtomicString& captionsKeyword();
- static const AtomicString& descriptionsKeyword();
- static const AtomicString& chaptersKeyword();
- static const AtomicString& metadataKeyword();
- static const AtomicString& forcedKeyword();
- virtual const AtomicString& defaultKindKeyword() const override { return subtitlesKeyword(); }
static bool isValidKindKeyword(const AtomicString&);
static const AtomicString& disabledKeyword();
static const AtomicString& hiddenKeyword();
static const AtomicString& showingKeyword();
- virtual void setKind(const AtomicString&) override;
+ enum class Kind { Subtitles, Captions, Descriptions, Chapters, Metadata, Forced };
+ Kind kind() const;
+ void setKind(Kind);
- AtomicString mode() const { return m_mode; }
- virtual void setMode(const AtomicString&);
+ Kind kindForBindings() const;
+ void setKindForBindings(Kind);
+
+ const AtomicString& kindKeyword() const;
+ void setKindKeywordIgnoringASCIICase(StringView);
+
+ virtual AtomicString inBandMetadataTrackDispatchType() const { return emptyString(); }
+
+ enum class Mode { Disabled, Hidden, Showing };
+ Mode mode() const;
+ virtual void setMode(Mode);
enum ReadinessState { NotLoaded = 0, Loading = 1, Loaded = 2, FailedToLoad = 3 };
ReadinessState readinessState() const { return m_readinessState; }
@@ -104,31 +94,27 @@ public:
TextTrackCueList* cues();
TextTrackCueList* activeCues() const;
- virtual void clearClient() override { m_client = 0; }
+ void clearClient() override { m_client = nullptr; }
TextTrackClient* client() { return m_client; }
- void addCue(PassRefPtr<TextTrackCue>);
- virtual void removeCue(TextTrackCue*, ExceptionCode&);
+ ExceptionOr<void> addCue(Ref<TextTrackCue>&&);
+ virtual ExceptionOr<void> removeCue(TextTrackCue&);
bool hasCue(TextTrackCue*, TextTrackCue::CueMatchRules = TextTrackCue::MatchAllFields);
-#if ENABLE(VIDEO_TRACK) && ENABLE(WEBVTT_REGIONS)
- TextTrackRegionList* regions();
- void addRegion(PassRefPtr<TextTrackRegion>);
- void removeRegion(TextTrackRegion*, ExceptionCode&);
-#endif
+ VTTRegionList* regions();
+ void addRegion(RefPtr<VTTRegion>&&);
+ ExceptionOr<void> removeRegion(VTTRegion*);
void cueWillChange(TextTrackCue*);
void cueDidChange(TextTrackCue*);
- DEFINE_ATTRIBUTE_EVENT_LISTENER(cuechange);
-
enum TextTrackType { TrackElement, AddTrack, InBand };
TextTrackType trackType() const { return m_trackType; }
virtual bool isClosedCaptions() const { return false; }
virtual bool isSDH() const { return false; }
- virtual bool containsOnlyForcedSubtitles() const { return false; }
+ virtual bool containsOnlyForcedSubtitles() const;
virtual bool isMainProgramContent() const;
virtual bool isEasyToRead() const { return false; }
@@ -146,63 +132,82 @@ public:
void removeAllCues();
-#if USE(PLATFORM_TEXT_TRACK_MENU)
- PassRefPtr<PlatformTextTrack> platformTextTrack();
-#endif
-
#if ENABLE(MEDIA_SOURCE)
- virtual void setLanguage(const AtomicString&) override;
+ void setLanguage(const AtomicString&) override;
#endif
+ virtual bool isInband() const { return false; }
+
+ virtual MediaTime startTimeVariance() const { return MediaTime::zeroTime(); }
+
using RefCounted<TrackBase>::ref;
using RefCounted<TrackBase>::deref;
protected:
TextTrack(ScriptExecutionContext*, TextTrackClient*, const AtomicString& kind, const AtomicString& id, const AtomicString& label, const AtomicString& language, TextTrackType);
-#if ENABLE(VIDEO_TRACK) && ENABLE(WEBVTT_REGIONS)
- TextTrackRegionList* regionList();
-#endif
RefPtr<TextTrackCueList> m_cues;
private:
- virtual bool isValidKind(const AtomicString&) const override;
+ bool enabled() const override;
- virtual bool enabled() const override;
+ void refEventTarget() final { ref(); }
+ void derefEventTarget() final { deref(); }
- virtual void refEventTarget() override final { ref(); }
- virtual void derefEventTarget() override final { deref(); }
-
-#if ENABLE(VIDEO_TRACK) && ENABLE(WEBVTT_REGIONS)
- TextTrackRegionList* ensureTextTrackRegionList();
- RefPtr<TextTrackRegionList> m_regions;
-#endif
-
-#if USE(PLATFORM_TEXT_TRACK_MENU)
- virtual TextTrack* publicTrack() override { return this; }
-
- RefPtr<PlatformTextTrack> m_platformTextTrack;
-#endif
+ VTTRegionList& ensureVTTRegionList();
+ RefPtr<VTTRegionList> m_regions;
- TextTrackCueList* ensureTextTrackCueList();
+ TextTrackCueList& ensureTextTrackCueList();
ScriptExecutionContext* m_scriptExecutionContext;
- AtomicString m_mode;
+ Mode m_mode { Mode::Disabled };
+ Kind m_kind { Kind::Subtitles };
TextTrackClient* m_client;
TextTrackType m_trackType;
- ReadinessState m_readinessState;
- int m_trackIndex;
- int m_renderedTrackIndex;
- bool m_hasBeenConfigured;
+ ReadinessState m_readinessState { NotLoaded };
+ std::optional<int> m_trackIndex;
+ std::optional<int> m_renderedTrackIndex;
+ bool m_hasBeenConfigured { false };
};
-inline TextTrack* toTextTrack(TrackBase* track)
+inline auto TextTrack::mode() const -> Mode
{
- ASSERT_WITH_SECURITY_IMPLICATION(track->type() == TrackBase::TextTrack);
- return static_cast<TextTrack*>(track);
+ return m_mode;
}
-} // namespace WebCore
+inline auto TextTrack::kind() const -> Kind
+{
+ return m_kind;
+}
+
+inline auto TextTrack::kindForBindings() const -> Kind
+{
+ return kind();
+}
+
+#if !ENABLE(MEDIA_SOURCE)
+
+inline void TextTrack::setKindForBindings(Kind)
+{
+ // FIXME: We are using kindForBindings only to implement this empty function, preserving the
+ // behavior of doing nothing when trying to set the kind, originally implemented in a custom setter.
+ // Once we no longer need this special case, we should remove kindForBindings and setKindForBindings.
+}
+
+#else
+
+inline void TextTrack::setKindForBindings(Kind kind)
+{
+ setKind(kind);
+}
#endif
+
+
+} // namespace WebCore
+
+SPECIALIZE_TYPE_TRAITS_BEGIN(WebCore::TextTrack)
+ static bool isType(const WebCore::TrackBase& track) { return track.type() == WebCore::TrackBase::TextTrack; }
+SPECIALIZE_TYPE_TRAITS_END()
+
#endif