1 // Copyright 2014 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 "base/android/build_info.h" 6 #include "base/basictypes.h" 7 #include "base/logging.h" 8 #include "media/base/android/media_drm_bridge.h" 9 #include "testing/gtest/include/gtest/gtest.h" 10 11 #include "widevine_cdm_version.h" // In SHARED_INTERMEDIATE_DIR. 12 13 namespace media { 14 15 #define EXPECT_TRUE_IF_AVAILABLE(a) \ 16 do { \ 17 if (!MediaDrmBridge::IsAvailable()) { \ 18 VLOG(0) << "MediaDrm not supported on device."; \ 19 EXPECT_FALSE(a); \ 20 } else { \ 21 EXPECT_TRUE(a); \ 22 } \ 23 } while (0) 24 25 const char kAudioMp4[] = "audio/mp4"; 26 const char kVideoMp4[] = "video/mp4"; 27 const char kAudioWebM[] = "audio/webm"; 28 const char kVideoWebM[] = "video/webm"; 29 const char kInvalidKeySystem[] = "invalid.keysystem"; 30 const MediaDrmBridge::SecurityLevel kLNone = 31 MediaDrmBridge::SECURITY_LEVEL_NONE; 32 const MediaDrmBridge::SecurityLevel kL1 = MediaDrmBridge::SECURITY_LEVEL_1; 33 const MediaDrmBridge::SecurityLevel kL3 = MediaDrmBridge::SECURITY_LEVEL_3; 34 35 // Helper functions to avoid typing "MediaDrmBridge::" in tests. 36 37 static bool IsKeySystemSupported(const std::string& key_system) { 38 return MediaDrmBridge::IsKeySystemSupported(key_system); 39 } 40 41 static bool IsKeySystemSupportedWithType( 42 const std::string& key_system, 43 const std::string& container_mime_type) { 44 return MediaDrmBridge::IsKeySystemSupportedWithType(key_system, 45 container_mime_type); 46 } 47 48 static bool IsSecurityLevelSupported( 49 const std::string& key_system, 50 MediaDrmBridge::SecurityLevel security_level) { 51 return MediaDrmBridge::IsSecurityLevelSupported(key_system, security_level); 52 } 53 54 TEST(MediaDrmBridgeTest, IsSecurityLevelSupported_Widevine) { 55 EXPECT_FALSE(IsSecurityLevelSupported(kWidevineKeySystem, kLNone)); 56 // We test "L3" fully. But for "L1" we don't check the result as it depends on 57 // whether the test device supports "L1". 58 EXPECT_TRUE_IF_AVAILABLE(IsSecurityLevelSupported(kWidevineKeySystem, kL3)); 59 IsSecurityLevelSupported(kWidevineKeySystem, kL1); 60 } 61 62 // Invalid keysytem is NOT supported regardless whether MediaDrm is available. 63 TEST(MediaDrmBridgeTest, IsSecurityLevelSupported_InvalidKeySystem) { 64 EXPECT_FALSE(IsSecurityLevelSupported(kInvalidKeySystem, kLNone)); 65 EXPECT_FALSE(IsSecurityLevelSupported(kInvalidKeySystem, kL1)); 66 EXPECT_FALSE(IsSecurityLevelSupported(kInvalidKeySystem, kL3)); 67 } 68 69 TEST(MediaDrmBridgeTest, IsKeySystemSupported_Widevine) { 70 EXPECT_TRUE_IF_AVAILABLE(IsKeySystemSupported(kWidevineKeySystem)); 71 72 // TODO(xhwang): Enable when b/13564917 is fixed. 73 // EXPECT_TRUE_IF_AVAILABLE( 74 // IsKeySystemSupportedWithType(kWidevineKeySystem, kAudioMp4)); 75 EXPECT_TRUE_IF_AVAILABLE( 76 IsKeySystemSupportedWithType(kWidevineKeySystem, kVideoMp4)); 77 78 if (base::android::BuildInfo::GetInstance()->sdk_int() <= 19) { 79 EXPECT_FALSE(IsKeySystemSupportedWithType(kWidevineKeySystem, kAudioWebM)); 80 EXPECT_FALSE(IsKeySystemSupportedWithType(kWidevineKeySystem, kVideoWebM)); 81 } else { 82 EXPECT_TRUE(IsKeySystemSupportedWithType(kWidevineKeySystem, kAudioWebM)); 83 EXPECT_TRUE(IsKeySystemSupportedWithType(kWidevineKeySystem, kVideoWebM)); 84 } 85 86 EXPECT_FALSE(IsKeySystemSupportedWithType(kWidevineKeySystem, "unknown")); 87 EXPECT_FALSE(IsKeySystemSupportedWithType(kWidevineKeySystem, "video/avi")); 88 EXPECT_FALSE(IsKeySystemSupportedWithType(kWidevineKeySystem, "audio/mp3")); 89 } 90 91 // Invalid keysytem is NOT supported regardless whether MediaDrm is available. 92 TEST(MediaDrmBridgeTest, IsKeySystemSupported_InvalidKeySystem) { 93 EXPECT_FALSE(IsKeySystemSupported(kInvalidKeySystem)); 94 EXPECT_FALSE(IsKeySystemSupportedWithType(kInvalidKeySystem, kAudioMp4)); 95 EXPECT_FALSE(IsKeySystemSupportedWithType(kInvalidKeySystem, kVideoMp4)); 96 EXPECT_FALSE(IsKeySystemSupportedWithType(kInvalidKeySystem, kAudioWebM)); 97 EXPECT_FALSE(IsKeySystemSupportedWithType(kInvalidKeySystem, kVideoWebM)); 98 EXPECT_FALSE(IsKeySystemSupportedWithType(kInvalidKeySystem, "unknown")); 99 EXPECT_FALSE(IsKeySystemSupportedWithType(kInvalidKeySystem, "video/avi")); 100 EXPECT_FALSE(IsKeySystemSupportedWithType(kInvalidKeySystem, "audio/mp3")); 101 } 102 103 } // namespace media 104