diff options
Diffstat (limited to 'Source/WebCore/html/track/TextTrack.h')
-rw-r--r-- | Source/WebCore/html/track/TextTrack.h | 175 |
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 |