diff --git a/libwvdrmengine/Android.bp b/libwvdrmengine/Android.bp index 52827bc4..46f96b3e 100644 --- a/libwvdrmengine/Android.bp +++ b/libwvdrmengine/Android.bp @@ -129,6 +129,7 @@ cc_defaults { "libwvdrmdrmplugin_aidl", "libwvlevel3", "lib_apex_manifest_minimal_proto_lite", + "libPlatformProperties", ], } @@ -227,6 +228,7 @@ cc_library_static { static_libs: [ "libprotobuf-cpp-lite", "lib_apex_manifest_minimal_proto_lite", + "libPlatformProperties", ], min_sdk_version: "34", @@ -286,6 +288,7 @@ cc_library { "libwvdrmdrmplugin_aidl", "libwvlevel3", "lib_apex_manifest_minimal_proto_lite", + "libPlatformProperties", ], shared_libs: [ diff --git a/libwvdrmengine/cdm/core/include/properties.h b/libwvdrmengine/cdm/core/include/properties.h index 3ff6f055..f411f4d3 100644 --- a/libwvdrmengine/cdm/core/include/properties.h +++ b/libwvdrmengine/cdm/core/include/properties.h @@ -82,6 +82,8 @@ class Properties { static bool GetSandboxId(std::string* sandbox_id); static bool AlwaysUseKeySetIds(); static bool UseProviderIdInProvisioningRequest(); + // Cdm only loads L3 library when this returns true + static bool ForceL3(); static bool GetSecurityLevelDirectories(std::vector* dirs); static bool GetApplicationId(const CdmSessionId& session_id, diff --git a/libwvdrmengine/cdm/core/src/oemcrypto_adapter_dynamic.cpp b/libwvdrmengine/cdm/core/src/oemcrypto_adapter_dynamic.cpp index 08f52835..07d138f5 100644 --- a/libwvdrmengine/cdm/core/src/oemcrypto_adapter_dynamic.cpp +++ b/libwvdrmengine/cdm/core/src/oemcrypto_adapter_dynamic.cpp @@ -794,6 +794,7 @@ class Adapter { wvcdm::metrics::OEMCrypto_INITIALIZED_FORCING_L3); return result; } + LOGI("L3 Initialized. Trying L1."); std::vector library_names; if (!wvcdm::Properties::GetOEMCryptoPaths(&library_names)) { @@ -1376,9 +1377,15 @@ class Adapter { std::mutex session_map_lock_; std::vector sandbox_id_; - // For running the unit tests using the level 3 oemcrypto. If the user sets - // the environment FORCE_LEVEL3_OEMCRYPTO, we ignore the level 1 library. + // First check if user sets force L3 property to be true. Then + // check if the user sets the environment FORCE_LEVEL3_OEMCRYPTO + // for running the unit tests using the level 3 oemcrypto. + // If any of above is true, we ignore the level 1 library. bool force_level3() { + if (wvcdm::Properties::ForceL3()) { + LOGW("User requested falling back to L3"); + return true; + } const char* var = getenv("FORCE_LEVEL3_OEMCRYPTO"); if (!var) return false; return !strcmp(var, "yes"); diff --git a/libwvdrmengine/cdm/src/properties_android.cpp b/libwvdrmengine/cdm/src/properties_android.cpp index 9fd756df..339536ff 100644 --- a/libwvdrmengine/cdm/src/properties_android.cpp +++ b/libwvdrmengine/cdm/src/properties_android.cpp @@ -10,11 +10,13 @@ #include #include +#include #include "log.h" #include "wv_android_constants.h" #include "widevine_apex_info.h" +using namespace android::sysprop; namespace { const char kBasePathPrefix[] = "/data/vendor/mediadrm/IDM"; @@ -211,4 +213,8 @@ bool Properties::AlwaysUseKeySetIds() { return false; } bool Properties::UseProviderIdInProvisioningRequest() { return false; } +bool Properties::ForceL3() { + return WidevineProperties::forcel3_enabled().value_or(false); +} + } // namespace wvcdm diff --git a/libwvdrmengine/cdm/test/integration-test.mk b/libwvdrmengine/cdm/test/integration-test.mk index e88872a4..16acbd0c 100644 --- a/libwvdrmengine/cdm/test/integration-test.mk +++ b/libwvdrmengine/cdm/test/integration-test.mk @@ -60,6 +60,7 @@ LOCAL_STATIC_LIBRARIES := \ libwvlevel3 \ libwv_kdo \ libwv_odk \ + libPlatformProperties \ LOCAL_SHARED_LIBRARIES := \ libbase \ diff --git a/libwvdrmengine/oemcrypto/test/common.mk b/libwvdrmengine/oemcrypto/test/common.mk index ce7a3c86..8a92ad43 100644 --- a/libwvdrmengine/oemcrypto/test/common.mk +++ b/libwvdrmengine/oemcrypto/test/common.mk @@ -52,6 +52,7 @@ LOCAL_STATIC_LIBRARIES := \ libcdm_utils \ libwv_kdo \ libwv_odk \ + libPlatformProperties \ LOCAL_SHARED_LIBRARIES := \ libbase \ diff --git a/libwvdrmengine/test/Android.bp b/libwvdrmengine/test/Android.bp index 328b23ae..e8f578de 100644 --- a/libwvdrmengine/test/Android.bp +++ b/libwvdrmengine/test/Android.bp @@ -55,6 +55,7 @@ cc_test { "libwv_odk", "libwvdrmdrmplugin_aidl", "libwvlevel3", + "libPlatformProperties", ], shared_libs: [ "android.hardware.drm-V1-ndk",