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 "components/omaha_query_params/omaha_query_params.h" 6 7#include "base/compiler_specific.h" 8#include "base/logging.h" 9#include "base/strings/stringprintf.h" 10#include "base/win/windows_version.h" 11#include "components/omaha_query_params/omaha_query_params_delegate.h" 12 13namespace omaha_query_params { 14 15namespace { 16 17const char kUnknown[] = "unknown"; 18 19// The request extra information is the OS and architecture, this helps 20// the server select the right package to be delivered. 21const char kOs[] = 22#if defined(OS_MACOSX) 23 "mac"; 24#elif defined(OS_WIN) 25 "win"; 26#elif defined(OS_ANDROID) 27 "android"; 28#elif defined(OS_CHROMEOS) 29 "cros"; 30#elif defined(OS_LINUX) 31 "linux"; 32#elif defined(OS_OPENBSD) 33 "openbsd"; 34#else 35#error "unknown os" 36#endif 37 38const char kArch[] = 39#if defined(__amd64__) || defined(_WIN64) 40 "x64"; 41#elif defined(__i386__) || defined(_WIN32) 42 "x86"; 43#elif defined(__arm__) 44 "arm"; 45#elif defined(__aarch64__) 46 "arm64"; 47#elif defined(__mips__) 48 "mipsel"; 49#else 50#error "unknown arch" 51#endif 52 53const char kChrome[] = "chrome"; 54 55#if defined(GOOGLE_CHROME_BUILD) 56const char kChromeCrx[] = "chromecrx"; 57#else 58const char kChromiumCrx[] = "chromiumcrx"; 59#endif // defined(GOOGLE_CHROME_BUILD) 60 61OmahaQueryParamsDelegate* g_delegate = NULL; 62 63} // namespace 64 65// static 66std::string OmahaQueryParams::Get(ProdId prod) { 67 return base::StringPrintf( 68 "os=%s&arch=%s&nacl_arch=%s&prod=%s%s", 69 kOs, 70 kArch, 71 GetNaclArch(), 72 GetProdIdString(prod), 73 g_delegate ? g_delegate->GetExtraParams().c_str() : ""); 74} 75 76// static 77const char* OmahaQueryParams::GetProdIdString(OmahaQueryParams::ProdId prod) { 78 switch (prod) { 79 case OmahaQueryParams::CHROME: 80 return kChrome; 81 break; 82 case OmahaQueryParams::CRX: 83#if defined(GOOGLE_CHROME_BUILD) 84 return kChromeCrx; 85#else 86 return kChromiumCrx; 87#endif 88 break; 89 } 90 return kUnknown; 91} 92 93// static 94const char* OmahaQueryParams::GetOS() { 95 return kOs; 96} 97 98// static 99const char* OmahaQueryParams::GetArch() { 100 return kArch; 101} 102 103// static 104const char* OmahaQueryParams::GetNaclArch() { 105#if defined(ARCH_CPU_X86_FAMILY) 106#if defined(ARCH_CPU_X86_64) 107 return "x86-64"; 108#elif defined(OS_WIN) 109 bool x86_64 = (base::win::OSInfo::GetInstance()->wow64_status() == 110 base::win::OSInfo::WOW64_ENABLED); 111 return x86_64 ? "x86-64" : "x86-32"; 112#else 113 return "x86-32"; 114#endif 115#elif defined(ARCH_CPU_ARMEL) 116 return "arm"; 117#elif defined(ARCH_CPU_ARM64) 118 return "arm64"; 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 128// static 129void OmahaQueryParams::SetDelegate(OmahaQueryParamsDelegate* delegate) { 130 DCHECK(!g_delegate || !delegate); 131 g_delegate = delegate; 132} 133 134} // namespace omaha_query_params 135