Index: Source/core/html/track/TextTrack.cpp |
diff --git a/Source/core/html/track/TextTrack.cpp b/Source/core/html/track/TextTrack.cpp |
index 0017abfd3762e02dc922415b56fc0d310a600c4f..d7b4711ed5d5736c4764c95e592a96149918c6a2 100644 |
--- a/Source/core/html/track/TextTrack.cpp |
+++ b/Source/core/html/track/TextTrack.cpp |
@@ -95,14 +95,13 @@ const AtomicString& TextTrack::showingKeyword() |
return ended; |
} |
-TextTrack::TextTrack(Document& document, TextTrackClient* client, const AtomicString& kind, const AtomicString& label, const AtomicString& language, const AtomicString& id, TextTrackType type) |
+TextTrack::TextTrack(Document& document, const AtomicString& kind, const AtomicString& label, const AtomicString& language, const AtomicString& id, TextTrackType type) |
: TrackBase(TrackBase::TextTrack, label, language, id) |
, m_cues(nullptr) |
, m_regions(nullptr) |
, m_document(&document) |
, m_trackList(0) |
, m_mode(disabledKeyword()) |
- , m_client(client) |
, m_trackType(type) |
, m_readinessState(NotLoaded) |
, m_trackIndex(invalidTrackIndex) |
@@ -115,10 +114,9 @@ TextTrack::TextTrack(Document& document, TextTrackClient* client, const AtomicSt |
TextTrack::~TextTrack() |
{ |
- if (m_cues) { |
- if (m_client) |
- m_client->textTrackRemoveCues(this, m_cues.get()); |
+ ASSERT(!m_trackList); |
+ if (m_cues) { |
for (size_t i = 0; i < m_cues->length(); ++i) |
m_cues->item(i)->setTrack(0); |
} |
@@ -127,7 +125,6 @@ TextTrack::~TextTrack() |
for (size_t i = 0; i < m_regions->length(); ++i) |
m_regions->item(i)->setTrack(0); |
} |
- clearClient(); |
} |
bool TextTrack::isValidKindKeyword(const AtomicString& value) |
@@ -148,12 +145,9 @@ bool TextTrack::isValidKindKeyword(const AtomicString& value) |
void TextTrack::setTrackList(TextTrackList* trackList) |
{ |
- // NOTE: We are using m_trackList->owner() instead of m_client here because |
- // when a HTMLTrackElement is reparented, HTMLTrackElement::textTrackRemoveCues() |
- // will forward the call to the new parent instead of the element the track is being |
- // removed from. |
- if (!trackList && m_trackList && m_trackList->owner() && m_cues) |
- m_trackList->owner()->textTrackRemoveCues(this, m_cues.get()); |
+ if (!trackList && mediaElement() && m_cues) |
+ mediaElement()->textTrackRemoveCues(this, m_cues.get()); |
+ |
m_trackList = trackList; |
} |
@@ -162,8 +156,8 @@ void TextTrack::setKind(const AtomicString& newKind) |
AtomicString oldKind = kind(); |
TrackBase::setKind(newKind); |
- if (m_client && oldKind != kind()) |
- m_client->textTrackKindChanged(this); |
+ if (mediaElement() && oldKind != kind()) |
+ mediaElement()->textTrackKindChanged(this); |
} |
void TextTrack::setMode(const AtomicString& mode) |
@@ -177,8 +171,8 @@ void TextTrack::setMode(const AtomicString& mode) |
// If mode changes to disabled, remove this track's cues from the client |
// because they will no longer be accessible from the cues() function. |
- if (mode == disabledKeyword() && m_client && m_cues) |
- m_client->textTrackRemoveCues(this, m_cues.get()); |
+ if (mode == disabledKeyword() && mediaElement() && m_cues) |
+ mediaElement()->textTrackRemoveCues(this, m_cues.get()); |
if (mode != showingKeyword() && m_cues) |
for (size_t i = 0; i < m_cues->length(); ++i) |
@@ -186,8 +180,8 @@ void TextTrack::setMode(const AtomicString& mode) |
m_mode = mode; |
- if (m_client) |
- m_client->textTrackModeChanged(this); |
+ if (mediaElement()) |
+ mediaElement()->textTrackModeChanged(this); |
} |
TextTrackCueList* TextTrack::cues() |
@@ -207,8 +201,8 @@ void TextTrack::removeAllCues() |
if (!m_cues) |
return; |
- if (m_client) |
- m_client->textTrackRemoveCues(this, m_cues.get()); |
+ if (mediaElement()) |
+ mediaElement()->textTrackRemoveCues(this, m_cues.get()); |
for (size_t i = 0; i < m_cues->length(); ++i) |
m_cues->item(i)->setTrack(0); |
@@ -254,8 +248,8 @@ void TextTrack::addCue(PassRefPtr<TextTrackCue> prpCue) |
cue->setTrack(this); |
ensureTextTrackCueList()->add(cue); |
- if (m_client) |
- m_client->textTrackAddCue(this, cue.get()); |
+ if (mediaElement()) |
+ mediaElement()->textTrackAddCue(this, cue.get()); |
} |
void TextTrack::removeCue(TextTrackCue* cue, ExceptionState& exceptionState) |
@@ -281,8 +275,8 @@ void TextTrack::removeCue(TextTrackCue* cue, ExceptionState& exceptionState) |
} |
cue->setTrack(0); |
- if (m_client) |
- m_client->textTrackRemoveCue(this, cue); |
+ if (mediaElement()) |
+ mediaElement()->textTrackRemoveCue(this, cue); |
} |
VTTRegionList* TextTrack::ensureVTTRegionList() |
@@ -358,24 +352,24 @@ void TextTrack::removeRegion(VTTRegion* region, ExceptionState &exceptionState) |
void TextTrack::cueWillChange(TextTrackCue* cue) |
{ |
- if (!m_client) |
+ if (!mediaElement()) |
return; |
// The cue may need to be repositioned in the media element's interval tree, may need to |
// be re-rendered, etc, so remove it before the modification... |
- m_client->textTrackRemoveCue(this, cue); |
+ mediaElement()->textTrackRemoveCue(this, cue); |
} |
void TextTrack::cueDidChange(TextTrackCue* cue) |
{ |
- if (!m_client) |
+ if (!mediaElement()) |
return; |
// Make sure the TextTrackCueList order is up-to-date. |
ensureTextTrackCueList()->updateCueIndex(cue); |
// ... and add it back again. |
- m_client->textTrackAddCue(this, cue); |
+ mediaElement()->textTrackAddCue(this, cue); |
} |
int TextTrack::trackIndex() |
@@ -433,4 +427,9 @@ ExecutionContext* TextTrack::executionContext() const |
return m_document; |
} |
+HTMLMediaElement* TextTrack::mediaElement() |
+{ |
+ return m_trackList ? m_trackList->owner() : 0; |
+} |
+ |
} // namespace WebCore |