void TextTrack::addCue(PassRefPtr<TextTrackCue> prpCue) { if (!prpCue) return; RefPtr<TextTrackCue> cue = prpCue; // TODO(93143): Add spec-compliant behavior for negative time values. if (std::isnan(cue->startTime()) || std::isnan(cue->endTime()) || cue->startTime() < 0 || cue->endTime() < 0) return; // 4.8.10.12.5 Text track API // The addCue(cue) method of TextTrack objects, when invoked, must run the following steps: // 1. If the given cue is in a text track list of cues, then remove cue from that text track // list of cues. TextTrack* cueTrack = cue->track(); if (cueTrack && cueTrack != this) cueTrack->removeCue(cue.get(), ASSERT_NO_EXCEPTION); // 2. Add cue to the method's TextTrack object's text track's text track list of cues. cue->setTrack(this); ensureTextTrackCueList()->add(cue); if (m_client) m_client->textTrackAddCue(this, cue.get()); }
static v8::Handle<v8::Value> removeCueCallback(const v8::Arguments& args) { if (args.Length() < 1) return throwNotEnoughArgumentsError(args.GetIsolate()); TextTrack* imp = V8TextTrack::toNative(args.Holder()); ExceptionCode ec = 0; { V8TRYCATCH(TextTrackCue*, cue, V8TextTrackCue::HasInstance(MAYBE_MISSING_PARAMETER(args, 0, DefaultIsUndefined)) ? V8TextTrackCue::toNative(v8::Handle<v8::Object>::Cast(MAYBE_MISSING_PARAMETER(args, 0, DefaultIsUndefined))) : 0); imp->removeCue(cue, ec); if (UNLIKELY(ec)) goto fail; return v8Undefined(); } fail: return setDOMException(ec, args.GetIsolate()); }
void TextTrack::addCue(PassRefPtr<TextTrackCue> prpCue, ExceptionCode& ec) { if (!prpCue) return; RefPtr<TextTrackCue> cue = prpCue; // 4.7.10.12.6 Text tracks exposing in-band metadata // The UA will use DataCue to expose only text track cue objects that belong to a text track that has a text // track kind of metadata. // If a DataCue is added to a TextTrack via the addCue() method but the text track does not have its text // track kind set to metadata, throw a InvalidNodeTypeError exception and don't add the cue to the TextTrackList // of the TextTrack. if (cue->cueType() == TextTrackCue::Data && kind() != metadataKeyword()) { ec = INVALID_NODE_TYPE_ERR; return; } // TODO(93143): Add spec-compliant behavior for negative time values. if (!cue->startMediaTime().isValid() || !cue->endMediaTime().isValid() || cue->startMediaTime() < MediaTime::zeroTime() || cue->endMediaTime() < MediaTime::zeroTime()) return; // 4.8.10.12.5 Text track API // The addCue(cue) method of TextTrack objects, when invoked, must run the following steps: // 1. If the given cue is in a text track list of cues, then remove cue from that text track // list of cues. TextTrack* cueTrack = cue->track(); if (cueTrack && cueTrack != this) cueTrack->removeCue(cue.get(), ASSERT_NO_EXCEPTION); // 2. Add cue to the method's TextTrack object's text track's text track list of cues. cue->setTrack(this); ensureTextTrackCueList()->add(cue); if (m_client) m_client->textTrackAddCue(this, cue.get()); }