1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "media/cdm/library_cdm/clear_key_cdm/cdm_file_adapter.h"
6
7 #include <memory>
8
9 #include "base/bind.h"
10 #include "base/logging.h"
11 #include "media/cdm/library_cdm/cdm_host_proxy.h"
12
13 namespace media {
14
15 namespace {
16
ConvertStatus(cdm::FileIOClient::Status status)17 CdmFileAdapter::Status ConvertStatus(cdm::FileIOClient::Status status) {
18 switch (status) {
19 case cdm::FileIOClient::Status::kSuccess:
20 return CdmFileAdapter::Status::kSuccess;
21 case cdm::FileIOClient::Status::kInUse:
22 return CdmFileAdapter::Status::kInUse;
23 case cdm::FileIOClient::Status::kError:
24 return CdmFileAdapter::Status::kError;
25 }
26
27 NOTREACHED();
28 return CdmFileAdapter::Status::kError;
29 }
30
31 } // namespace
32
CdmFileAdapter(CdmHostProxy * cdm_host_proxy)33 CdmFileAdapter::CdmFileAdapter(CdmHostProxy* cdm_host_proxy) {
34 file_io_ = cdm_host_proxy->CreateFileIO(this);
35 }
36
~CdmFileAdapter()37 CdmFileAdapter::~CdmFileAdapter() {
38 DCHECK(!open_cb_);
39 DCHECK(!read_cb_);
40 DCHECK(!write_cb_);
41 file_io_->Close();
42 }
43
Open(const std::string & name,FileOpenedCB open_cb)44 void CdmFileAdapter::Open(const std::string& name, FileOpenedCB open_cb) {
45 DVLOG(2) << __func__;
46 open_cb_ = std::move(open_cb);
47 file_io_->Open(name.data(), name.length());
48 }
49
Read(ReadCB read_cb)50 void CdmFileAdapter::Read(ReadCB read_cb) {
51 DVLOG(2) << __func__;
52 read_cb_ = std::move(read_cb);
53 file_io_->Read();
54 }
55
Write(const std::vector<uint8_t> & data,WriteCB write_cb)56 void CdmFileAdapter::Write(const std::vector<uint8_t>& data, WriteCB write_cb) {
57 DVLOG(2) << __func__;
58 write_cb_ = std::move(write_cb);
59 file_io_->Write(data.data(), data.size());
60 }
61
OnOpenComplete(cdm::FileIOClient::Status status)62 void CdmFileAdapter::OnOpenComplete(cdm::FileIOClient::Status status) {
63 std::move(open_cb_).Run(ConvertStatus(status));
64 }
65
OnReadComplete(cdm::FileIOClient::Status status,const uint8_t * data,uint32_t data_size)66 void CdmFileAdapter::OnReadComplete(cdm::FileIOClient::Status status,
67 const uint8_t* data,
68 uint32_t data_size) {
69 std::move(read_cb_).Run(
70 status == FileIOClient::Status::kSuccess && data_size > 0,
71 std::vector<uint8_t>(data, data + data_size));
72 }
73
OnWriteComplete(cdm::FileIOClient::Status status)74 void CdmFileAdapter::OnWriteComplete(cdm::FileIOClient::Status status) {
75 std::move(write_cb_).Run(status == FileIOClient::Status::kSuccess);
76 }
77
78 } // namespace media
79