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