// Copyright 2015 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 "components/version_info/version_info.h" #include "base/check.h" #include "base/no_destructor.h" #include "base/notreached.h" #include "base/sanitizer_buildflags.h" #include "base/strings/string_number_conversions.h" #include "base/version.h" #include "build/branding_buildflags.h" #include "build/build_config.h" #include "build/chromeos_buildflags.h" #include "components/version_info/version_info_values.h" namespace version_info { const std::string& GetProductNameAndVersionForUserAgent() { static const base::NoDestructor product_and_version( "Chrome/" + GetVersionNumber()); return *product_and_version; } const std::string& GetProductNameAndVersionForReducedUserAgent() { static const base::NoDestructor product_and_version( "Chrome/" + GetMajorVersionNumber() + ".0.0.0"); return *product_and_version; } std::string GetProductName() { return PRODUCT_NAME; } std::string GetVersionNumber() { return PRODUCT_VERSION; } int GetMajorVersionNumberAsInt() { DCHECK(GetVersion().IsValid()); return GetVersion().components()[0]; } std::string GetMajorVersionNumber() { return base::NumberToString(GetMajorVersionNumberAsInt()); } const base::Version& GetVersion() { static const base::NoDestructor version(GetVersionNumber()); return *version; } std::string GetLastChange() { return LAST_CHANGE; } bool IsOfficialBuild() { return IS_OFFICIAL_BUILD; } std::string GetOSType() { #if BUILDFLAG(IS_WIN) return "Windows"; #elif BUILDFLAG(IS_IOS) return "iOS"; #elif BUILDFLAG(IS_MAC) return "Mac OS X"; #elif BUILDFLAG(IS_CHROMEOS_ASH) # if BUILDFLAG(GOOGLE_CHROME_BRANDING) return "Chrome OS"; # else return "Chromium OS"; # endif #elif BUILDFLAG(IS_ANDROID) return "Android"; #elif BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS_LACROS) return "Linux"; #elif BUILDFLAG(IS_FREEBSD) return "FreeBSD"; #elif BUILDFLAG(IS_OPENBSD) return "OpenBSD"; #elif BUILDFLAG(IS_SOLARIS) return "Solaris"; #elif BUILDFLAG(IS_FUCHSIA) return "Fuchsia"; #else return "Unknown"; #endif } std::string GetChannelString(Channel channel) { switch (channel) { case Channel::STABLE: return "stable"; case Channel::BETA: return "beta"; case Channel::DEV: return "dev"; case Channel::CANARY: return "canary"; case Channel::UNKNOWN: return "unknown"; } NOTREACHED(); return std::string(); } std::string GetSanitizerList() { std::string sanitizers; #if defined(ADDRESS_SANITIZER) sanitizers += "address "; #endif #if BUILDFLAG(IS_HWASAN) sanitizers += "hwaddress "; #endif #if defined(LEAK_SANITIZER) sanitizers += "leak "; #endif #if defined(MEMORY_SANITIZER) sanitizers += "memory "; #endif #if defined(THREAD_SANITIZER) sanitizers += "thread "; #endif #if defined(UNDEFINED_SANITIZER) sanitizers += "undefined "; #endif return sanitizers; } } // namespace version_info