tor-browser

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

WidevineFileIO.cpp (3294B)


      1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
      2 /* vim: set ts=8 sts=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 "WidevineFileIO.h"
      8 
      9 #include "GMPLog.h"
     10 #include "WidevineUtils.h"
     11 #include "gmp-api/gmp-platform.h"
     12 
     13 // Declared in ChromiumCDMAdapter.cpp.
     14 extern const GMPPlatformAPI* sPlatform;
     15 
     16 namespace mozilla {
     17 
     18 void WidevineFileIO::Open(const char* aFilename, uint32_t aFilenameLength) {
     19  mName = std::string(aFilename, aFilename + aFilenameLength);
     20  GMPRecord* record = nullptr;
     21  GMPErr err = sPlatform->createrecord(aFilename, aFilenameLength, &record,
     22                                       static_cast<GMPRecordClient*>(this));
     23  if (GMP_FAILED(err)) {
     24    GMP_LOG_DEBUG("WidevineFileIO::Open() '%s' GMPCreateRecord failed",
     25                  mName.c_str());
     26    mClient->OnOpenComplete(cdm::FileIOClient::Status::kError);
     27    return;
     28  }
     29  if (GMP_FAILED(record->Open())) {
     30    GMP_LOG_DEBUG("WidevineFileIO::Open() '%s' record open failed",
     31                  mName.c_str());
     32    mClient->OnOpenComplete(cdm::FileIOClient::Status::kError);
     33    return;
     34  }
     35 
     36  GMP_LOG_DEBUG("WidevineFileIO::Open() '%s'", mName.c_str());
     37  mRecord = record;
     38 }
     39 
     40 void WidevineFileIO::Read() {
     41  if (!mRecord) {
     42    GMP_LOG_DEBUG("WidevineFileIO::Read() '%s' used uninitialized!",
     43                  mName.c_str());
     44    mClient->OnReadComplete(cdm::FileIOClient::Status::kError, nullptr, 0);
     45    return;
     46  }
     47  GMP_LOG_DEBUG("WidevineFileIO::Read() '%s'", mName.c_str());
     48  mRecord->Read();
     49 }
     50 
     51 void WidevineFileIO::Write(const uint8_t* aData, uint32_t aDataSize) {
     52  if (!mRecord) {
     53    GMP_LOG_DEBUG("WidevineFileIO::Write() '%s' used uninitialized!",
     54                  mName.c_str());
     55    mClient->OnWriteComplete(cdm::FileIOClient::Status::kError);
     56    return;
     57  }
     58  mRecord->Write(aData, aDataSize);
     59 }
     60 
     61 void WidevineFileIO::Close() {
     62  GMP_LOG_DEBUG("WidevineFileIO::Close() '%s'", mName.c_str());
     63  if (mRecord) {
     64    mRecord->Close();
     65    mRecord = nullptr;
     66  }
     67  delete this;
     68 }
     69 
     70 static cdm::FileIOClient::Status GMPToWidevineFileStatus(GMPErr aStatus) {
     71  switch (aStatus) {
     72    case GMPRecordInUse:
     73      return cdm::FileIOClient::Status::kInUse;
     74    case GMPNoErr:
     75      return cdm::FileIOClient::Status::kSuccess;
     76    default:
     77      return cdm::FileIOClient::Status::kError;
     78  }
     79 }
     80 
     81 void WidevineFileIO::OpenComplete(GMPErr aStatus) {
     82  GMP_LOG_DEBUG("WidevineFileIO::OpenComplete() '%s' status=%d", mName.c_str(),
     83                aStatus);
     84  mClient->OnOpenComplete(GMPToWidevineFileStatus(aStatus));
     85 }
     86 
     87 void WidevineFileIO::ReadComplete(GMPErr aStatus, const uint8_t* aData,
     88                                  uint32_t aDataSize) {
     89  GMP_LOG_DEBUG("WidevineFileIO::OnReadComplete() '%s' status=%d",
     90                mName.c_str(), aStatus);
     91  mClient->OnReadComplete(GMPToWidevineFileStatus(aStatus), aData, aDataSize);
     92 }
     93 
     94 void WidevineFileIO::WriteComplete(GMPErr aStatus) {
     95  GMP_LOG_DEBUG("WidevineFileIO::WriteComplete() '%s' status=%d", mName.c_str(),
     96                aStatus);
     97  mClient->OnWriteComplete(GMPToWidevineFileStatus(aStatus));
     98 }
     99 
    100 }  // namespace mozilla