158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// found in the LICENSE file. 458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/command_line.h" 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/path_service.h" 858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/strings/utf_string_conversions.h" 958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/win/windows_version.h" 1058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/media/media_browsertest.h" 115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/media/test_license_server.h" 125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/media/wv_test_license_server_config.h" 1358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/ui/browser.h" 1458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h" 1558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/common/chrome_switches.h" 1658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "content/public/test/browser_test_utils.h" 17effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "testing/gtest/include/gtest/gtest-spi.h" 188bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#if defined(OS_ANDROID) 198bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "base/android/build_info.h" 208bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#endif 2158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "widevine_cdm_version.h" // In SHARED_INTERMEDIATE_DIR. 2358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 2458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#if defined(ENABLE_PEPPER_CDMS) 2558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Platform-specific filename relative to the chrome executable. 264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)const char kClearKeyCdmAdapterFileName[] = 2758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#if defined(OS_MACOSX) 2858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "clearkeycdmadapter.plugin"; 2958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#elif defined(OS_WIN) 3058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "clearkeycdmadapter.dll"; 3158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#elif defined(OS_POSIX) 3258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "libclearkeycdmadapter.so"; 3358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif 344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)const char kClearKeyCdmPluginMimeType[] = "application/x-ppapi-clearkey-cdm"; 3658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif // defined(ENABLE_PEPPER_CDMS) 3758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 3858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Available key systems. 39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)const char kClearKeyKeySystem[] = "org.w3.clearkey"; 40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)const char kPrefixedClearKeyKeySystem[] = "webkit-org.w3.clearkey"; 41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)const char kExternalClearKeyKeySystem[] = "org.chromium.externalclearkey"; 42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)const char kExternalClearKeyDecryptOnlyKeySystem[] = 43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "org.chromium.externalclearkey.decryptonly"; 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const char kExternalClearKeyFileIOTestKeySystem[] = 455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "org.chromium.externalclearkey.fileiotest"; 46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)const char kExternalClearKeyInitializeFailKeySystem[] = 47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "org.chromium.externalclearkey.initializefail"; 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const char kExternalClearKeyCrashKeySystem[] = 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "org.chromium.externalclearkey.crash"; 5058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 5158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Supported media types. 5268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)const char kWebMAudioOnly[] = "audio/webm; codecs=\"vorbis\""; 5368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)const char kWebMVideoOnly[] = "video/webm; codecs=\"vp8\""; 54a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochconst char kWebMVP9VideoOnly[] = "video/webm; codecs=\"vp9\""; 5568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)const char kWebMAudioVideo[] = "video/webm; codecs=\"vorbis, vp8\""; 5668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#if defined(USE_PROPRIETARY_CODECS) 5768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)const char kMP4AudioOnly[] = "audio/mp4; codecs=\"mp4a.40.2\""; 5868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)const char kMP4VideoOnly[] = "video/mp4; codecs=\"avc1.4D4041\""; 5968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#endif // defined(USE_PROPRIETARY_CODECS) 6058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Sessions to load. 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const char kNoSessionToLoad[] = ""; 635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const char kLoadableSession[] = "LoadableSession"; 645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const char kUnknownSession[] = "UnknownSession"; 655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 66d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// EME-specific test results and errors. 676d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)const char kEmeKeyError[] = "KEY_ERROR"; 688bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)const char kEmeNotSupportedError[] = "NOTSUPPORTEDERROR"; 696d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)const char kFileIOTestSuccess[] = "FILE_IO_TEST_SUCCESS"; 706d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 716d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)const char kDefaultEmePlayer[] = "eme_player.html"; 7258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 7358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// The type of video src used to load media. 7458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)enum SrcType { 7558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) SRC, 7658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) MSE 7758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}; 7858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 79a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Whether to use prefixed or unprefixed EME. 80a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)enum EmeVersion { 81a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PREFIXED, 82a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) UNPREFIXED 83a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}; 84a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 858bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// MSE is available on all desktop platforms and on Android 4.1 and later. 868bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)static bool IsMSESupported() { 878bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#if defined(OS_ANDROID) 888bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (base::android::BuildInfo::GetInstance()->sdk_int() < 16) { 89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) VLOG(0) << "MSE is only supported in Android 4.1 and later."; 908bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return false; 9158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 928bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#endif // defined(OS_ANDROID) 938bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return true; 948bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 9558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 96f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static bool IsParentKeySystemOf(const std::string& parent_key_system, 97f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string& key_system) { 98f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::string prefix = parent_key_system + '.'; 99f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return key_system.substr(0, prefix.size()) == prefix; 100f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 101f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1028bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// Base class for encrypted media tests. 1038bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)class EncryptedMediaTestBase : public MediaBrowserTest { 1048bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) public: 1058bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EncryptedMediaTestBase() : is_pepper_cdm_registered_(false) {} 1068bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bool IsExternalClearKey(const std::string& key_system) { 108f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return key_system == kExternalClearKeyKeySystem || 109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) IsParentKeySystemOf(kExternalClearKeyKeySystem, key_system); 1104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 1114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(WIDEVINE_CDM_AVAILABLE) 113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bool IsWidevine(const std::string& key_system) { 114f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return key_system == kWidevineKeySystem; 1154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 1164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif // defined(WIDEVINE_CDM_AVAILABLE) 1174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void RunEncryptedMediaTestPage( 1195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const std::string& html_page, 1205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const std::string& key_system, 1215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const media::QueryParams& query_params, 1225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const std::string& expected_title) { 1235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) media::QueryParams new_query_params = query_params; 1245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) StartLicenseServerIfNeeded(key_system, &new_query_params); 1255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) RunMediaTestPage(html_page, new_query_params, expected_title, true); 1265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 1275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Tests |html_page| using |media_file| (with |media_type|) and |key_system|. 1295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // When |session_to_load| is not empty, the test will try to load 1305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // |session_to_load| with stored keys, instead of creating a new session 1315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // and trying to update it with licenses. 1325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // When |force_invalid_response| is true, the test will provide invalid 1335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // responses, which should trigger errors. 1345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // TODO(xhwang): Find an easier way to pass multiple configuration test 1355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // options. 1365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void RunEncryptedMediaTest(const std::string& html_page, 1375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& media_file, 1385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& media_type, 1395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& key_system, 1404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) SrcType src_type, 141a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EmeVersion eme_version, 1425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& session_to_load, 1435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool force_invalid_response, 1445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& expected_title) { 1458bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (src_type == MSE && !IsMSESupported()) { 146f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) VLOG(0) << "Skipping test - MSE not supported."; 1478bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return; 1488bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 1495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) media::QueryParams query_params; 1505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) query_params.push_back(std::make_pair("mediaFile", media_file)); 1515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) query_params.push_back(std::make_pair("mediaType", media_type)); 1525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) query_params.push_back(std::make_pair("keySystem", key_system)); 15358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (src_type == MSE) 1545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) query_params.push_back(std::make_pair("useMSE", "1")); 155a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (eme_version == PREFIXED) 156a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) query_params.push_back(std::make_pair("usePrefixedEME", "1")); 1575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (force_invalid_response) 1585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) query_params.push_back(std::make_pair("forceInvalidResponse", "1")); 1595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!session_to_load.empty()) 1605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) query_params.push_back(std::make_pair("sessionToLoad", session_to_load)); 1615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) RunEncryptedMediaTestPage(html_page, key_system, query_params, 1625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) expected_title); 16358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 16458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void RunSimpleEncryptedMediaTest(const std::string& media_file, 1665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& media_type, 1675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& key_system, 168a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SrcType src_type, 169a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EmeVersion eme_version) { 1705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string expected_title = kEnded; 1715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!IsPlayBackPossible(key_system)) 1725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) expected_title = kEmeKeyError; 1735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1746d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) RunEncryptedMediaTest(kDefaultEmePlayer, 175a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) media_file, 176a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) media_type, 177a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) key_system, 178a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) src_type, 179a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) eme_version, 180a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) kNoSessionToLoad, 181a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) false, 1825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) expected_title); 1835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Check KeyMessage received for all key systems. 1845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool receivedKeyMessage = false; 1855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(content::ExecuteScriptAndExtractBool( 1865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(), 1876d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) "window.domAutomationController.send(" 1886d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) "document.querySelector('video').receivedKeyMessage);", 1895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &receivedKeyMessage)); 1905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(receivedKeyMessage); 1915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 1925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Starts a license server if available for the |key_system| and adds a 1945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // 'licenseServerURL' query parameter to |query_params|. 1955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void StartLicenseServerIfNeeded(const std::string& key_system, 1965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) media::QueryParams* query_params) { 1975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<TestLicenseServerConfig> config = GetServerConfig(key_system); 1985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!config) 1995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return; 2005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) license_server_.reset(new TestLicenseServer(config.Pass())); 2015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(license_server_->Start()); 2025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) query_params->push_back( 2035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) std::make_pair("licenseServerURL", license_server_->GetServerURL())); 2045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 2055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool IsPlayBackPossible(const std::string& key_system) { 2075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if defined(WIDEVINE_CDM_AVAILABLE) 2085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (IsWidevine(key_system) && !GetServerConfig(key_system)) 2095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return false; 2105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif // defined(WIDEVINE_CDM_AVAILABLE) 2115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return true; 2125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 2135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<TestLicenseServerConfig> GetServerConfig( 2155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& key_system) { 2164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(WIDEVINE_CDM_AVAILABLE) 2174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (IsWidevine(key_system)) { 2185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<TestLicenseServerConfig> config = 2195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<TestLicenseServerConfig>(new WVTestLicenseServerConfig()); 2205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (config->IsPlatformSupported()) 2215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return config.Pass(); 2224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 2234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif // defined(WIDEVINE_CDM_AVAILABLE) 2245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return scoped_ptr<TestLicenseServerConfig>(); 2254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 2264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 22758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) protected: 2285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<TestLicenseServer> license_server_; 2295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 230d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // We want to fail quickly when a test fails because an error is encountered. 231d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) virtual void AddWaitForTitles(content::TitleWatcher* title_watcher) OVERRIDE { 232d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) MediaBrowserTest::AddWaitForTitles(title_watcher); 2335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) title_watcher->AlsoWaitForTitle(base::ASCIIToUTF16(kEmeNotSupportedError)); 2345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) title_watcher->AlsoWaitForTitle(base::ASCIIToUTF16(kEmeKeyError)); 235d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 236d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 23758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 2384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(OS_ANDROID) 2394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) command_line->AppendSwitch( 2404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) switches::kDisableGestureRequirementForMediaPlayback); 2414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif // defined(OS_ANDROID) 24258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 24358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 2445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void SetUpCommandLineForKeySystem(const std::string& key_system, 2458bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) CommandLine* command_line) { 2465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (GetServerConfig(key_system)) 2475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Since the web and license servers listen on different ports, we need to 2485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // disable web-security to send license requests to the license server. 2495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // TODO(shadi): Add port forwarding to the test web server configuration. 2505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) command_line->AppendSwitch(switches::kDisableWebSecurity); 2515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2528bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#if defined(ENABLE_PEPPER_CDMS) 2538bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (IsExternalClearKey(key_system)) { 254f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RegisterPepperCdm(command_line, kClearKeyCdmAdapterFileName, key_system); 2558bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 2568bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#if defined(WIDEVINE_CDM_AVAILABLE) && defined(WIDEVINE_CDM_IS_COMPONENT) 2578bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) else if (IsWidevine(key_system)) { 258f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RegisterPepperCdm(command_line, kWidevineCdmAdapterFileName, key_system); 2598bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 2608bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#endif // defined(WIDEVINE_CDM_AVAILABLE) && defined(WIDEVINE_CDM_IS_COMPONENT) 2618bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#endif // defined(ENABLE_PEPPER_CDMS) 2628bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 2638bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 2648bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) private: 2654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(ENABLE_PEPPER_CDMS) 26658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) void RegisterPepperCdm(CommandLine* command_line, 26758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const std::string& adapter_name, 26858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const std::string& key_system) { 2698bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) DCHECK(!is_pepper_cdm_registered_) 2708bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) << "RegisterPepperCdm() can only be called once."; 2718bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) is_pepper_cdm_registered_ = true; 2728bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 27358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Append the switch to register the Clear Key CDM Adapter. 27458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::FilePath plugin_dir; 27558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_TRUE(PathService::Get(base::DIR_MODULE, &plugin_dir)); 27658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::FilePath plugin_lib = plugin_dir.AppendASCII(adapter_name); 2774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_TRUE(base::PathExists(plugin_lib)) << plugin_lib.value(); 27858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::FilePath::StringType pepper_plugin = plugin_lib.value(); 27958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) pepper_plugin.append(FILE_PATH_LITERAL("#CDM#0.1.0.0;")); 28058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#if defined(OS_WIN) 2815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) pepper_plugin.append(base::ASCIIToWide(GetPepperType(key_system))); 28258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#else 28358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) pepper_plugin.append(GetPepperType(key_system)); 28458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif 28558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) command_line->AppendSwitchNative(switches::kRegisterPepperPlugins, 28658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) pepper_plugin); 28758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 28858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 28958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Adapted from key_systems.cc. 29058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) std::string GetPepperType(const std::string& key_system) { 291f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (IsExternalClearKey(key_system)) 2924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return kClearKeyCdmPluginMimeType; 29358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#if defined(WIDEVINE_CDM_AVAILABLE) 294f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (IsWidevine(key_system)) 2954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return kWidevineCdmPluginMimeType; 29658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif // WIDEVINE_CDM_AVAILABLE 29758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 29858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) NOTREACHED(); 29958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return ""; 30058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 30158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif // defined(ENABLE_PEPPER_CDMS) 3028bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 3038bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) bool is_pepper_cdm_registered_; 3048bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)}; 3058bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 3068bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#if defined(ENABLE_PEPPER_CDMS) 307f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Tests encrypted media playback using ExternalClearKey key system in 308f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// decrypt-and-decode mode. 3098bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)class ECKEncryptedMediaTest : public EncryptedMediaTestBase { 3105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public: 3115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // We use special |key_system| names to do non-playback related tests, e.g. 3125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // kExternalClearKeyFileIOTestKeySystem is used to test file IO. 3135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void TestNonPlaybackCases(const std::string& key_system, 3145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& expected_title) { 3155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Since we do not test playback, arbitrarily choose a test file and source 3165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // type. 3176d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) RunEncryptedMediaTest(kDefaultEmePlayer, 3185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "bear-a_enc-a.webm", 3195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) kWebMAudioOnly, 3205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) key_system, 3215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SRC, 322a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PREFIXED, 3235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) kNoSessionToLoad, 3245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) false, 3255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) expected_title); 3265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 3275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3288bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) protected: 3298bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 3308bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EncryptedMediaTestBase::SetUpCommandLine(command_line); 3318bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) SetUpCommandLineForKeySystem(kExternalClearKeyKeySystem, command_line); 3328bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 3338bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)}; 3348bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 3358bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#if defined(WIDEVINE_CDM_AVAILABLE) 3368bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// Tests encrypted media playback using Widevine key system. 3378bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)class WVEncryptedMediaTest : public EncryptedMediaTestBase { 3388bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) protected: 3398bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 3408bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EncryptedMediaTestBase::SetUpCommandLine(command_line); 341a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) command_line->AppendSwitch(switches::kEnableEncryptedMedia); 3428bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) SetUpCommandLineForKeySystem(kWidevineKeySystem, command_line); 3438bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 3448bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)}; 3455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3468bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#endif // defined(WIDEVINE_CDM_AVAILABLE) 3478bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#endif // defined(ENABLE_PEPPER_CDMS) 3488bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 3498bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// Tests encrypted media playback with a combination of parameters: 3508bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// - char*: Key system name. 3518bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// - bool: True to load media using MSE, otherwise use src. 352a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// - bool: True to use unprefixed EME, otherwise use prefixed EME. 3538bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// 3548bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// Note: Only parameterized (*_P) tests can be used. Non-parameterized (*_F) 3558bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// tests will crash at GetParam(). To add non-parameterized tests, use 3568bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// EncryptedMediaTestBase or one of its subclasses (e.g. WVEncryptedMediaTest). 357a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class EncryptedMediaTest 358a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) : public EncryptedMediaTestBase, 359a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) public testing::WithParamInterface< 360a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) std::tr1::tuple<const char*, SrcType, EmeVersion> > { 3618bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) public: 3625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string CurrentKeySystem() { 3638bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return std::tr1::get<0>(GetParam()); 3648bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 3658bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 3668bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) SrcType CurrentSourceType() { 3678bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return std::tr1::get<1>(GetParam()); 3688bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 3698bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 370a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EmeVersion CurrentEmeVersion() { 371a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return std::tr1::get<2>(GetParam()); 372a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 373a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 3745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void TestSimplePlayback(const std::string& encrypted_media, 3755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& media_type) { 376a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) RunSimpleEncryptedMediaTest(encrypted_media, 377a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) media_type, 378a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) CurrentKeySystem(), 379a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) CurrentSourceType(), 380a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) CurrentEmeVersion()); 3818bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 3828bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 3835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void RunInvalidResponseTest() { 3846d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) RunEncryptedMediaTest(kDefaultEmePlayer, 3855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "bear-320x240-av_enc-av.webm", 3865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) kWebMAudioVideo, 3875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CurrentKeySystem(), 3885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CurrentSourceType(), 389a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) CurrentEmeVersion(), 3905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) kNoSessionToLoad, 3915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) true, 3925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) kEmeKeyError); 3935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 3945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3958bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) void TestFrameSizeChange() { 3968bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) RunEncryptedMediaTest("encrypted_frame_size_change.html", 3975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "frame_size_change-av_enc-v.webm", 3985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) kWebMAudioVideo, 3995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CurrentKeySystem(), 4005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CurrentSourceType(), 401a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) CurrentEmeVersion(), 4025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) kNoSessionToLoad, 4035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) false, 4045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) kEnded); 4058bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 4068bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 4078bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) void TestConfigChange() { 4085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DCHECK(IsMSESupported()); 4095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) media::QueryParams query_params; 4105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) query_params.push_back(std::make_pair("keySystem", CurrentKeySystem())); 4115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) query_params.push_back(std::make_pair("runEncrypted", "1")); 412a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (CurrentEmeVersion() == PREFIXED) 413a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) query_params.push_back(std::make_pair("usePrefixedEME", "1")); 4145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RunEncryptedMediaTestPage("mse_config_change.html", 4155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CurrentKeySystem(), 4165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) query_params, 4175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) kEnded); 4188bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 4198bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 4208bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) protected: 4218bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 4228bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EncryptedMediaTestBase::SetUpCommandLine(command_line); 4238bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) SetUpCommandLineForKeySystem(CurrentKeySystem(), command_line); 424a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 425a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (CurrentEmeVersion() == UNPREFIXED) 426a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) command_line->AppendSwitch(switches::kEnableEncryptedMedia); 4278bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 42858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}; 42958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 4308bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)using ::testing::Combine; 4318bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)using ::testing::Values; 4328bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 4338bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#if !defined(OS_ANDROID) 434a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)INSTANTIATE_TEST_CASE_P(SRC_ClearKey_Prefixed, 435a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EncryptedMediaTest, 436a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Combine(Values(kPrefixedClearKeyKeySystem), 437a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Values(SRC), 438a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Values(PREFIXED))); 439a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 440a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// TODO(jrummell): Enable unprefixed tests before shipping unprefixed EME. 441a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Disabled now as they don't provide much additional coverage, but do take a 442a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// bit of time to execute. 443a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)INSTANTIATE_TEST_CASE_P(DISABLED_SRC_ClearKey, 444a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EncryptedMediaTest, 445a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Combine(Values(kClearKeyKeySystem), 446a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Values(SRC), 447a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Values(UNPREFIXED))); 4488bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#endif // !defined(OS_ANDROID) 4498bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 450a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)INSTANTIATE_TEST_CASE_P(MSE_ClearKey_Prefixed, 451a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EncryptedMediaTest, 452a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Combine(Values(kPrefixedClearKeyKeySystem), 453a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Values(MSE), 454a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Values(PREFIXED))); 45503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// http://crbug.com/402766 45603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)INSTANTIATE_TEST_CASE_P(DISABLED_MSE_ClearKey, 457a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EncryptedMediaTest, 458a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Combine(Values(kClearKeyKeySystem), 459a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Values(MSE), 460a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Values(UNPREFIXED))); 46158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 46258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// External Clear Key is currently only used on platforms that use Pepper CDMs. 46358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#if defined(ENABLE_PEPPER_CDMS) 464a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)INSTANTIATE_TEST_CASE_P(SRC_ExternalClearKey_Prefixed, 465a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EncryptedMediaTest, 466a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Combine(Values(kExternalClearKeyKeySystem), 467a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Values(SRC), 468a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Values(PREFIXED))); 469effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochINSTANTIATE_TEST_CASE_P(SRC_ExternalClearKey, 470a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EncryptedMediaTest, 471a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Combine(Values(kExternalClearKeyKeySystem), 472a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Values(SRC), 473a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Values(UNPREFIXED))); 474a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)INSTANTIATE_TEST_CASE_P(MSE_ExternalClearKey_Prefixed, 475a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EncryptedMediaTest, 476a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Combine(Values(kExternalClearKeyKeySystem), 477a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Values(MSE), 478a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Values(PREFIXED))); 479effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochINSTANTIATE_TEST_CASE_P(MSE_ExternalClearKey, 480a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EncryptedMediaTest, 481a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Combine(Values(kExternalClearKeyKeySystem), 482a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Values(MSE), 483a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Values(UNPREFIXED))); 484f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// To reduce test time, only run ExternalClearKeyDecryptOnly with MSE. 485a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)INSTANTIATE_TEST_CASE_P(MSE_ExternalClearKeyDecryptOnly_Prefixed, 486a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EncryptedMediaTest, 487a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Combine(Values(kExternalClearKeyDecryptOnlyKeySystem), 488a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Values(MSE), 489a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Values(PREFIXED))); 490effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochINSTANTIATE_TEST_CASE_P(MSE_ExternalClearKeyDecryptOnly, 491a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EncryptedMediaTest, 492a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Combine(Values(kExternalClearKeyDecryptOnlyKeySystem), 493a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Values(MSE), 494a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Values(UNPREFIXED))); 4955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif // defined(ENABLE_PEPPER_CDMS) 49658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 4974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(WIDEVINE_CDM_AVAILABLE) 4984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// This test doesn't fully test playback with Widevine. So we only run Widevine 4998bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// test with MSE (no SRC) to reduce test time. Also, on Android EME only works 5008bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// with MSE and we cannot run this test with SRC. 501a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)INSTANTIATE_TEST_CASE_P(MSE_Widevine_Prefixed, 502a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EncryptedMediaTest, 503a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Combine(Values(kWidevineKeySystem), 504a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Values(MSE), 505a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Values(PREFIXED))); 506effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 507effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Following tests fail if Widevine is loaded as a component, crbug.com/356833. 508effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#if !defined(WIDEVINE_CDM_IS_COMPONENT) 509effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochINSTANTIATE_TEST_CASE_P(MSE_Widevine, 510a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EncryptedMediaTest, 511a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Combine(Values(kWidevineKeySystem), 512a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Values(MSE), 513a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Values(UNPREFIXED))); 514effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#endif // !defined(WIDEVINE_CDM_IS_COMPONENT) 5154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif // defined(WIDEVINE_CDM_AVAILABLE) 51658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 51703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)IN_PROC_BROWSER_TEST_P(EncryptedMediaTest, Playback_AudioOnly_WebM) { 5185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) TestSimplePlayback("bear-a_enc-a.webm", kWebMAudioOnly); 51958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 52058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 52103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)IN_PROC_BROWSER_TEST_P(EncryptedMediaTest, Playback_AudioClearVideo_WebM) { 5225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) TestSimplePlayback("bear-320x240-av_enc-a.webm", kWebMAudioVideo); 52358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 52458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 52503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)IN_PROC_BROWSER_TEST_P(EncryptedMediaTest, Playback_VideoAudio_WebM) { 5265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) TestSimplePlayback("bear-320x240-av_enc-av.webm", kWebMAudioVideo); 52758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 52858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 52903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)IN_PROC_BROWSER_TEST_P(EncryptedMediaTest, Playback_VideoOnly_WebM) { 5305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) TestSimplePlayback("bear-320x240-v_enc-v.webm", kWebMVideoOnly); 53158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 53258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 53303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)IN_PROC_BROWSER_TEST_P(EncryptedMediaTest, Playback_VideoClearAudio_WebM) { 5345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) TestSimplePlayback("bear-320x240-av_enc-v.webm", kWebMAudioVideo); 53558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 53658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 53703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)IN_PROC_BROWSER_TEST_P(EncryptedMediaTest, Playback_VP9Video_WebM) { 5385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) TestSimplePlayback("bear-320x240-v-vp9_enc-v.webm", kWebMVP9VideoOnly); 539a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 540a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 54103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)IN_PROC_BROWSER_TEST_P(EncryptedMediaTest, InvalidResponseKeyError) { 5425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RunInvalidResponseTest(); 5435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 5445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)IN_PROC_BROWSER_TEST_P(EncryptedMediaTest, ConfigChangeVideo) { 5465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (CurrentSourceType() != MSE || !IsMSESupported()) { 5475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) VLOG(0) << "Skipping test - ConfigChange test requires MSE."; 5485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return; 5495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 5505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!IsPlayBackPossible(CurrentKeySystem())) { 5515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) VLOG(0) << "Skipping test - ConfigChange test requires video playback."; 5525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return; 5535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 5544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) TestConfigChange(); 5554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 5564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 5574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)IN_PROC_BROWSER_TEST_P(EncryptedMediaTest, FrameSizeChangeVideo) { 55858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Times out on Windows XP. http://crbug.com/171937 55958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#if defined(OS_WIN) 56058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (base::win::GetVersion() < base::win::VERSION_VISTA) 56158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return; 56258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif 5635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!IsPlayBackPossible(CurrentKeySystem())) { 5645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) VLOG(0) << "Skipping test - FrameSizeChange test requires video playback."; 5655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return; 5665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 5674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) TestFrameSizeChange(); 56858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 56958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 57058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#if defined(USE_PROPRIETARY_CODECS) 57158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)IN_PROC_BROWSER_TEST_P(EncryptedMediaTest, Playback_VideoOnly_MP4) { 57258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // MP4 without MSE is not support yet, http://crbug.com/170793. 5734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (CurrentSourceType() != MSE) { 574f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) VLOG(0) << "Skipping test; Can only play MP4 encrypted streams by MSE."; 57558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return; 57658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 5774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) TestSimplePlayback("bear-640x360-v_frag-cenc.mp4", kMP4VideoOnly); 57858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 57958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 58058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)IN_PROC_BROWSER_TEST_P(EncryptedMediaTest, Playback_AudioOnly_MP4) { 58158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // MP4 without MSE is not support yet, http://crbug.com/170793. 5824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (CurrentSourceType() != MSE) { 583f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) VLOG(0) << "Skipping test; Can only play MP4 encrypted streams by MSE."; 58458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return; 58558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 5864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) TestSimplePlayback("bear-640x360-a_frag-cenc.mp4", kMP4AudioOnly); 58758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 58858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif // defined(USE_PROPRIETARY_CODECS) 58958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 59058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#if defined(WIDEVINE_CDM_AVAILABLE) 59158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// The parent key system cannot be used in generateKeyRequest. 592a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(WVEncryptedMediaTest, ParentThrowsException_Prefixed) { 5936d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) RunEncryptedMediaTest(kDefaultEmePlayer, 5945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "bear-a_enc-a.webm", 595a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) kWebMAudioOnly, 596a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "com.widevine", 597a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) MSE, 598a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PREFIXED, 599a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) kNoSessionToLoad, 600a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) false, 601a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) kEmeNotSupportedError); 602a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 603a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 604a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// TODO(jrummell): http://crbug.com/349181 605a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// The parent key system cannot be used when creating MediaKeys. 606e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen MurdochIN_PROC_BROWSER_TEST_F(WVEncryptedMediaTest, ParentThrowsException) { 6076d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) RunEncryptedMediaTest(kDefaultEmePlayer, 6085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "bear-a_enc-a.webm", 6098bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) kWebMAudioOnly, 6108bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) "com.widevine", 6118bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) MSE, 612a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) UNPREFIXED, 6135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) kNoSessionToLoad, 6145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) false, 6158bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) kEmeNotSupportedError); 61658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 6174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif // defined(WIDEVINE_CDM_AVAILABLE) 61858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 6194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(ENABLE_PEPPER_CDMS) 6205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ECKEncryptedMediaTest, InitializeCDMFail) { 6215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) TestNonPlaybackCases(kExternalClearKeyInitializeFailKeySystem, kEmeKeyError); 6225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 6235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// When CDM crashes, we should still get a decode error. 6256d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)// crbug.com/386657 626f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ECKEncryptedMediaTest, DISABLED_CDMCrashDuringDecode) { 627effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch IgnorePluginCrash(); 6285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) TestNonPlaybackCases(kExternalClearKeyCrashKeySystem, kError); 6295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 6305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 631effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Testing that the media browser test does fail on plugin crash. 6326d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)// crbug.com/386657 633f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ECKEncryptedMediaTest, DISABLED_CDMExpectedCrash) { 634effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Plugin crash is not ignored by default, the test is expected to fail. 635effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_NONFATAL_FAILURE( 636effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch TestNonPlaybackCases(kExternalClearKeyCrashKeySystem, kError), 637effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch "plugin crash"); 638effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 639effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 6405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ECKEncryptedMediaTest, FileIOTest) { 6415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) TestNonPlaybackCases(kExternalClearKeyFileIOTestKeySystem, 6425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) kFileIOTestSuccess); 6435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 6445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ECKEncryptedMediaTest, LoadLoadableSession) { 6466d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) RunEncryptedMediaTest(kDefaultEmePlayer, 6475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "bear-320x240-v_enc-v.webm", 6485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) kWebMVideoOnly, 6495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) kExternalClearKeyKeySystem, 6505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SRC, 651a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PREFIXED, 6525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) kLoadableSession, 6535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) false, 6545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) kEnded); 6555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 6565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ECKEncryptedMediaTest, LoadUnknownSession) { 6585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // TODO(xhwang): Add a specific error for this failure, e.g. kSessionNotFound. 6596d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) RunEncryptedMediaTest(kDefaultEmePlayer, 6605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "bear-320x240-v_enc-v.webm", 6615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) kWebMVideoOnly, 6625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) kExternalClearKeyKeySystem, 6634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) SRC, 664a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PREFIXED, 6655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) kUnknownSession, 6665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) false, 6674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kEmeKeyError); 66858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 6694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif // defined(ENABLE_PEPPER_CDMS) 670