blob: 29128625131ed3aaacea0ce9d540c0ea5a185b86 [file] [log] [blame]
// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chromecast/common/user_agent.h"
#include "base/logging.h"
#include "base/strings/strcat.h"
#include "base/strings/stringprintf.h"
#include "base/system/sys_info.h"
#include "build/build_config.h"
#include "chromecast/base/version.h"
#include "chromecast/chromecast_buildflags.h"
#include "components/cast/common/constants.h"
#include "components/version_info/version_info.h"
#include "content/public/common/user_agent.h"
#include "third_party/blink/public/common/features.h"
namespace chromecast {
namespace {
#if BUILDFLAG(IS_ANDROID)
std::string BuildAndroidOsInfo() {
int32_t os_major_version = 0;
int32_t os_minor_version = 0;
int32_t os_bugfix_version = 0;
base::SysInfo::OperatingSystemVersionNumbers(
&os_major_version, &os_minor_version, &os_bugfix_version);
std::string android_version_str;
base::StringAppendF(&android_version_str, "%d.%d", os_major_version,
os_minor_version);
if (os_bugfix_version != 0)
base::StringAppendF(&android_version_str, ".%d", os_bugfix_version);
std::string android_info_str;
// Append the build ID.
std::string android_build_id = base::SysInfo::GetAndroidBuildID();
if (android_build_id.size() > 0)
android_info_str += "; Build/" + android_build_id;
std::string os_info;
base::StringAppendF(&os_info, "Android %s%s", android_version_str.c_str(),
android_info_str.c_str());
return os_info;
}
#endif
std::string GetChromeKeyString() {
std::string chrome_key = base::StrCat({"CrKey/", kFrozenCrKeyValue});
return chrome_key;
}
std::string GetDeviceUserAgentSuffix() {
return std::string(DEVICE_USER_AGENT_SUFFIX);
}
// TODO(guohuideng): Use embedder_support::GetUserAgent() instead after we
// decouple chromecast and the web browser, when we have fewer restrictions on
// gn target dependency.
std::string GetChromiumUserAgent() {
if (base::FeatureList::IsEnabled(blink::features::kReduceUserAgent)) {
return content::GetReducedUserAgent(
/*mobile=*/false, version_info::GetMajorVersionNumber());
}
std::string product = "Chrome/" PRODUCT_VERSION;
std::string os_info;
base::StringAppendF(&os_info, "%s%s",
#if BUILDFLAG(IS_ANDROID)
"Linux; ", BuildAndroidOsInfo().c_str()
#else
"X11; ",
content::BuildOSCpuInfo(
content::IncludeAndroidBuildNumber::Exclude,
content::IncludeAndroidModel::Include)
.c_str()
#endif
);
return content::BuildUserAgentFromOSAndProduct(os_info, product);
}
} // namespace
std::string GetUserAgent() {
std::string chromium_user_agent = GetChromiumUserAgent();
return base::StrCat({chromium_user_agent, " ", GetChromeKeyString(), " ",
GetDeviceUserAgentSuffix()});
}
} // namespace chromecast