diff options
Diffstat (limited to 'media/cdm/ppapi/cdm_wrapper.h')
-rw-r--r-- | media/cdm/ppapi/cdm_wrapper.h | 151 |
1 files changed, 74 insertions, 77 deletions
diff --git a/media/cdm/ppapi/cdm_wrapper.h b/media/cdm/ppapi/cdm_wrapper.h index 63d8bbf..d827336 100644 --- a/media/cdm/ppapi/cdm_wrapper.h +++ b/media/cdm/ppapi/cdm_wrapper.h @@ -52,15 +52,15 @@ class CdmWrapper { virtual ~CdmWrapper() {}; - virtual void CreateSession(uint32_t reference_id, + virtual void CreateSession(uint32_t session_id, const char* type, uint32_t type_size, const uint8_t* init_data, uint32_t init_data_size) = 0; - virtual Result UpdateSession(uint32_t reference_id, + virtual Result UpdateSession(uint32_t session_id, const uint8_t* response, uint32_t response_size) = 0; - virtual Result ReleaseSession(uint32_t reference_id) = 0; + virtual Result ReleaseSession(uint32_t session_id) = 0; virtual void TimerExpired(void* context) = 0; virtual cdm::Status Decrypt(const cdm::InputBuffer& encrypted_buffer, cdm::DecryptedBlock* decrypted_buffer) = 0; @@ -84,40 +84,40 @@ class CdmWrapper { // ContentDecryptionModule_1 and ContentDecryptionModule_2 interface methods // AddKey() and CancelKeyRequest() (older versions of UpdateSession() and - // ReleaseSession(), respectively) pass in the session_id rather than the - // reference_id. As well, Host_1 and Host_2 callbacks SendKeyMessage() and - // SendKeyError() include the session ID, but the actual callbacks need the - // reference ID. + // ReleaseSession(), respectively) pass in the web_session_id rather than the + // session_id. As well, Host_1 and Host_2 callbacks SendKeyMessage() and + // SendKeyError() include the web_session_id, but the actual callbacks need + // session_id. // - // The following functions maintain the reference_id <-> session_id mapping. + // The following functions maintain the session_id <-> web_session_id mapping. // These can be removed once _1 and _2 interfaces are no longer supported. - // Determine the corresponding reference_id for |session_id|. - virtual uint32_t DetermineReferenceId(const std::string& session_id) = 0; + // Determine the corresponding session_id for |web_session_id|. + virtual uint32_t LookupSessionId(const std::string& web_session_id) = 0; - // Determine the corresponding session_id for |reference_id|. - virtual const std::string LookupSessionId(uint32_t reference_id) = 0; + // Determine the corresponding session_id for |session_id|. + virtual const std::string LookupWebSessionId(uint32_t session_id) = 0; + // Map between session_id and web_session_id. // TODO(jrummell): The following can be removed once CDM_1 and CDM_2 are // no longer supported. typedef std::map<uint32_t, std::string> SessionMap; - static const uint32_t kInvalidReferenceId = 0; - - // Map between session_id and reference_id. SessionMap session_map_; + static const uint32_t kInvalidSessionId = 0; + // As the response from PrefixedGenerateKeyRequest() may be synchronous or // asynchronous, keep track of the current request during the call to handle // synchronous responses or errors. If no response received, add this request // to a queue and assume that the subsequent responses come back in the order // issued. // TODO(jrummell): Remove once all supported CDM host interfaces support - // reference_id. - uint32_t current_key_request_reference_id_; - std::queue<uint32_t> pending_key_request_reference_ids_; + // session_id. + uint32_t current_key_request_session_id_; + std::queue<uint32_t> pending_key_request_session_ids_; protected: - CdmWrapper() : current_key_request_reference_id_(kInvalidReferenceId) {} + CdmWrapper() : current_key_request_session_id_(kInvalidSessionId) {} private: DISALLOW_COPY_AND_ASSIGN(CdmWrapper); @@ -147,24 +147,23 @@ class CdmWrapperImpl : public CdmWrapper { cdm_->Destroy(); } - virtual void CreateSession(uint32_t reference_id, + virtual void CreateSession(uint32_t session_id, const char* type, uint32_t type_size, const uint8_t* init_data, uint32_t init_data_size) OVERRIDE { - cdm_->CreateSession( - reference_id, type, type_size, init_data, init_data_size); + cdm_->CreateSession(session_id, type, type_size, init_data, init_data_size); } - virtual Result UpdateSession(uint32_t reference_id, + virtual Result UpdateSession(uint32_t session_id, const uint8_t* response, uint32_t response_size) OVERRIDE { - cdm_->UpdateSession(reference_id, response, response_size); + cdm_->UpdateSession(session_id, response, response_size); return NO_ACTION; } - virtual Result ReleaseSession(uint32_t reference_id) OVERRIDE { - cdm_->ReleaseSession(reference_id); + virtual Result ReleaseSession(uint32_t session_id) OVERRIDE { + cdm_->ReleaseSession(session_id); return NO_ACTION; } @@ -218,43 +217,42 @@ class CdmWrapperImpl : public CdmWrapper { cdm_->OnQueryOutputProtectionStatus(link_mask, output_protection_mask); } - uint32_t DetermineReferenceId(const std::string& session_id) { + uint32_t LookupSessionId(const std::string& web_session_id) { for (SessionMap::iterator it = session_map_.begin(); it != session_map_.end(); ++it) { - if (it->second == session_id) + if (it->second == web_session_id) return it->first; } // There is no entry in the map; assume it came from the current // PrefixedGenerateKeyRequest() call (if possible). If no current request, // assume it came from the oldest PrefixedGenerateKeyRequest() call. - uint32_t reference_id = current_key_request_reference_id_; - if (current_key_request_reference_id_) { + uint32_t session_id = current_key_request_session_id_; + if (current_key_request_session_id_) { // Only 1 response is allowed for the current // PrefixedGenerateKeyRequest(). - current_key_request_reference_id_ = kInvalidReferenceId; + current_key_request_session_id_ = kInvalidSessionId; } else { - PP_DCHECK(!pending_key_request_reference_ids_.empty()); - reference_id = pending_key_request_reference_ids_.front(); - pending_key_request_reference_ids_.pop(); + PP_DCHECK(!pending_key_request_session_ids_.empty()); + session_id = pending_key_request_session_ids_.front(); + pending_key_request_session_ids_.pop(); } // If this is a valid |session_id|, add it to the list. Otherwise, avoid // adding empty string as a mapping to prevent future calls with an empty - // string from using the wrong reference_id. - if (!session_id.empty()) { - PP_DCHECK(session_map_.find(reference_id) == session_map_.end()); - PP_DCHECK(!session_id.empty()); - session_map_[reference_id] = session_id; + // string from using the wrong session_id. + if (!web_session_id.empty()) { + PP_DCHECK(session_map_.find(session_id) == session_map_.end()); + session_map_[session_id] = web_session_id; } - return reference_id; + return session_id; } - const std::string LookupSessionId(uint32_t reference_id) { + const std::string LookupWebSessionId(uint32_t session_id) { // Session may not exist if error happens during CreateSession(). - SessionMap::iterator it = session_map_.find(reference_id); + SessionMap::iterator it = session_map_.find(session_id); return (it != session_map_.end()) ? it->second : std::string(); } @@ -276,14 +274,14 @@ class CdmWrapperImpl : public CdmWrapper { template <class CdmInterface> void PrefixedGenerateKeyRequest(CdmWrapper* wrapper, CdmInterface* cdm, - uint32_t reference_id, + uint32_t session_id, const char* type, uint32_t type_size, const uint8_t* init_data, uint32_t init_data_size) { // As it is possible for CDMs to reply synchronously during the call to - // GenerateKeyRequest(), keep track of |reference_id|. - wrapper->current_key_request_reference_id_ = reference_id; + // GenerateKeyRequest(), keep track of |session_id|. + wrapper->current_key_request_session_id_ = session_id; cdm::Status status = cdm->GenerateKeyRequest(type, type_size, init_data, init_data_size); @@ -291,42 +289,41 @@ void PrefixedGenerateKeyRequest(CdmWrapper* wrapper, if (status != cdm::kSuccess) { // If GenerateKeyRequest() failed, no subsequent asynchronous replies // will be sent. Verify that a response was sent synchronously. - PP_DCHECK(wrapper->current_key_request_reference_id_ == - CdmWrapper::kInvalidReferenceId); - wrapper->current_key_request_reference_id_ = - CdmWrapper::kInvalidReferenceId; + PP_DCHECK(wrapper->current_key_request_session_id_ == + CdmWrapper::kInvalidSessionId); + wrapper->current_key_request_session_id_ = CdmWrapper::kInvalidSessionId; return; } - if (wrapper->current_key_request_reference_id_) { + if (wrapper->current_key_request_session_id_) { // If this request is still pending (SendKeyMessage() or SendKeyError() - // not called synchronously), add |reference_id| to the end of the queue. + // not called synchronously), add |session_id| to the end of the queue. // Without CDM support, it is impossible to match SendKeyMessage() - // (or SendKeyError()) responses to the |reference_id|. Doing the best + // (or SendKeyError()) responses to the |session_id|. Doing the best // we can by keeping track of this in a queue, and assuming the responses // come back in order. - wrapper->pending_key_request_reference_ids_.push(reference_id); - wrapper->current_key_request_reference_id_ = - CdmWrapper::kInvalidReferenceId; + wrapper->pending_key_request_session_ids_.push(session_id); + wrapper->current_key_request_session_id_ = CdmWrapper::kInvalidSessionId; } } template <class CdmInterface> CdmWrapper::Result PrefixedAddKey(CdmWrapper* wrapper, CdmInterface* cdm, - uint32_t reference_id, + uint32_t session_id, const uint8_t* response, uint32_t response_size) { - const std::string session_id = wrapper->LookupSessionId(reference_id); - if (session_id.empty()) { + const std::string web_session_id = wrapper->LookupWebSessionId(session_id); + if (web_session_id.empty()) { // Possible if UpdateSession() called before CreateSession(). return CdmWrapper::CALL_KEY_ERROR; } // CDM_1 and CDM_2 accept initdata, which is no longer needed. // In it's place pass in NULL. - cdm::Status status = cdm->AddKey( - session_id.data(), session_id.size(), response, response_size, NULL, 0); + cdm::Status status = cdm->AddKey(web_session_id.data(), web_session_id.size(), + response, response_size, + NULL, 0); PP_DCHECK(status == cdm::kSuccess || status == cdm::kSessionError); if (status != cdm::kSuccess) { // Some CDMs using Host_1/2 don't call keyerror, so send one. @@ -339,16 +336,16 @@ CdmWrapper::Result PrefixedAddKey(CdmWrapper* wrapper, template <class CdmInterface> CdmWrapper::Result PrefixedCancelKeyRequest(CdmWrapper* wrapper, CdmInterface* cdm, - uint32_t reference_id) { - const std::string session_id = wrapper->LookupSessionId(reference_id); - if (session_id.empty()) { + uint32_t session_id) { + const std::string web_session_id = wrapper->LookupWebSessionId(session_id); + if (web_session_id.empty()) { // Possible if ReleaseSession() called before CreateSession(). return CdmWrapper::CALL_KEY_ERROR; } - wrapper->session_map_.erase(reference_id); + wrapper->session_map_.erase(session_id); cdm::Status status = - cdm->CancelKeyRequest(session_id.data(), session_id.size()); + cdm->CancelKeyRequest(web_session_id.data(), web_session_id.size()); PP_DCHECK(status == cdm::kSuccess || status == cdm::kSessionError); if (status != cdm::kSuccess) { @@ -363,27 +360,27 @@ CdmWrapper::Result PrefixedCancelKeyRequest(CdmWrapper* wrapper, template <> void CdmWrapperImpl<cdm::ContentDecryptionModule_1>::CreateSession( - uint32_t reference_id, + uint32_t session_id, const char* type, uint32_t type_size, const uint8_t* init_data, uint32_t init_data_size) { PrefixedGenerateKeyRequest( - this, cdm_, reference_id, type, type_size, init_data, init_data_size); + this, cdm_, session_id, type, type_size, init_data, init_data_size); } template <> CdmWrapper::Result CdmWrapperImpl< - cdm::ContentDecryptionModule_1>::UpdateSession(uint32_t reference_id, + cdm::ContentDecryptionModule_1>::UpdateSession(uint32_t session_id, const uint8_t* response, uint32_t response_size) { - return PrefixedAddKey(this, cdm_, reference_id, response, response_size); + return PrefixedAddKey(this, cdm_, session_id, response, response_size); } template <> CdmWrapper::Result CdmWrapperImpl< - cdm::ContentDecryptionModule_1>::ReleaseSession(uint32_t reference_id) { - return PrefixedCancelKeyRequest(this, cdm_, reference_id); + cdm::ContentDecryptionModule_1>::ReleaseSession(uint32_t session_id) { + return PrefixedCancelKeyRequest(this, cdm_, session_id); } template <> void CdmWrapperImpl<cdm::ContentDecryptionModule_1>:: @@ -416,27 +413,27 @@ template <> cdm::Status CdmWrapperImpl<cdm::ContentDecryptionModule_1>:: template <> void CdmWrapperImpl<cdm::ContentDecryptionModule_2>::CreateSession( - uint32_t reference_id, + uint32_t session_id, const char* type, uint32_t type_size, const uint8_t* init_data, uint32_t init_data_size) { PrefixedGenerateKeyRequest( - this, cdm_, reference_id, type, type_size, init_data, init_data_size); + this, cdm_, session_id, type, type_size, init_data, init_data_size); } template <> CdmWrapper::Result CdmWrapperImpl< - cdm::ContentDecryptionModule_2>::UpdateSession(uint32_t reference_id, + cdm::ContentDecryptionModule_2>::UpdateSession(uint32_t session_id, const uint8_t* response, uint32_t response_size) { - return PrefixedAddKey(this, cdm_, reference_id, response, response_size); + return PrefixedAddKey(this, cdm_, session_id, response, response_size); } template <> CdmWrapper::Result CdmWrapperImpl< - cdm::ContentDecryptionModule_2>::ReleaseSession(uint32_t reference_id) { - return PrefixedCancelKeyRequest(this, cdm_, reference_id); + cdm::ContentDecryptionModule_2>::ReleaseSession(uint32_t session_id) { + return PrefixedCancelKeyRequest(this, cdm_, session_id); } CdmWrapper* CdmWrapper::Create(const char* key_system, |