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