Commit e9e90ca1 authored by self@brendanlong.com's avatar self@brendanlong.com

Move code that applies to audio and video tracks into TrackBase.

I also moved the EventTarget code into TextTrack, because audio and video
tracks aren't event targets.

BUG=249427

Review URL: https://codereview.chromium.org/92783002

git-svn-id: svn://svn.chromium.org/blink/trunk@165093 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent d527cf9f
......@@ -2678,6 +2678,7 @@
'html/track/TextTrackCueList.cpp',
'html/track/TextTrackCueList.h',
'html/track/TextTrackList.cpp',
'html/track/TrackBase.cpp',
'html/track/TrackBase.h',
'html/track/TrackEvent.cpp',
'html/track/vtt/BufferedLineReader.cpp',
......
......@@ -96,14 +96,11 @@ const AtomicString& TextTrack::showingKeyword()
}
TextTrack::TextTrack(Document& document, TextTrackClient* client, const AtomicString& kind, const AtomicString& label, const AtomicString& language, const AtomicString& id, TextTrackType type)
: TrackBase(TrackBase::TextTrack)
: TrackBase(TrackBase::TextTrack, label, language, id)
, m_cues(0)
, m_regions(0)
, m_document(&document)
, m_mediaElement(0)
, m_label(label)
, m_language(language)
, m_id(id)
, m_trackList(0)
, m_mode(disabledKeyword())
, m_client(client)
, m_trackType(type)
......@@ -149,16 +146,12 @@ bool TextTrack::isValidKindKeyword(const AtomicString& value)
return false;
}
void TextTrack::setKind(const AtomicString& kind)
void TextTrack::setKind(const AtomicString& newKind)
{
String oldKind = m_kind;
AtomicString oldKind = kind();
TrackBase::setKind(newKind);
if (isValidKindKeyword(kind))
m_kind = kind;
else
m_kind = subtitlesKeyword();
if (m_client && oldKind != m_kind)
if (m_client && oldKind != kind())
m_client->textTrackKindChanged(this);
}
......@@ -376,10 +369,10 @@ void TextTrack::cueDidChange(TextTrackCue* cue)
int TextTrack::trackIndex()
{
ASSERT(m_mediaElement);
ASSERT(m_trackList);
if (m_trackIndex == invalidTrackIndex)
m_trackIndex = m_mediaElement->textTracks()->getTrackIndex(this);
m_trackIndex = m_trackList->getTrackIndex(this);
return m_trackIndex;
}
......@@ -392,7 +385,7 @@ void TextTrack::invalidateTrackIndex()
bool TextTrack::isRendered()
{
if (m_kind != captionsKeyword() && m_kind != subtitlesKeyword())
if (kind() != captionsKeyword() && kind() != subtitlesKeyword())
return false;
if (m_mode != showingKeyword())
......@@ -411,10 +404,10 @@ TextTrackCueList* TextTrack::ensureTextTrackCueList()
int TextTrack::trackIndexRelativeToRenderedTracks()
{
ASSERT(m_mediaElement);
ASSERT(m_trackList);
if (m_renderedTrackIndex == invalidTrackIndex)
m_renderedTrackIndex = m_mediaElement->textTracks()->getTrackIndexRelativeToRenderedTracks(this);
m_renderedTrackIndex = m_trackList->getTrackIndexRelativeToRenderedTracks(this);
return m_renderedTrackIndex;
}
......
......@@ -28,6 +28,7 @@
#define TextTrack_h
#include "bindings/v8/ScriptWrappable.h"
#include "core/events/EventTarget.h"
#include "core/html/track/TrackBase.h"
#include "wtf/text/WTFString.h"
......@@ -39,6 +40,7 @@ class HTMLMediaElement;
class TextTrack;
class TextTrackCue;
class TextTrackCueList;
class TextTrackList;
class VTTRegion;
class VTTRegionList;
......@@ -53,7 +55,8 @@ public:
virtual void textTrackRemoveCue(TextTrack*, PassRefPtr<TextTrackCue>) = 0;
};
class TextTrack : public TrackBase, public ScriptWrappable {
class TextTrack : public TrackBase, public ScriptWrappable, public EventTargetWithInlineData {
REFCOUNTED_EVENT_TARGET(TrackBase);
public:
static PassRefPtr<TextTrack> create(Document& document, TextTrackClient* client, const AtomicString& kind, const AtomicString& label, const AtomicString& language)
{
......@@ -61,11 +64,10 @@ public:
}
virtual ~TextTrack();
void setMediaElement(HTMLMediaElement* element) { m_mediaElement = element; }
HTMLMediaElement* mediaElement() { return m_mediaElement; }
void setTrackList(TextTrackList* trackList) { m_trackList = trackList; }
TextTrackList* trackList() { return m_trackList; }
const AtomicString& kind() const { return m_kind; }
void setKind(const AtomicString&);
virtual void setKind(const AtomicString&) OVERRIDE;
static const AtomicString& subtitlesKeyword();
static const AtomicString& captionsKeyword();
......@@ -74,15 +76,6 @@ public:
static const AtomicString& metadataKeyword();
static bool isValidKindKeyword(const AtomicString&);
AtomicString label() const { return m_label; }
void setLabel(const AtomicString& label) { m_label = label; }
AtomicString language() const { return m_language; }
void setLanguage(const AtomicString& language) { m_language = language; }
AtomicString id() const { return m_id; }
void setId(const AtomicString& id) { m_id = id; }
static const AtomicString& disabledKeyword();
static const AtomicString& hiddenKeyword();
static const AtomicString& showingKeyword();
......@@ -138,6 +131,9 @@ public:
protected:
TextTrack(Document&, TextTrackClient*, const AtomicString& kind, const AtomicString& label, const AtomicString& language, const AtomicString& id, TextTrackType);
virtual bool isValidKind(const AtomicString& kind) const OVERRIDE { return isValidKindKeyword(kind); }
virtual AtomicString defaultKind() const OVERRIDE { return subtitlesKeyword(); }
RefPtr<TextTrackCueList> m_cues;
private:
......@@ -149,11 +145,7 @@ private:
// FIXME: Remove this pointer and get the Document from m_client
Document* m_document;
HTMLMediaElement* m_mediaElement;
AtomicString m_kind;
AtomicString m_label;
AtomicString m_language;
AtomicString m_id;
TextTrackList* m_trackList;
AtomicString m_mode;
TextTrackClient* m_client;
TextTrackType m_trackType;
......
......@@ -192,8 +192,8 @@ void TextTrackList::append(PassRefPtr<TextTrack> prpTrack)
invalidateTrackIndexesAfterTrack(track.get());
ASSERT(!track->mediaElement() || track->mediaElement() == m_owner);
track->setMediaElement(m_owner);
ASSERT(!track->trackList());
track->setTrackList(this);
scheduleAddTrackEvent(track.release());
}
......@@ -220,8 +220,8 @@ void TextTrackList::remove(TextTrack* track)
invalidateTrackIndexesAfterTrack(track);
ASSERT(track->mediaElement() == m_owner);
track->setMediaElement(0);
ASSERT(track->trackList() == this);
track->setTrackList(0);
tracks->remove(index);
......
/*
* Copyright (C) 2013 Google Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "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 THE COPYRIGHT
* OWNER 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 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "config.h"
#include "core/html/track/TrackBase.h"
namespace WebCore {
TrackBase::TrackBase(Type type, const AtomicString& label, const AtomicString& language, const AtomicString& id)
: m_type(type)
, m_label(label)
, m_language(language)
, m_id(id)
{
}
TrackBase::~TrackBase()
{
}
void TrackBase::setKind(const AtomicString& kind)
{
if (isValidKind(kind))
m_kind = kind;
else
m_kind = defaultKind();
}
} // namespace WebCore
......@@ -26,24 +26,42 @@
#ifndef TrackBase_h
#define TrackBase_h
#include "core/events/EventTarget.h"
#include "wtf/RefCounted.h"
#include "wtf/text/AtomicString.h"
namespace WebCore {
class TrackBase : public RefCounted<TrackBase>, public EventTargetWithInlineData {
REFCOUNTED_EVENT_TARGET(TrackBase);
class TrackBase : public RefCounted<TrackBase> {
public:
virtual ~TrackBase() { }
virtual ~TrackBase();
enum Type { TextTrack, AudioTrack, VideoTrack };
Type type() const { return m_type; }
const AtomicString& kind() const { return m_kind; }
virtual void setKind(const AtomicString&);
AtomicString label() const { return m_label; }
void setLabel(const AtomicString& label) { m_label = label; }
AtomicString language() const { return m_language; }
void setLanguage(const AtomicString& language) { m_language = language; }
AtomicString id() const { return m_id; }
void setId(const AtomicString& id) { m_id = id; }
protected:
explicit TrackBase(Type type) : m_type(type) { }
TrackBase(Type, const AtomicString& label, const AtomicString& language, const AtomicString& id);
virtual bool isValidKind(const AtomicString&) const = 0;
virtual AtomicString defaultKind() const = 0;
private:
Type m_type;
AtomicString m_kind;
AtomicString m_label;
AtomicString m_language;
AtomicString m_id;
};
} // namespace WebCore
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment