From ba95515ae076f4d1e8af36db8698539300891f21 Mon Sep 17 00:00:00 2001 From: Rahul Frias Date: Thu, 24 Sep 2015 09:46:52 -0700 Subject: [PATCH] Expose status, add backward compat in tests and remove unused code * Expose release and offline statuses in CdmEngine. [ Merge of http://go/wvgerrit/14616 ] This will allow me to make some intelligent decisions in the new CE CDM implementation without having to duplicate all the information known in the lower levels. * Account for backward compat support in tests [ Merge of http://go/wvgerrit/14621 ] One test ensures that device path backward compatibility is working, while another assumes it is used. This fixes test results when Properties::security_level_path_backward_compatibility_support() is false. Previously, the CE CDM did not run these tests, and so this went unnoticed. * Remove Lock::Try, which is not used. [ Merge of http://go/wvgerrit/14624 ] Change-Id: Id18cf1f5b18c7322b8b636819276361af225734f --- libwvdrmengine/cdm/core/include/cdm_engine.h | 4 +++- libwvdrmengine/cdm/core/include/cdm_session.h | 3 +++ libwvdrmengine/cdm/core/include/lock.h | 4 ---- libwvdrmengine/cdm/core/src/cdm_engine.cpp | 22 +++++++++++++++++++ .../cdm/core/test/device_files_unittest.cpp | 8 ++++++- libwvdrmengine/cdm/src/lock.cpp | 4 ---- 6 files changed, 35 insertions(+), 10 deletions(-) diff --git a/libwvdrmengine/cdm/core/include/cdm_engine.h b/libwvdrmengine/cdm/core/include/cdm_engine.h index 335b59d8..0786f879 100644 --- a/libwvdrmengine/cdm/core/include/cdm_engine.h +++ b/libwvdrmengine/cdm/core/include/cdm_engine.h @@ -104,12 +104,14 @@ class CdmEngine { // Query session information virtual CdmResponseType QuerySessionStatus(const CdmSessionId& session_id, CdmQueryMap* key_info); + virtual bool IsReleaseSession(const CdmSessionId& session_id); + virtual bool IsOfflineSession(const CdmSessionId& session_id); // Query license information virtual CdmResponseType QueryKeyStatus(const CdmSessionId& session_id, CdmQueryMap* key_info); - // Query seesion control information + // Query session control information virtual CdmResponseType QueryKeyControlInfo(const CdmSessionId& session_id, CdmQueryMap* key_info); diff --git a/libwvdrmengine/cdm/core/include/cdm_session.h b/libwvdrmengine/cdm/core/include/cdm_session.h index 4a96a576..85f00518 100644 --- a/libwvdrmengine/cdm/core/include/cdm_session.h +++ b/libwvdrmengine/cdm/core/include/cdm_session.h @@ -101,6 +101,9 @@ class CdmSession { is_usage_update_needed_ = false; } + virtual bool is_release() { return is_release_; } + virtual bool is_offline() { return is_offline_; } + // ReleaseCrypto() - Closes the underlying crypto session but leaves this // object alive. It is invalid to call any method that requires a crypto // session after calling this. Since calling this renders this object mostly diff --git a/libwvdrmengine/cdm/core/include/lock.h b/libwvdrmengine/cdm/core/include/lock.h index 26258826..decb1ca7 100644 --- a/libwvdrmengine/cdm/core/include/lock.h +++ b/libwvdrmengine/cdm/core/include/lock.h @@ -21,10 +21,6 @@ class Lock { void Acquire(); void Release(); - // Acquires a lock if not held and returns true. - // Returns false if the lock is held by another thread. - bool Try(); - friend class AutoLock; private: diff --git a/libwvdrmengine/cdm/core/src/cdm_engine.cpp b/libwvdrmengine/cdm/core/src/cdm_engine.cpp index 1bab8f63..d940d1d3 100644 --- a/libwvdrmengine/cdm/core/src/cdm_engine.cpp +++ b/libwvdrmengine/cdm/core/src/cdm_engine.cpp @@ -496,6 +496,28 @@ CdmResponseType CdmEngine::QuerySessionStatus(const CdmSessionId& session_id, return iter->second->QueryStatus(key_info); } +bool CdmEngine::IsReleaseSession(const CdmSessionId& session_id) { + LOGI("CdmEngine::IsReleaseSession"); + CdmSessionMap::iterator iter = sessions_.find(session_id); + if (iter == sessions_.end()) { + LOGE("CdmEngine::IsReleaseSession: session_id not found = %s", + session_id.c_str()); + return false; + } + return iter->second->is_release(); +} + +bool CdmEngine::IsOfflineSession(const CdmSessionId& session_id) { + LOGI("CdmEngine::IsOfflineSession"); + CdmSessionMap::iterator iter = sessions_.find(session_id); + if (iter == sessions_.end()) { + LOGE("CdmEngine::IsOfflineSession: session_id not found = %s", + session_id.c_str()); + return false; + } + return iter->second->is_offline(); +} + CdmResponseType CdmEngine::QueryKeyStatus(const CdmSessionId& session_id, CdmQueryMap* key_info) { LOGI("CdmEngine::QueryKeyStatus"); diff --git a/libwvdrmengine/cdm/core/test/device_files_unittest.cpp b/libwvdrmengine/cdm/core/test/device_files_unittest.cpp index e2647104..9fb9621d 100644 --- a/libwvdrmengine/cdm/core/test/device_files_unittest.cpp +++ b/libwvdrmengine/cdm/core/test/device_files_unittest.cpp @@ -1634,7 +1634,9 @@ TEST_P(DeviceCertificateTest, ReadCertificate) { Return(data.size()))); EXPECT_CALL(file, Close()).Times(1); EXPECT_CALL(file, Write(_, _)).Times(0); - EXPECT_CALL(file, List(_, NotNull())).WillOnce(Return(false)); + if (Properties::security_level_path_backward_compatibility_support()) { + EXPECT_CALL(file, List(_, NotNull())).WillOnce(Return(false)); + } DeviceFiles device_files; EXPECT_TRUE(device_files.Init(kSecurityLevelL1)); @@ -1926,6 +1928,10 @@ TEST_F(DeviceFilesTest, AppParametersBackwardCompatibility) { } TEST_F(DeviceFilesTest, SecurityLevelPathBackwardCompatibility) { + if (!Properties::security_level_path_backward_compatibility_support()) { + return; + } + MockFile file; std::vector security_dirs; EXPECT_TRUE(Properties::GetSecurityLevelDirectories(&security_dirs)); diff --git a/libwvdrmengine/cdm/src/lock.cpp b/libwvdrmengine/cdm/src/lock.cpp index 99f17f58..b6f41c7a 100644 --- a/libwvdrmengine/cdm/src/lock.cpp +++ b/libwvdrmengine/cdm/src/lock.cpp @@ -27,10 +27,6 @@ void Lock::Release() { impl_->lock_.unlock(); } -bool Lock::Try() { - return (impl_->lock_.tryLock() == 0); -} - } // namespace wvcdm