Home | History | Annotate | Download | only in omaha_query_params
      1 // Copyright 2014 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "chrome/browser/omaha_query_params/omaha_query_params.h"
      6 
      7 #include "base/compiler_specific.h"
      8 #include "base/strings/stringprintf.h"
      9 #include "base/win/windows_version.h"
     10 #include "chrome/browser/browser_process.h"
     11 #include "chrome/common/chrome_version_info.h"
     12 
     13 namespace {
     14 
     15 const char kUnknown[] = "unknown";
     16 
     17 // The request extra information is the OS and architecture, this helps
     18 // the server select the right package to be delivered.
     19 const char kOs[] =
     20 #if defined(OS_MACOSX)
     21     "mac";
     22 #elif defined(OS_WIN)
     23     "win";
     24 #elif defined(OS_ANDROID)
     25     "android";
     26 #elif defined(OS_CHROMEOS)
     27     "cros";
     28 #elif defined(OS_LINUX)
     29     "linux";
     30 #elif defined(OS_OPENBSD)
     31     "openbsd";
     32 #else
     33 #error "unknown os"
     34 #endif
     35 
     36 const char kArch[] =
     37 #if defined(__amd64__) || defined(_WIN64)
     38     "x64";
     39 #elif defined(__i386__) || defined(_WIN32)
     40     "x86";
     41 #elif defined(__arm__)
     42     "arm";
     43 #elif defined(__aarch64__)
     44     "arm64";
     45 #elif defined(__mips__)
     46     "mipsel";
     47 #else
     48 #error "unknown arch"
     49 #endif
     50 
     51 const char kChrome[] = "chrome";
     52 
     53 const char kStable[] = "stable";
     54 const char kBeta[] = "beta";
     55 const char kDev[] = "dev";
     56 const char kCanary[] = "canary";
     57 
     58 #if defined(GOOGLE_CHROME_BUILD)
     59 const char kChromeCrx[] = "chromecrx";
     60 #else
     61 const char kChromiumCrx[] = "chromiumcrx";
     62 #endif  // defined(GOOGLE_CHROME_BUILD)
     63 
     64 }  // namespace
     65 
     66 namespace chrome {
     67 
     68 // static
     69 std::string OmahaQueryParams::Get(ProdId prod) {
     70   return base::StringPrintf(
     71       "os=%s&arch=%s&nacl_arch=%s&prod=%s&prodchannel=%s"
     72           "&prodversion=%s&lang=%s",
     73       kOs,
     74       kArch,
     75       GetNaclArch(),
     76       GetProdIdString(prod),
     77       GetChannelString(),
     78       chrome::VersionInfo().Version().c_str(),
     79       GetLang());
     80 }
     81 
     82 // static
     83 const char* OmahaQueryParams::GetProdIdString(
     84     chrome::OmahaQueryParams::ProdId prod) {
     85   switch (prod) {
     86     case chrome::OmahaQueryParams::CHROME:
     87       return kChrome;
     88       break;
     89     case chrome::OmahaQueryParams::CRX:
     90 #if defined(GOOGLE_CHROME_BUILD)
     91       return kChromeCrx;
     92 #else
     93       return kChromiumCrx;
     94 #endif
     95       break;
     96   }
     97   return kUnknown;
     98 }
     99 
    100 // static
    101 const char* OmahaQueryParams::GetOS() {
    102   return kOs;
    103 }
    104 
    105 // static
    106 const char* OmahaQueryParams::GetArch() {
    107   return kArch;
    108 }
    109 
    110 // static
    111 const char* OmahaQueryParams::GetNaclArch() {
    112 #if defined(ARCH_CPU_X86_FAMILY)
    113 #if defined(ARCH_CPU_X86_64)
    114   return "x86-64";
    115 #elif defined(OS_WIN)
    116   bool x86_64 = (base::win::OSInfo::GetInstance()->wow64_status() ==
    117                  base::win::OSInfo::WOW64_ENABLED);
    118   return x86_64 ? "x86-64" : "x86-32";
    119 #else
    120   return "x86-32";
    121 #endif
    122 #elif defined(ARCH_CPU_ARMEL)
    123   return "arm";
    124 #elif defined(ARCH_CPU_ARM64)
    125   return "arm64";
    126 #elif defined(ARCH_CPU_MIPSEL)
    127   return "mips32";
    128 #else
    129 // NOTE: when adding new values here, please remember to update the
    130 // comment in the .h file about possible return values from this function.
    131 #error "You need to add support for your architecture here"
    132 #endif
    133 }
    134 
    135 const char* OmahaQueryParams::GetChannelString() {
    136   switch (chrome::VersionInfo::GetChannel()) {
    137     case chrome::VersionInfo::CHANNEL_STABLE:
    138       return kStable;
    139       break;
    140     case chrome::VersionInfo::CHANNEL_BETA:
    141       return kBeta;
    142       break;
    143     case chrome::VersionInfo::CHANNEL_DEV:
    144       return kDev;
    145       break;
    146     case chrome::VersionInfo::CHANNEL_CANARY:
    147       return kCanary;
    148       break;
    149     case chrome::VersionInfo::CHANNEL_UNKNOWN:
    150       return kUnknown;
    151       break;
    152   }
    153   return kUnknown;
    154 }
    155 
    156 const char* OmahaQueryParams::GetLang() {
    157   return g_browser_process->GetApplicationLocale().c_str();
    158 }
    159 
    160 }  // namespace chrome
    161