devicetype.cc 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. // Copyright 2022 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. #include "chromeos/constants/devicetype.h"
  5. #include "base/logging.h"
  6. #include "build/chromeos_buildflags.h"
  7. #if BUILDFLAG(IS_CHROMEOS_ASH)
  8. #include "base/command_line.h"
  9. #include "base/system/sys_info.h"
  10. #endif
  11. #if BUILDFLAG(IS_CHROMEOS_LACROS)
  12. #include "chromeos/crosapi/mojom/crosapi.mojom.h" // nogncheck
  13. #include "chromeos/startup/browser_params_proxy.h"
  14. #endif
  15. namespace chromeos {
  16. namespace {
  17. #if BUILDFLAG(IS_CHROMEOS_ASH)
  18. constexpr char kDeviceTypeKey[] = "DEVICETYPE";
  19. constexpr char kFormFactor[] = "form-factor";
  20. #endif
  21. } // namespace
  22. DeviceType GetDeviceType() {
  23. #if BUILDFLAG(IS_CHROMEOS_ASH)
  24. std::string value;
  25. base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
  26. if (command_line->HasSwitch(kFormFactor)) {
  27. value = command_line->GetSwitchValueASCII(kFormFactor);
  28. } else if (!base::SysInfo::GetLsbReleaseValue(kDeviceTypeKey, &value)) {
  29. return DeviceType::kUnknown;
  30. }
  31. // Most devices are Chromebooks, so we will also consider reference boards
  32. // as Chromebooks.
  33. if (value == "CHROMEBOOK" || value == "REFERENCE" || value == "CHROMESLATE" ||
  34. value == "CLAMSHELL" || value == "CONVERTIBLE" || value == "DETACHABLE")
  35. return DeviceType::kChromebook;
  36. if (value == "CHROMEBASE")
  37. return DeviceType::kChromebase;
  38. if (value == "CHROMEBIT")
  39. return DeviceType::kChromebit;
  40. if (value == "CHROMEBOX")
  41. return DeviceType::kChromebox;
  42. LOG(ERROR) << "Unknown device type \"" << value << "\"";
  43. return DeviceType::kUnknown;
  44. #elif BUILDFLAG(IS_CHROMEOS_LACROS)
  45. auto device_type = BrowserParamsProxy::Get()->DeviceType();
  46. switch (device_type) {
  47. case crosapi::mojom::BrowserInitParams::DeviceType::kChromebook:
  48. return chromeos::DeviceType::kChromebook;
  49. case crosapi::mojom::BrowserInitParams::DeviceType::kChromebase:
  50. return chromeos::DeviceType::kChromebase;
  51. case crosapi::mojom::BrowserInitParams::DeviceType::kChromebit:
  52. return chromeos::DeviceType::kChromebit;
  53. case crosapi::mojom::BrowserInitParams::DeviceType::kChromebox:
  54. return chromeos::DeviceType::kChromebox;
  55. case crosapi::mojom::BrowserInitParams::DeviceType::kUnknown:
  56. [[fallthrough]];
  57. default:
  58. return chromeos::DeviceType::kUnknown;
  59. }
  60. #endif
  61. }
  62. } // namespace chromeos