diff options
author | tommi@chromium.org <tommi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-27 19:28:25 +0000 |
---|---|---|
committer | tommi@chromium.org <tommi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-27 19:28:25 +0000 |
commit | 420286748888437c755272ffe98fd27a16099194 (patch) | |
tree | 45431e2ca0d52bf46c57f305d1d69660db29e9a1 /webkit/glue/user_agent.cc | |
parent | 8ec81aa69cbd7595508448afe9a0b2cee6e0d321 (diff) | |
download | chromium_src-420286748888437c755272ffe98fd27a16099194.zip chromium_src-420286748888437c755272ffe98fd27a16099194.tar.gz chromium_src-420286748888437c755272ffe98fd27a16099194.tar.bz2 |
Second attempt at landing http://codereview.chromium.org/3214005
Factoring BuildUserAgent out to a separate lib for GCF can use it.
TEST=There should be no functional change. If anything breaks it should be the build.
BUG=50788
Review URL: http://codereview.chromium.org/3225003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@57717 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/glue/user_agent.cc')
-rw-r--r-- | webkit/glue/user_agent.cc | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/webkit/glue/user_agent.cc b/webkit/glue/user_agent.cc new file mode 100644 index 0000000..df4c3f5 --- /dev/null +++ b/webkit/glue/user_agent.cc @@ -0,0 +1,119 @@ +// Copyright (c) 2010 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 "webkit/glue/user_agent.h" + +#if defined(OS_POSIX) && !defined(OS_MACOSX) +#include <sys/utsname.h> +#endif + +#include "base/string_util.h" +#include "base/sys_info.h" + +// Generated +#include "webkit_version.h" // NOLINT + +namespace webkit_glue { + +// Forward declare GetProductVersionInfo. This is implemented in +// renderer_glue.cc as part of the renderer lib. +std::string GetProductVersion(); + +std::string GetWebKitVersion() { + return StringPrintf("%d.%d", WEBKIT_VERSION_MAJOR, WEBKIT_VERSION_MINOR); +} + +std::string BuildOSCpuInfo() { + std::string os_cpu; + +#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_CHROMEOS) + int32 os_major_version = 0; + int32 os_minor_version = 0; + int32 os_bugfix_version = 0; + base::SysInfo::OperatingSystemVersionNumbers(&os_major_version, + &os_minor_version, + &os_bugfix_version); +#endif +#if defined(OS_POSIX) && !defined(OS_MACOSX) + // Should work on any Posix system. + struct utsname unixinfo; + uname(&unixinfo); + + std::string cputype; + // special case for biarch systems + if (strcmp(unixinfo.machine, "x86_64") == 0 && + sizeof(void*) == sizeof(int32)) { // NOLINT + cputype.assign("i686 (x86_64)"); + } else { + cputype.assign(unixinfo.machine); + } +#endif + + StringAppendF( + &os_cpu, +#if defined(OS_WIN) + "Windows NT %d.%d", + os_major_version, + os_minor_version +#elif defined(OS_MACOSX) + "Intel Mac OS X %d_%d_%d", + os_major_version, + os_minor_version, + os_bugfix_version +#elif defined(OS_CHROMEOS) + "CrOS %s %d.%d.%d", + cputype.c_str(), // e.g. i686 + os_major_version, + os_minor_version, + os_bugfix_version +#else + "%s %s", + unixinfo.sysname, // e.g. Linux + cputype.c_str() // e.g. i686 +#endif + ); // NOLINT + + return os_cpu; +} + +void BuildUserAgent(bool mimic_windows, std::string* result) { + const char kUserAgentPlatform[] = +#if defined(OS_WIN) + "Windows"; +#elif defined(OS_MACOSX) + "Macintosh"; +#elif defined(USE_X11) + "X11"; // strange, but that's what Firefox uses +#else + "?"; +#endif + + const char kUserAgentSecurity = 'U'; // "US" strength encryption + + // TODO(port): figure out correct locale + const char kUserAgentLocale[] = "en-US"; + + // Get the product name and version, and replace Safari's Version/X string + // with it. This is done to expose our product name in a manner that is + // maximally compatible with Safari, we hope!! + std::string product = GetProductVersion(); + + // Derived from Safari's UA string. + StringAppendF( + result, + "Mozilla/5.0 (%s; %c; %s; %s) AppleWebKit/%d.%d" + " (KHTML, like Gecko) %s Safari/%d.%d", + mimic_windows ? "Windows" : kUserAgentPlatform, + kUserAgentSecurity, + ((mimic_windows ? "Windows " : "") + BuildOSCpuInfo()).c_str(), + kUserAgentLocale, + WEBKIT_VERSION_MAJOR, + WEBKIT_VERSION_MINOR, + product.c_str(), + WEBKIT_VERSION_MAJOR, + WEBKIT_VERSION_MINOR); +} + +} // namespace webkit_glue + |