| // Copyright 2014 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/update_client/update_query_params.h" |
| |
| #include "base/logging.h" |
| #include "base/strings/stringprintf.h" |
| #include "base/sys_info.h" |
| #include "build/build_config.h" |
| #include "components/update_client/update_query_params_delegate.h" |
| |
| #if defined(OS_WIN) |
| #include "base/win/windows_version.h" |
| #endif |
| |
| namespace update_client { |
| |
| namespace { |
| |
| const char kUnknown[] = "unknown"; |
| |
| // The request extra information is the OS and architecture, this helps |
| // the server select the right package to be delivered. |
| const char kOs[] = |
| #if defined(OS_MACOSX) |
| "mac"; |
| #elif defined(OS_WIN) |
| "win"; |
| #elif defined(OS_ANDROID) |
| "android"; |
| #elif defined(OS_CHROMEOS) |
| "cros"; |
| #elif defined(OS_LINUX) |
| "linux"; |
| #elif defined(OS_FUCHSIA) |
| "fuchsia"; |
| #elif defined(OS_OPENBSD) |
| "openbsd"; |
| #elif defined(OS_STARBOARD) |
| "starboard"; |
| #else |
| #error "unknown os" |
| #endif |
| |
| const char kArch[] = |
| #if defined(__amd64__) || defined(_WIN64) |
| "x64"; |
| #elif defined(__i386__) || defined(_WIN32) |
| "x86"; |
| #elif defined(__arm__) |
| "arm"; |
| #elif defined(__aarch64__) |
| "arm64"; |
| #elif defined(__mips__) && (__mips == 64) |
| "mips64el"; |
| #elif defined(__mips__) |
| "mipsel"; |
| #elif defined(__powerpc64__) |
| "ppc64"; |
| #else |
| #error "unknown arch" |
| #endif |
| |
| const char kChrome[] = "chrome"; |
| |
| #if defined(GOOGLE_CHROME_BUILD) |
| const char kChromeCrx[] = "chromecrx"; |
| #else |
| const char kChromiumCrx[] = "chromiumcrx"; |
| #endif // defined(GOOGLE_CHROME_BUILD) |
| |
| UpdateQueryParamsDelegate* g_delegate = nullptr; |
| |
| } // namespace |
| |
| // static |
| std::string UpdateQueryParams::Get(ProdId prod) { |
| return base::StringPrintf( |
| "os=%s&arch=%s&os_arch=%s&nacl_arch=%s&prod=%s%s&acceptformat=crx2,crx3", |
| kOs, kArch, |
| #if !defined(OS_STARBOARD) |
| base::SysInfo().OperatingSystemArchitecture().c_str(), |
| #else |
| "", |
| #endif |
| GetNaclArch(), GetProdIdString(prod), |
| g_delegate ? g_delegate->GetExtraParams().c_str() : ""); |
| } |
| |
| // static |
| const char* UpdateQueryParams::GetProdIdString(UpdateQueryParams::ProdId prod) { |
| switch (prod) { |
| case UpdateQueryParams::CHROME: |
| return kChrome; |
| break; |
| case UpdateQueryParams::CRX: |
| #if defined(GOOGLE_CHROME_BUILD) |
| return kChromeCrx; |
| #else |
| return kChromiumCrx; |
| #endif |
| break; |
| } |
| return kUnknown; |
| } |
| |
| // static |
| const char* UpdateQueryParams::GetOS() { |
| return kOs; |
| } |
| |
| // static |
| const char* UpdateQueryParams::GetArch() { |
| return kArch; |
| } |
| |
| // static |
| const char* UpdateQueryParams::GetNaclArch() { |
| #if defined(ARCH_CPU_X86_FAMILY) |
| #if defined(ARCH_CPU_X86_64) |
| return "x86-64"; |
| #elif defined(OS_WIN) |
| bool x86_64 = (base::win::OSInfo::GetInstance()->wow64_status() == |
| base::win::OSInfo::WOW64_ENABLED); |
| return x86_64 ? "x86-64" : "x86-32"; |
| #else |
| return "x86-32"; |
| #endif |
| #elif defined(ARCH_CPU_ARMEL) |
| return "arm"; |
| #elif defined(ARCH_CPU_ARM64) |
| return "arm64"; |
| #elif defined(ARCH_CPU_MIPSEL) |
| return "mips32"; |
| #elif defined(ARCH_CPU_MIPS64EL) |
| return "mips64"; |
| #elif defined(ARCH_CPU_PPC64) |
| return "ppc64"; |
| #else |
| // NOTE: when adding new values here, please remember to update the |
| // comment in the .h file about possible return values from this function. |
| #error "You need to add support for your architecture here" |
| #endif |
| } |
| |
| // static |
| std::string UpdateQueryParams::GetProdVersion() { |
| // TODO: fill in prod versoin number |
| // return version_info::GetVersionNumber(); |
| return "0.0.1"; |
| } |
| |
| // static |
| void UpdateQueryParams::SetDelegate(UpdateQueryParamsDelegate* delegate) { |
| DCHECK(!g_delegate || !delegate || (delegate == g_delegate)); |
| g_delegate = delegate; |
| } |
| |
| } // namespace update_client |