| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2011, 2012 Apple Inc. All rights reserved. | 2 * Copyright (C) 2011, 2012 Apple Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 28 matching lines...) Expand all Loading... |
| 39 | 39 |
| 40 TextTrackList::TextTrackList(HTMLMediaElement* owner) | 40 TextTrackList::TextTrackList(HTMLMediaElement* owner) |
| 41 : m_owner(owner) | 41 : m_owner(owner) |
| 42 , m_asyncEventQueue(GenericEventQueue::create(this)) | 42 , m_asyncEventQueue(GenericEventQueue::create(this)) |
| 43 { | 43 { |
| 44 ScriptWrappable::init(this); | 44 ScriptWrappable::init(this); |
| 45 } | 45 } |
| 46 | 46 |
| 47 TextTrackList::~TextTrackList() | 47 TextTrackList::~TextTrackList() |
| 48 { | 48 { |
| 49 ASSERT(!m_owner); |
| 50 |
| 49 m_asyncEventQueue->close(); | 51 m_asyncEventQueue->close(); |
| 52 |
| 53 for (unsigned i = 0; i < length(); ++i) { |
| 54 item(i)->setTrackList(0); |
| 55 } |
| 50 } | 56 } |
| 51 | 57 |
| 52 unsigned TextTrackList::length() const | 58 unsigned TextTrackList::length() const |
| 53 { | 59 { |
| 54 return m_addTrackTracks.size() + m_elementTracks.size() + m_inbandTracks.siz
e(); | 60 return m_addTrackTracks.size() + m_elementTracks.size() + m_inbandTracks.siz
e(); |
| 55 } | 61 } |
| 56 | 62 |
| 57 int TextTrackList::getTrackIndex(TextTrack *textTrack) | 63 int TextTrackList::getTrackIndex(TextTrack *textTrack) |
| 58 { | 64 { |
| 59 if (textTrack->trackType() == TextTrack::TrackElement) | 65 if (textTrack->trackType() == TextTrack::TrackElement) |
| (...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 222 track->setTrackList(0); | 228 track->setTrackList(0); |
| 223 | 229 |
| 224 tracks->remove(index); | 230 tracks->remove(index); |
| 225 | 231 |
| 226 scheduleRemoveTrackEvent(track); | 232 scheduleRemoveTrackEvent(track); |
| 227 } | 233 } |
| 228 | 234 |
| 229 void TextTrackList::removeAllInbandTracks() | 235 void TextTrackList::removeAllInbandTracks() |
| 230 { | 236 { |
| 231 for (unsigned i = 0; i < m_inbandTracks.size(); ++i) { | 237 for (unsigned i = 0; i < m_inbandTracks.size(); ++i) { |
| 232 m_inbandTracks[i]->invalidateTrackIndex(); | |
| 233 m_inbandTracks[i]->setTrackList(0); | 238 m_inbandTracks[i]->setTrackList(0); |
| 234 } | 239 } |
| 235 m_inbandTracks.clear(); | 240 m_inbandTracks.clear(); |
| 236 } | 241 } |
| 237 | 242 |
| 238 bool TextTrackList::contains(TextTrack* track) const | 243 bool TextTrackList::contains(TextTrack* track) const |
| 239 { | 244 { |
| 240 const Vector<RefPtr<TextTrack> >* tracks = 0; | 245 const Vector<RefPtr<TextTrack> >* tracks = 0; |
| 241 | 246 |
| 242 if (track->trackType() == TextTrack::TrackElement) | 247 if (track->trackType() == TextTrack::TrackElement) |
| (...skipping 12 matching lines...) Expand all Loading... |
| 255 { | 260 { |
| 256 return EventTargetNames::TextTrackList; | 261 return EventTargetNames::TextTrackList; |
| 257 } | 262 } |
| 258 | 263 |
| 259 ExecutionContext* TextTrackList::executionContext() const | 264 ExecutionContext* TextTrackList::executionContext() const |
| 260 { | 265 { |
| 261 ASSERT(m_owner); | 266 ASSERT(m_owner); |
| 262 return m_owner->executionContext(); | 267 return m_owner->executionContext(); |
| 263 } | 268 } |
| 264 | 269 |
| 265 void TextTrackList::clearOwnerAndClients() | 270 void TextTrackList::clearOwner() |
| 266 { | 271 { |
| 267 m_owner = 0; | 272 m_owner = 0; |
| 268 | |
| 269 for (unsigned i = 0; i < length(); ++i) | |
| 270 item(i)->clearClient(); | |
| 271 } | 273 } |
| 272 | 274 |
| 273 void TextTrackList::scheduleTrackEvent(const AtomicString& eventName, PassRefPtr
<TextTrack> track) | 275 void TextTrackList::scheduleTrackEvent(const AtomicString& eventName, PassRefPtr
<TextTrack> track) |
| 274 { | 276 { |
| 275 TrackEventInit initializer; | 277 TrackEventInit initializer; |
| 276 initializer.track = track; | 278 initializer.track = track; |
| 277 initializer.bubbles = false; | 279 initializer.bubbles = false; |
| 278 initializer.cancelable = false; | 280 initializer.cancelable = false; |
| 279 | 281 |
| 280 m_asyncEventQueue->enqueueEvent(TrackEvent::create(eventName, initializer)); | 282 m_asyncEventQueue->enqueueEvent(TrackEvent::create(eventName, initializer)); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 319 // interface, with the track attribute initialized to the text track's | 321 // interface, with the track attribute initialized to the text track's |
| 320 // TextTrack object, at the media element's textTracks attribute's | 322 // TextTrack object, at the media element's textTracks attribute's |
| 321 // TextTrackList object. | 323 // TextTrackList object. |
| 322 scheduleTrackEvent(EventTypeNames::removetrack, track); | 324 scheduleTrackEvent(EventTypeNames::removetrack, track); |
| 323 } | 325 } |
| 324 | 326 |
| 325 HTMLMediaElement* TextTrackList::owner() const | 327 HTMLMediaElement* TextTrackList::owner() const |
| 326 { | 328 { |
| 327 return m_owner; | 329 return m_owner; |
| 328 } | 330 } |
| OLD | NEW |