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 @@ ...@@ -2678,6 +2678,7 @@
'html/track/TextTrackCueList.cpp', 'html/track/TextTrackCueList.cpp',
'html/track/TextTrackCueList.h', 'html/track/TextTrackCueList.h',
'html/track/TextTrackList.cpp', 'html/track/TextTrackList.cpp',
'html/track/TrackBase.cpp',
'html/track/TrackBase.h', 'html/track/TrackBase.h',
'html/track/TrackEvent.cpp', 'html/track/TrackEvent.cpp',
'html/track/vtt/BufferedLineReader.cpp', 'html/track/vtt/BufferedLineReader.cpp',
......
...@@ -96,14 +96,11 @@ const AtomicString& TextTrack::showingKeyword() ...@@ -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) 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_cues(0)
, m_regions(0) , m_regions(0)
, m_document(&document) , m_document(&document)
, m_mediaElement(0) , m_trackList(0)
, m_label(label)
, m_language(language)
, m_id(id)
, m_mode(disabledKeyword()) , m_mode(disabledKeyword())
, m_client(client) , m_client(client)
, m_trackType(type) , m_trackType(type)
...@@ -149,16 +146,12 @@ bool TextTrack::isValidKindKeyword(const AtomicString& value) ...@@ -149,16 +146,12 @@ bool TextTrack::isValidKindKeyword(const AtomicString& value)
return false; 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)) if (m_client && oldKind != kind())
m_kind = kind;
else
m_kind = subtitlesKeyword();
if (m_client && oldKind != m_kind)
m_client->textTrackKindChanged(this); m_client->textTrackKindChanged(this);
} }
...@@ -376,10 +369,10 @@ void TextTrack::cueDidChange(TextTrackCue* cue) ...@@ -376,10 +369,10 @@ void TextTrack::cueDidChange(TextTrackCue* cue)
int TextTrack::trackIndex() int TextTrack::trackIndex()
{ {
ASSERT(m_mediaElement); ASSERT(m_trackList);
if (m_trackIndex == invalidTrackIndex) if (m_trackIndex == invalidTrackIndex)
m_trackIndex = m_mediaElement->textTracks()->getTrackIndex(this); m_trackIndex = m_trackList->getTrackIndex(this);
return m_trackIndex; return m_trackIndex;
} }
...@@ -392,7 +385,7 @@ void TextTrack::invalidateTrackIndex() ...@@ -392,7 +385,7 @@ void TextTrack::invalidateTrackIndex()
bool TextTrack::isRendered() bool TextTrack::isRendered()
{ {
if (m_kind != captionsKeyword() && m_kind != subtitlesKeyword()) if (kind() != captionsKeyword() && kind() != subtitlesKeyword())
return false; return false;
if (m_mode != showingKeyword()) if (m_mode != showingKeyword())
...@@ -411,10 +404,10 @@ TextTrackCueList* TextTrack::ensureTextTrackCueList() ...@@ -411,10 +404,10 @@ TextTrackCueList* TextTrack::ensureTextTrackCueList()
int TextTrack::trackIndexRelativeToRenderedTracks() int TextTrack::trackIndexRelativeToRenderedTracks()
{ {
ASSERT(m_mediaElement); ASSERT(m_trackList);
if (m_renderedTrackIndex == invalidTrackIndex) if (m_renderedTrackIndex == invalidTrackIndex)
m_renderedTrackIndex = m_mediaElement->textTracks()->getTrackIndexRelativeToRenderedTracks(this); m_renderedTrackIndex = m_trackList->getTrackIndexRelativeToRenderedTracks(this);
return m_renderedTrackIndex; return m_renderedTrackIndex;
} }
......
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
#define TextTrack_h #define TextTrack_h
#include "bindings/v8/ScriptWrappable.h" #include "bindings/v8/ScriptWrappable.h"
#include "core/events/EventTarget.h"
#include "core/html/track/TrackBase.h" #include "core/html/track/TrackBase.h"
#include "wtf/text/WTFString.h" #include "wtf/text/WTFString.h"
...@@ -39,6 +40,7 @@ class HTMLMediaElement; ...@@ -39,6 +40,7 @@ class HTMLMediaElement;
class TextTrack; class TextTrack;
class TextTrackCue; class TextTrackCue;
class TextTrackCueList; class TextTrackCueList;
class TextTrackList;
class VTTRegion; class VTTRegion;
class VTTRegionList; class VTTRegionList;
...@@ -53,7 +55,8 @@ public: ...@@ -53,7 +55,8 @@ public:
virtual void textTrackRemoveCue(TextTrack*, PassRefPtr<TextTrackCue>) = 0; 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: public:
static PassRefPtr<TextTrack> create(Document& document, TextTrackClient* client, const AtomicString& kind, const AtomicString& label, const AtomicString& language) static PassRefPtr<TextTrack> create(Document& document, TextTrackClient* client, const AtomicString& kind, const AtomicString& label, const AtomicString& language)
{ {
...@@ -61,11 +64,10 @@ public: ...@@ -61,11 +64,10 @@ public:
} }
virtual ~TextTrack(); virtual ~TextTrack();
void setMediaElement(HTMLMediaElement* element) { m_mediaElement = element; } void setTrackList(TextTrackList* trackList) { m_trackList = trackList; }
HTMLMediaElement* mediaElement() { return m_mediaElement; } TextTrackList* trackList() { return m_trackList; }
const AtomicString& kind() const { return m_kind; } virtual void setKind(const AtomicString&) OVERRIDE;
void setKind(const AtomicString&);
static const AtomicString& subtitlesKeyword(); static const AtomicString& subtitlesKeyword();
static const AtomicString& captionsKeyword(); static const AtomicString& captionsKeyword();
...@@ -74,15 +76,6 @@ public: ...@@ -74,15 +76,6 @@ public:
static const AtomicString& metadataKeyword(); static const AtomicString& metadataKeyword();
static bool isValidKindKeyword(const AtomicString&); 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& disabledKeyword();
static const AtomicString& hiddenKeyword(); static const AtomicString& hiddenKeyword();
static const AtomicString& showingKeyword(); static const AtomicString& showingKeyword();
...@@ -138,6 +131,9 @@ public: ...@@ -138,6 +131,9 @@ public:
protected: protected:
TextTrack(Document&, TextTrackClient*, const AtomicString& kind, const AtomicString& label, const AtomicString& language, const AtomicString& id, TextTrackType); 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; RefPtr<TextTrackCueList> m_cues;
private: private:
...@@ -149,11 +145,7 @@ private: ...@@ -149,11 +145,7 @@ private:
// FIXME: Remove this pointer and get the Document from m_client // FIXME: Remove this pointer and get the Document from m_client
Document* m_document; Document* m_document;
HTMLMediaElement* m_mediaElement; TextTrackList* m_trackList;
AtomicString m_kind;
AtomicString m_label;
AtomicString m_language;
AtomicString m_id;
AtomicString m_mode; AtomicString m_mode;
TextTrackClient* m_client; TextTrackClient* m_client;
TextTrackType m_trackType; TextTrackType m_trackType;
......
...@@ -192,8 +192,8 @@ void TextTrackList::append(PassRefPtr<TextTrack> prpTrack) ...@@ -192,8 +192,8 @@ void TextTrackList::append(PassRefPtr<TextTrack> prpTrack)
invalidateTrackIndexesAfterTrack(track.get()); invalidateTrackIndexesAfterTrack(track.get());
ASSERT(!track->mediaElement() || track->mediaElement() == m_owner); ASSERT(!track->trackList());
track->setMediaElement(m_owner); track->setTrackList(this);
scheduleAddTrackEvent(track.release()); scheduleAddTrackEvent(track.release());
} }
...@@ -220,8 +220,8 @@ void TextTrackList::remove(TextTrack* track) ...@@ -220,8 +220,8 @@ void TextTrackList::remove(TextTrack* track)
invalidateTrackIndexesAfterTrack(track); invalidateTrackIndexesAfterTrack(track);
ASSERT(track->mediaElement() == m_owner); ASSERT(track->trackList() == this);
track->setMediaElement(0); track->setTrackList(0);
tracks->remove(index); 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 @@ ...@@ -26,24 +26,42 @@
#ifndef TrackBase_h #ifndef TrackBase_h
#define TrackBase_h #define TrackBase_h
#include "core/events/EventTarget.h"
#include "wtf/RefCounted.h" #include "wtf/RefCounted.h"
#include "wtf/text/AtomicString.h"
namespace WebCore { namespace WebCore {
class TrackBase : public RefCounted<TrackBase>, public EventTargetWithInlineData { class TrackBase : public RefCounted<TrackBase> {
REFCOUNTED_EVENT_TARGET(TrackBase);
public: public:
virtual ~TrackBase() { } virtual ~TrackBase();
enum Type { TextTrack, AudioTrack, VideoTrack }; enum Type { TextTrack, AudioTrack, VideoTrack };
Type type() const { return m_type; } 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: 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: private:
Type m_type; Type m_type;
AtomicString m_kind;
AtomicString m_label;
AtomicString m_language;
AtomicString m_id;
}; };
} // namespace WebCore } // 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