summaryrefslogtreecommitdiff
path: root/Source/WebCore/html/track/InbandTextTrack.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/html/track/InbandTextTrack.cpp')
-rw-r--r--Source/WebCore/html/track/InbandTextTrack.cpp173
1 files changed, 92 insertions, 81 deletions
diff --git a/Source/WebCore/html/track/InbandTextTrack.cpp b/Source/WebCore/html/track/InbandTextTrack.cpp
index f8772cbc2..bd65e548a 100644
--- a/Source/WebCore/html/track/InbandTextTrack.cpp
+++ b/Source/WebCore/html/track/InbandTextTrack.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2012 Apple Inc. All rights reserved.
+ * Copyright (C) 2012-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
@@ -10,10 +10,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,160 +24,171 @@
*/
#include "config.h"
+#include "InbandTextTrack.h"
#if ENABLE(VIDEO_TRACK)
-#include "InbandTextTrack.h"
-
-#include "Document.h"
-#include "Event.h"
-#include "ExceptionCodePlaceholder.h"
#include "HTMLMediaElement.h"
+#include "InbandDataTextTrack.h"
#include "InbandGenericTextTrack.h"
#include "InbandTextTrackPrivate.h"
#include "InbandWebVTTTextTrack.h"
-#include "Logging.h"
-#include "TextTrackCueList.h"
-#include <math.h>
-#include <wtf/text/CString.h>
namespace WebCore {
-PassRefPtr<InbandTextTrack> InbandTextTrack::create(ScriptExecutionContext* context,
- TextTrackClient* client, PassRefPtr<InbandTextTrackPrivate> trackPrivate)
+Ref<InbandTextTrack> InbandTextTrack::create(ScriptExecutionContext& context, TextTrackClient& client, InbandTextTrackPrivate& trackPrivate)
{
- switch (trackPrivate->cueFormat()) {
+ switch (trackPrivate.cueFormat()) {
+ case InbandTextTrackPrivate::Data:
+ return InbandDataTextTrack::create(context, client, trackPrivate);
case InbandTextTrackPrivate::Generic:
return InbandGenericTextTrack::create(context, client, trackPrivate);
case InbandTextTrackPrivate::WebVTT:
return InbandWebVTTTextTrack::create(context, client, trackPrivate);
- default:
- ASSERT_NOT_REACHED();
- return 0;
}
+ ASSERT_NOT_REACHED();
+ return InbandDataTextTrack::create(context, client, trackPrivate);
}
-InbandTextTrack::InbandTextTrack(ScriptExecutionContext* context, TextTrackClient* client, PassRefPtr<InbandTextTrackPrivate> trackPrivate)
- : TextTrack(context, client, emptyString(), trackPrivate->id(), trackPrivate->label(), trackPrivate->language(), InBand)
+InbandTextTrack::InbandTextTrack(ScriptExecutionContext& context, TextTrackClient& client, InbandTextTrackPrivate& trackPrivate)
+ : TextTrack(&context, &client, emptyAtom, trackPrivate.id(), trackPrivate.label(), trackPrivate.language(), InBand)
, m_private(trackPrivate)
{
m_private->setClient(this);
-
- switch (m_private->kind()) {
- case InbandTextTrackPrivate::Subtitles:
- setKind(TextTrack::subtitlesKeyword());
- break;
- case InbandTextTrackPrivate::Captions:
- setKind(TextTrack::captionsKeyword());
- break;
- case InbandTextTrackPrivate::Descriptions:
- setKind(TextTrack::descriptionsKeyword());
- break;
- case InbandTextTrackPrivate::Chapters:
- setKind(TextTrack::chaptersKeyword());
- break;
- case InbandTextTrackPrivate::Metadata:
- setKind(TextTrack::metadataKeyword());
- break;
- case InbandTextTrackPrivate::Forced:
- setKind(TextTrack::forcedKeyword());
- break;
- case InbandTextTrackPrivate::None:
- default:
- ASSERT_NOT_REACHED();
- break;
- }
+ updateKindFromPrivate();
}
InbandTextTrack::~InbandTextTrack()
{
- m_private->setClient(0);
+ m_private->setClient(nullptr);
+}
+
+void InbandTextTrack::setPrivate(InbandTextTrackPrivate& trackPrivate)
+{
+ if (m_private.ptr() == &trackPrivate)
+ return;
+
+ m_private->setClient(nullptr);
+ m_private = trackPrivate;
+ m_private->setClient(this);
+
+ setModeInternal(mode());
+ updateKindFromPrivate();
}
-void InbandTextTrack::setMode(const AtomicString& mode)
+void InbandTextTrack::setMode(Mode mode)
{
TextTrack::setMode(mode);
+ setModeInternal(mode);
+}
- if (mode == TextTrack::disabledKeyword())
- m_private->setMode(InbandTextTrackPrivate::Disabled);
- else if (mode == TextTrack::hiddenKeyword())
- m_private->setMode(InbandTextTrackPrivate::Hidden);
- else if (mode == TextTrack::showingKeyword())
- m_private->setMode(InbandTextTrackPrivate::Showing);
- else
- ASSERT_NOT_REACHED();
+static inline InbandTextTrackPrivate::Mode toPrivate(TextTrack::Mode mode)
+{
+ switch (mode) {
+ case TextTrack::Mode::Disabled:
+ return InbandTextTrackPrivate::Disabled;
+ case TextTrack::Mode::Hidden:
+ return InbandTextTrackPrivate::Hidden;
+ case TextTrack::Mode::Showing:
+ return InbandTextTrackPrivate::Showing;
+ }
+ ASSERT_NOT_REACHED();
+ return InbandTextTrackPrivate::Disabled;
}
-bool InbandTextTrack::isClosedCaptions() const
+void InbandTextTrack::setModeInternal(Mode mode)
{
- if (!m_private)
- return false;
+ m_private->setMode(toPrivate(mode));
+}
+bool InbandTextTrack::isClosedCaptions() const
+{
return m_private->isClosedCaptions();
}
bool InbandTextTrack::isSDH() const
{
- if (!m_private)
- return false;
-
return m_private->isSDH();
}
bool InbandTextTrack::containsOnlyForcedSubtitles() const
{
- if (!m_private)
- return false;
-
return m_private->containsOnlyForcedSubtitles();
}
bool InbandTextTrack::isMainProgramContent() const
{
- if (!m_private)
- return false;
-
return m_private->isMainProgramContent();
}
bool InbandTextTrack::isEasyToRead() const
{
- if (!m_private)
- return false;
-
return m_private->isEasyToRead();
}
size_t InbandTextTrack::inbandTrackIndex()
{
- ASSERT(m_private);
return m_private->trackIndex();
}
-void InbandTextTrack::idChanged(TrackPrivateBase* trackPrivate, const String& id)
+AtomicString InbandTextTrack::inBandMetadataTrackDispatchType() const
+{
+ return m_private->inBandMetadataTrackDispatchType();
+}
+
+void InbandTextTrack::idChanged(const AtomicString& id)
{
- ASSERT_UNUSED(trackPrivate, trackPrivate == m_private);
setId(id);
}
-void InbandTextTrack::labelChanged(TrackPrivateBase* trackPrivate, const String& label)
+void InbandTextTrack::labelChanged(const AtomicString& label)
{
- ASSERT_UNUSED(trackPrivate, trackPrivate == m_private);
setLabel(label);
}
-void InbandTextTrack::languageChanged(TrackPrivateBase* trackPrivate, const String& language)
+void InbandTextTrack::languageChanged(const AtomicString& language)
{
- ASSERT_UNUSED(trackPrivate, trackPrivate == m_private);
setLanguage(language);
}
-void InbandTextTrack::willRemove(TrackPrivateBase* trackPrivate)
+void InbandTextTrack::willRemove()
+{
+ auto* element = mediaElement();
+ if (!element)
+ return;
+ element->removeTextTrack(*this);
+}
+
+void InbandTextTrack::updateKindFromPrivate()
{
- if (!mediaElement())
+ switch (m_private->kind()) {
+ case InbandTextTrackPrivate::Subtitles:
+ setKind(Kind::Subtitles);
return;
- ASSERT_UNUSED(trackPrivate, trackPrivate == m_private);
- mediaElement()->removeTextTrack(this);
+ case InbandTextTrackPrivate::Captions:
+ setKind(Kind::Captions);
+ return;
+ case InbandTextTrackPrivate::Descriptions:
+ setKind(Kind::Descriptions);
+ return;
+ case InbandTextTrackPrivate::Chapters:
+ setKind(Kind::Chapters);
+ return;
+ case InbandTextTrackPrivate::Metadata:
+ setKind(Kind::Metadata);
+ return;
+ case InbandTextTrackPrivate::Forced:
+ setKind(Kind::Forced);
+ return;
+ case InbandTextTrackPrivate::None:
+ break;
+ }
+ ASSERT_NOT_REACHED();
+}
+
+MediaTime InbandTextTrack::startTimeVariance() const
+{
+ return m_private->startTimeVariance();
}
} // namespace WebCore