tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

TextTrackCueList.cpp (3238B)


      1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
      2 /* This Source Code Form is subject to the terms of the Mozilla Public
      3 * License, v. 2.0. If a copy of the MPL was not distributed with this
      4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      5 
      6 #include "mozilla/dom/TextTrackCueList.h"
      7 
      8 #include "mozilla/dom/TextTrackCue.h"
      9 #include "mozilla/dom/TextTrackCueListBinding.h"
     10 
     11 namespace mozilla::dom {
     12 
     13 class CompareCuesByTime {
     14 public:
     15  bool Equals(TextTrackCue* aOne, TextTrackCue* aTwo) const { return false; }
     16  bool LessThan(TextTrackCue* aOne, TextTrackCue* aTwo) const {
     17    return aOne->StartTime() < aTwo->StartTime() ||
     18           (aOne->StartTime() == aTwo->StartTime() &&
     19            aOne->EndTime() >= aTwo->EndTime());
     20  }
     21 };
     22 
     23 NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(TextTrackCueList, mParent, mList)
     24 
     25 NS_IMPL_CYCLE_COLLECTING_ADDREF(TextTrackCueList)
     26 NS_IMPL_CYCLE_COLLECTING_RELEASE(TextTrackCueList)
     27 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(TextTrackCueList)
     28  NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY
     29  NS_INTERFACE_MAP_ENTRY(nsISupports)
     30 NS_INTERFACE_MAP_END
     31 
     32 TextTrackCueList::TextTrackCueList(nsISupports* aParent) : mParent(aParent) {}
     33 
     34 TextTrackCueList::~TextTrackCueList() = default;
     35 
     36 JSObject* TextTrackCueList::WrapObject(JSContext* aCx,
     37                                       JS::Handle<JSObject*> aGivenProto) {
     38  return TextTrackCueList_Binding::Wrap(aCx, this, aGivenProto);
     39 }
     40 
     41 TextTrackCue* TextTrackCueList::IndexedGetter(uint32_t aIndex, bool& aFound) {
     42  aFound = aIndex < mList.Length();
     43  if (!aFound) {
     44    return nullptr;
     45  }
     46  return mList[aIndex];
     47 }
     48 
     49 TextTrackCue* TextTrackCueList::operator[](uint32_t aIndex) {
     50  return mList.SafeElementAt(aIndex, nullptr);
     51 }
     52 
     53 TextTrackCueList& TextTrackCueList::operator=(const TextTrackCueList& aOther) {
     54  mList = aOther.mList.Clone();
     55  return *this;
     56 }
     57 
     58 TextTrackCue* TextTrackCueList::GetCueById(const nsAString& aId) {
     59  if (aId.IsEmpty()) {
     60    return nullptr;
     61  }
     62 
     63  for (uint32_t i = 0; i < mList.Length(); i++) {
     64    if (aId.Equals(mList[i]->Id())) {
     65      return mList[i];
     66    }
     67  }
     68  return nullptr;
     69 }
     70 
     71 void TextTrackCueList::AddCue(TextTrackCue& aCue) {
     72  if (mCueSet.Contains(&aCue)) {
     73    return;
     74  }
     75  mList.InsertElementSorted(&aCue, CompareCuesByTime());
     76  mCueSet.Insert(&aCue);
     77 }
     78 
     79 void TextTrackCueList::RemoveCue(TextTrackCue& aCue, ErrorResult& aRv) {
     80  if (!mCueSet.Contains(&aCue)) {
     81    aRv.Throw(NS_ERROR_DOM_NOT_FOUND_ERR);
     82    return;
     83  }
     84  RemoveCue(aCue);
     85 }
     86 
     87 void TextTrackCueList::RemoveCue(TextTrackCue& aCue) {
     88  mList.RemoveElement(&aCue);
     89  mCueSet.Remove(&aCue);
     90 }
     91 
     92 void TextTrackCueList::GetArray(nsTArray<RefPtr<TextTrackCue>>& aCues) {
     93  aCues = mList.Clone();
     94 }
     95 
     96 void TextTrackCueList::SetCuesInactive() {
     97  for (uint32_t i = 0; i < mList.Length(); ++i) {
     98    mList[i]->SetActive(false);
     99  }
    100 }
    101 
    102 void TextTrackCueList::NotifyCueUpdated(TextTrackCue* aCue) {
    103  if (aCue) {
    104    mList.RemoveElement(aCue);
    105    mList.InsertElementSorted(aCue, CompareCuesByTime());
    106  }
    107 }
    108 
    109 bool TextTrackCueList::IsCueExist(TextTrackCue* aCue) const {
    110  return aCue && mCueSet.Contains(aCue);
    111 }
    112 
    113 nsTArray<RefPtr<TextTrackCue>>& TextTrackCueList::GetCuesArray() {
    114  return mList;
    115 }
    116 
    117 }  // namespace mozilla::dom