tor-browser

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

MockMediaResource.cpp (2367B)


      1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
      2 /* vim: set ts=2 et sw=2 tw=80: */
      3 /* This Source Code Form is subject to the terms of the Mozilla Public
      4 * License, v. 2.0. If a copy of the MPL was not distributed with this
      5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      6 
      7 #include "MockMediaResource.h"
      8 
      9 #include <sys/stat.h>
     10 #include <sys/types.h>
     11 
     12 namespace mozilla {
     13 
     14 MockMediaResource::MockMediaResource(const char* aFileName)
     15    : mFileHandle(nullptr), mFileName(aFileName) {}
     16 
     17 nsresult MockMediaResource::Open() {
     18  mFileHandle = fopen(mFileName, "rb");
     19  if (mFileHandle == nullptr) {
     20    printf_stderr("Can't open %s\n", mFileName);
     21    return NS_ERROR_FAILURE;
     22  }
     23  return NS_OK;
     24 }
     25 
     26 MockMediaResource::~MockMediaResource() {
     27  if (mFileHandle != nullptr) {
     28    fclose(mFileHandle);
     29  }
     30 }
     31 
     32 nsresult MockMediaResource::ReadAt(int64_t aOffset, char* aBuffer,
     33                                   uint32_t aCount, uint32_t* aBytes) {
     34  if (mFileHandle == nullptr) {
     35    return NS_ERROR_FAILURE;
     36  }
     37 
     38  // Make it fail if we're re-entrant
     39  if (mEntry++) {
     40    MOZ_ASSERT(false);
     41    return NS_ERROR_FAILURE;
     42  }
     43 
     44  fseek(mFileHandle, aOffset, SEEK_SET);
     45  *aBytes = fread(aBuffer, 1, aCount, mFileHandle);
     46 
     47  mEntry--;
     48 
     49  return ferror(mFileHandle) ? NS_ERROR_FAILURE : NS_OK;
     50 }
     51 
     52 int64_t MockMediaResource::GetLength() {
     53  if (mFileHandle == nullptr) {
     54    return -1;
     55  }
     56  fseek(mFileHandle, 0, SEEK_END);
     57  return ftell(mFileHandle);
     58 }
     59 
     60 void MockMediaResource::MockClearBufferedRanges() { mRanges.Clear(); }
     61 
     62 void MockMediaResource::MockAddBufferedRange(int64_t aStart, int64_t aEnd) {
     63  mRanges += MediaByteRange(aStart, aEnd);
     64 }
     65 
     66 int64_t MockMediaResource::GetNextCachedData(int64_t aOffset) {
     67  if (!aOffset) {
     68    return mRanges.Length() ? mRanges[0].mStart : -1;
     69  }
     70  for (size_t i = 0; i < mRanges.Length(); i++) {
     71    if (aOffset == mRanges[i].mStart) {
     72      ++i;
     73      return i < mRanges.Length() ? mRanges[i].mStart : -1;
     74    }
     75  }
     76  return -1;
     77 }
     78 
     79 int64_t MockMediaResource::GetCachedDataEnd(int64_t aOffset) {
     80  for (size_t i = 0; i < mRanges.Length(); i++) {
     81    if (aOffset == mRanges[i].mStart) {
     82      return mRanges[i].mEnd;
     83    }
     84  }
     85  return aOffset;
     86 }
     87 
     88 nsresult MockMediaResource::GetCachedRanges(MediaByteRangeSet& aRanges) {
     89  aRanges = mRanges;
     90  return NS_OK;
     91 }
     92 
     93 }  // namespace mozilla