blob: 5cfb327f496c5b74e0b8e85893ec571ca544b7d0 [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef MEDIA_REMOTING_REMOTING_CDM_H_
#define MEDIA_REMOTING_REMOTING_CDM_H_
#include "media/base/cdm_factory.h"
#include "media/base/content_decryption_module.h"
#include "media/remoting/remoting_cdm_context.h"
#include "media/remoting/remoting_cdm_controller.h"
namespace media {
namespace remoting {
// TODO(xjz): Merge this with erickung's implementation.
// TODO(miu): Execute renaming on all RemotingCdm* classes after erickung's
// implementation is merged-in.
class RemotingCdm : public ContentDecryptionModule {
public:
RemotingCdm(const std::string& key_system,
const GURL& security_origin,
const CdmConfig& cdm_config,
const SessionMessageCB& session_message_cb,
const SessionClosedCB& session_closed_cb,
const SessionKeysChangeCB& session_keys_change_cb,
const SessionExpirationUpdateCB& session_expiration_update_cb,
const CdmCreatedCB& cdm_created_cb,
std::unique_ptr<RemotingCdmController> remoting_cdm_controller);
// ContentDecryptionModule implementations.
void SetServerCertificate(const std::vector<uint8_t>& certificate,
std::unique_ptr<SimpleCdmPromise> promise) override;
void CreateSessionAndGenerateRequest(
CdmSessionType session_type,
EmeInitDataType init_data_type,
const std::vector<uint8_t>& init_data,
std::unique_ptr<NewSessionCdmPromise> promise) override;
void LoadSession(CdmSessionType session_type,
const std::string& session_id,
std::unique_ptr<NewSessionCdmPromise> promise) override;
void UpdateSession(const std::string& session_id,
const std::vector<uint8_t>& response,
std::unique_ptr<SimpleCdmPromise> promise) override;
void CloseSession(const std::string& session_id,
std::unique_ptr<SimpleCdmPromise> promise) override;
void RemoveSession(const std::string& session_id,
std::unique_ptr<SimpleCdmPromise> promise) override;
CdmContext* GetCdmContext() override;
SharedSession* session() const { return remoting_cdm_controller_->session(); }
private:
~RemotingCdm() override;
const std::unique_ptr<RemotingCdmController> remoting_cdm_controller_;
RemotingCdmContext remoting_cdm_context_;
DISALLOW_COPY_AND_ASSIGN(RemotingCdm);
};
} // namespace remoting
} // namespace media
#endif // MEDIA_REMOTING_REMOTING_CDM_H_