blob: c9fce436be1ce98c9746628c3774a58f928506e5 [file] [log] [blame]
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "media/cdm/cdm_paths.h"
#include "base/strings/string_split.h"
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
#include "build/build_config.h"
#include "build/chromeos_buildflags.h"
#include "media/media_buildflags.h"
#include "testing/gtest/include/gtest/gtest.h"
// Only verify platform specific path on some platforms.
// Note: The condition list here must be consistent with condition on
// "cdm_platform_specific_path" in cdm_paths.gni.
// TODO(crbug.com/971433). Move the CDMs out of the install directory on
// ChromeOS.
#if (defined(OS_MAC) || defined(OS_WIN) || defined(OS_LINUX) || \
BUILDFLAG(IS_CHROMEOS_LACROS))
#define CDM_USE_PLATFORM_SPECIFIC_PATH
#endif
namespace media {
namespace {
#if defined(CDM_USE_PLATFORM_SPECIFIC_PATH)
// Special path used in chrome components.
const char kPlatformSpecific[] = "_platform_specific";
// Name of the component platform.
const char kComponentPlatform[] =
#if defined(OS_MAC)
"mac";
#elif defined(OS_WIN)
"win";
#elif defined(OS_CHROMEOS)
"cros";
#elif defined(OS_LINUX)
"linux";
#else
"unsupported_platform";
#endif
// Name of the component architecture.
const char kComponentArch[] =
#if defined(ARCH_CPU_X86)
"x86";
#elif defined(ARCH_CPU_X86_64)
"x64";
#elif defined(ARCH_CPU_ARMEL)
"arm";
#elif defined(ARCH_CPU_ARM64)
"arm64";
#else
"unsupported_arch";
#endif
base::FilePath GetExpectedPlatformSpecificDirectory(
const std::string& base_path) {
base::FilePath path;
const std::string kPlatformArch =
std::string(kComponentPlatform) + "_" + kComponentArch;
return path.AppendASCII(base_path)
.AppendASCII(kPlatformSpecific)
.AppendASCII(kPlatformArch);
}
#else
// If the CDM is not a component, it has no platform specific path.
base::FilePath GetExpectedPlatformSpecificDirectory(
const std::string& base_path) {
return base::FilePath();
}
#endif // defined(CDM_USE_PLATFORM_SPECIFIC_PATH)
std::string GetFlag() {
return BUILDFLAG(CDM_PLATFORM_SPECIFIC_PATH);
}
} // namespace
TEST(CdmPathsTest, FlagSpecified) {
#if defined(CDM_USE_PLATFORM_SPECIFIC_PATH)
EXPECT_FALSE(GetFlag().empty());
#else
EXPECT_TRUE(GetFlag().empty());
#endif
}
TEST(CdmPathsTest, Prefix) {
const char kPrefix[] = "prefix";
auto path = GetPlatformSpecificDirectory(kPrefix);
#if defined(CDM_USE_PLATFORM_SPECIFIC_PATH)
EXPECT_TRUE(base::StartsWith(path.MaybeAsASCII(), kPrefix,
base::CompareCase::SENSITIVE));
#else
EXPECT_TRUE(path.MaybeAsASCII().empty());
#endif
}
TEST(CdmPathsTest, Expected) {
const char kPrefix[] = "cdm";
EXPECT_EQ(GetExpectedPlatformSpecificDirectory(kPrefix),
GetPlatformSpecificDirectory(kPrefix));
}
} // namespace media