1 // Copyright 2020 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 "chromeos/components/telemetry_extension_ui/diagnostics_service_converters.h"
6 
7 #include "base/notreached.h"
8 #include "base/optional.h"
9 #include "chrome/browser/chromeos/wilco_dtc_supportd/mojo_utils.h"
10 #include "chromeos/components/telemetry_extension_ui/convert_ptr.h"
11 #include "chromeos/components/telemetry_extension_ui/mojom/diagnostics_service.mojom.h"
12 #include "chromeos/services/cros_healthd/public/mojom/cros_healthd_diagnostics.mojom.h"
13 
14 namespace chromeos {
15 namespace converters {
16 
17 namespace unchecked {
18 
19 namespace {
20 
GetStringFromMojoHandle(mojo::ScopedHandle handle)21 std::string GetStringFromMojoHandle(mojo::ScopedHandle handle) {
22   base::ReadOnlySharedMemoryMapping shared_memory;
23   return MojoUtils::GetStringPieceFromMojoHandle(std::move(handle),
24                                                  &shared_memory)
25       .as_string();
26 }
27 
28 }  // namespace
29 
UncheckedConvertPtr(cros_healthd::mojom::RoutineUpdatePtr input)30 health::mojom::RoutineUpdatePtr UncheckedConvertPtr(
31     cros_healthd::mojom::RoutineUpdatePtr input) {
32   return health::mojom::RoutineUpdate::New(
33       input->progress_percent,
34       GetStringFromMojoHandle(std::move(input->output)),
35       ConvertPtr(std::move(input->routine_update_union)));
36 }
37 
UncheckedConvertPtr(cros_healthd::mojom::RoutineUpdateUnionPtr input)38 health::mojom::RoutineUpdateUnionPtr UncheckedConvertPtr(
39     cros_healthd::mojom::RoutineUpdateUnionPtr input) {
40   switch (input->which()) {
41     case cros_healthd::mojom::RoutineUpdateUnion::Tag::INTERACTIVE_UPDATE:
42       return health::mojom::RoutineUpdateUnion::NewInteractiveUpdate(
43           ConvertPtr(std::move(input->get_interactive_update())));
44     case cros_healthd::mojom::RoutineUpdateUnion::Tag::NONINTERACTIVE_UPDATE:
45       return health::mojom::RoutineUpdateUnion::NewNoninteractiveUpdate(
46           ConvertPtr(std::move(input->get_noninteractive_update())));
47   }
48 }
49 
UncheckedConvertPtr(cros_healthd::mojom::InteractiveRoutineUpdatePtr input)50 health::mojom::InteractiveRoutineUpdatePtr UncheckedConvertPtr(
51     cros_healthd::mojom::InteractiveRoutineUpdatePtr input) {
52   return health::mojom::InteractiveRoutineUpdate::New(
53       Convert(input->user_message));
54 }
55 
UncheckedConvertPtr(cros_healthd::mojom::NonInteractiveRoutineUpdatePtr input)56 health::mojom::NonInteractiveRoutineUpdatePtr UncheckedConvertPtr(
57     cros_healthd::mojom::NonInteractiveRoutineUpdatePtr input) {
58   return health::mojom::NonInteractiveRoutineUpdate::New(
59       Convert(input->status), std::move(input->status_message));
60 }
61 
UncheckedConvertPtr(cros_healthd::mojom::RunRoutineResponsePtr input)62 health::mojom::RunRoutineResponsePtr UncheckedConvertPtr(
63     cros_healthd::mojom::RunRoutineResponsePtr input) {
64   return health::mojom::RunRoutineResponse::New(input->id,
65                                                 Convert(input->status));
66 }
67 
68 }  // namespace unchecked
69 
Convert(cros_healthd::mojom::DiagnosticRoutineEnum input)70 base::Optional<health::mojom::DiagnosticRoutineEnum> Convert(
71     cros_healthd::mojom::DiagnosticRoutineEnum input) {
72   switch (input) {
73     case cros_healthd::mojom::DiagnosticRoutineEnum::kBatteryCapacity:
74       return health::mojom::DiagnosticRoutineEnum::kBatteryCapacity;
75     case cros_healthd::mojom::DiagnosticRoutineEnum::kBatteryHealth:
76       return health::mojom::DiagnosticRoutineEnum::kBatteryHealth;
77     case cros_healthd::mojom::DiagnosticRoutineEnum::kSmartctlCheck:
78       return health::mojom::DiagnosticRoutineEnum::kSmartctlCheck;
79     case cros_healthd::mojom::DiagnosticRoutineEnum::kAcPower:
80       return health::mojom::DiagnosticRoutineEnum::kAcPower;
81     case cros_healthd::mojom::DiagnosticRoutineEnum::kCpuCache:
82       return health::mojom::DiagnosticRoutineEnum::kCpuCache;
83     case cros_healthd::mojom::DiagnosticRoutineEnum::kCpuStress:
84       return health::mojom::DiagnosticRoutineEnum::kCpuStress;
85     case cros_healthd::mojom::DiagnosticRoutineEnum::kFloatingPointAccuracy:
86       return health::mojom::DiagnosticRoutineEnum::kFloatingPointAccuracy;
87     case cros_healthd::mojom::DiagnosticRoutineEnum::kNvmeWearLevel:
88       return health::mojom::DiagnosticRoutineEnum::kNvmeWearLevel;
89     case cros_healthd::mojom::DiagnosticRoutineEnum::kNvmeSelfTest:
90       return health::mojom::DiagnosticRoutineEnum::kNvmeSelfTest;
91     case cros_healthd::mojom::DiagnosticRoutineEnum::kDiskRead:
92       return health::mojom::DiagnosticRoutineEnum::kDiskRead;
93     case cros_healthd::mojom::DiagnosticRoutineEnum::kPrimeSearch:
94       return health::mojom::DiagnosticRoutineEnum::kPrimeSearch;
95     case cros_healthd::mojom::DiagnosticRoutineEnum::kBatteryDischarge:
96       return health::mojom::DiagnosticRoutineEnum::kBatteryDischarge;
97     case cros_healthd::mojom::DiagnosticRoutineEnum::kBatteryCharge:
98       return health::mojom::DiagnosticRoutineEnum::kBatteryCharge;
99     default:
100       return base::nullopt;
101   }
102 }
103 
Convert(const std::vector<cros_healthd::mojom::DiagnosticRoutineEnum> & input)104 std::vector<health::mojom::DiagnosticRoutineEnum> Convert(
105     const std::vector<cros_healthd::mojom::DiagnosticRoutineEnum>& input) {
106   std::vector<health::mojom::DiagnosticRoutineEnum> output;
107   for (const auto element : input) {
108     base::Optional<health::mojom::DiagnosticRoutineEnum> converted =
109         Convert(element);
110     if (converted.has_value()) {
111       output.push_back(converted.value());
112     }
113   }
114   return output;
115 }
116 
Convert(cros_healthd::mojom::DiagnosticRoutineUserMessageEnum input)117 health::mojom::DiagnosticRoutineUserMessageEnum Convert(
118     cros_healthd::mojom::DiagnosticRoutineUserMessageEnum input) {
119   switch (input) {
120     case cros_healthd::mojom::DiagnosticRoutineUserMessageEnum::kUnplugACPower:
121       return health::mojom::DiagnosticRoutineUserMessageEnum::kUnplugACPower;
122     case cros_healthd::mojom::DiagnosticRoutineUserMessageEnum::kPlugInACPower:
123       return health::mojom::DiagnosticRoutineUserMessageEnum::kPlugInACPower;
124   }
125   NOTREACHED();
126   return static_cast<health::mojom::DiagnosticRoutineUserMessageEnum>(
127       static_cast<int>(
128           health::mojom::DiagnosticRoutineUserMessageEnum::kMaxValue) +
129       1);
130 }
131 
Convert(cros_healthd::mojom::DiagnosticRoutineStatusEnum input)132 health::mojom::DiagnosticRoutineStatusEnum Convert(
133     cros_healthd::mojom::DiagnosticRoutineStatusEnum input) {
134   switch (input) {
135     case cros_healthd::mojom::DiagnosticRoutineStatusEnum::kReady:
136       return health::mojom::DiagnosticRoutineStatusEnum::kReady;
137     case cros_healthd::mojom::DiagnosticRoutineStatusEnum::kRunning:
138       return health::mojom::DiagnosticRoutineStatusEnum::kRunning;
139     case cros_healthd::mojom::DiagnosticRoutineStatusEnum::kWaiting:
140       return health::mojom::DiagnosticRoutineStatusEnum::kWaiting;
141     case cros_healthd::mojom::DiagnosticRoutineStatusEnum::kPassed:
142       return health::mojom::DiagnosticRoutineStatusEnum::kPassed;
143     case cros_healthd::mojom::DiagnosticRoutineStatusEnum::kFailed:
144       return health::mojom::DiagnosticRoutineStatusEnum::kFailed;
145     case cros_healthd::mojom::DiagnosticRoutineStatusEnum::kError:
146       return health::mojom::DiagnosticRoutineStatusEnum::kError;
147     case cros_healthd::mojom::DiagnosticRoutineStatusEnum::kCancelled:
148       return health::mojom::DiagnosticRoutineStatusEnum::kCancelled;
149     case cros_healthd::mojom::DiagnosticRoutineStatusEnum::kFailedToStart:
150       return health::mojom::DiagnosticRoutineStatusEnum::kFailedToStart;
151     case cros_healthd::mojom::DiagnosticRoutineStatusEnum::kRemoved:
152       return health::mojom::DiagnosticRoutineStatusEnum::kRemoved;
153     case cros_healthd::mojom::DiagnosticRoutineStatusEnum::kCancelling:
154       return health::mojom::DiagnosticRoutineStatusEnum::kCancelling;
155     case cros_healthd::mojom::DiagnosticRoutineStatusEnum::kUnsupported:
156       return health::mojom::DiagnosticRoutineStatusEnum::kUnsupported;
157   }
158   NOTREACHED();
159   return static_cast<health::mojom::DiagnosticRoutineStatusEnum>(
160       static_cast<int>(health::mojom::DiagnosticRoutineStatusEnum::kMaxValue) +
161       1);
162 }
163 
Convert(health::mojom::DiagnosticRoutineCommandEnum input)164 cros_healthd::mojom::DiagnosticRoutineCommandEnum Convert(
165     health::mojom::DiagnosticRoutineCommandEnum input) {
166   switch (input) {
167     case health::mojom::DiagnosticRoutineCommandEnum::kContinue:
168       return cros_healthd::mojom::DiagnosticRoutineCommandEnum::kContinue;
169     case health::mojom::DiagnosticRoutineCommandEnum::kCancel:
170       return cros_healthd::mojom::DiagnosticRoutineCommandEnum::kCancel;
171     case health::mojom::DiagnosticRoutineCommandEnum::kGetStatus:
172       return cros_healthd::mojom::DiagnosticRoutineCommandEnum::kGetStatus;
173     case health::mojom::DiagnosticRoutineCommandEnum::kRemove:
174       return cros_healthd::mojom::DiagnosticRoutineCommandEnum::kRemove;
175   }
176   NOTREACHED();
177   return static_cast<cros_healthd::mojom::DiagnosticRoutineCommandEnum>(
178       static_cast<int>(
179           cros_healthd::mojom::DiagnosticRoutineCommandEnum::kMaxValue) +
180       1);
181 }
182 
Convert(health::mojom::AcPowerStatusEnum input)183 cros_healthd::mojom::AcPowerStatusEnum Convert(
184     health::mojom::AcPowerStatusEnum input) {
185   switch (input) {
186     case health::mojom::AcPowerStatusEnum::kConnected:
187       return cros_healthd::mojom::AcPowerStatusEnum::kConnected;
188     case health::mojom::AcPowerStatusEnum::kDisconnected:
189       return cros_healthd::mojom::AcPowerStatusEnum::kDisconnected;
190   }
191   NOTREACHED();
192   return static_cast<cros_healthd::mojom::AcPowerStatusEnum>(
193       static_cast<int>(cros_healthd::mojom::AcPowerStatusEnum::kMaxValue) + 1);
194 }
195 
Convert(health::mojom::NvmeSelfTestTypeEnum input)196 cros_healthd::mojom::NvmeSelfTestTypeEnum Convert(
197     health::mojom::NvmeSelfTestTypeEnum input) {
198   switch (input) {
199     case health::mojom::NvmeSelfTestTypeEnum::kShortSelfTest:
200       return cros_healthd::mojom::NvmeSelfTestTypeEnum::kShortSelfTest;
201     case health::mojom::NvmeSelfTestTypeEnum::kLongSelfTest:
202       return cros_healthd::mojom::NvmeSelfTestTypeEnum::kLongSelfTest;
203   }
204   NOTREACHED();
205   return static_cast<cros_healthd::mojom::NvmeSelfTestTypeEnum>(
206       static_cast<int>(cros_healthd::mojom::NvmeSelfTestTypeEnum::kMaxValue) +
207       1);
208 }
209 
Convert(health::mojom::DiskReadRoutineTypeEnum input)210 cros_healthd::mojom::DiskReadRoutineTypeEnum Convert(
211     health::mojom::DiskReadRoutineTypeEnum input) {
212   switch (input) {
213     case health::mojom::DiskReadRoutineTypeEnum::kLinearRead:
214       return cros_healthd::mojom::DiskReadRoutineTypeEnum::kLinearRead;
215     case health::mojom::DiskReadRoutineTypeEnum::kRandomRead:
216       return cros_healthd::mojom::DiskReadRoutineTypeEnum::kRandomRead;
217   }
218   NOTREACHED();
219   return static_cast<cros_healthd::mojom::DiskReadRoutineTypeEnum>(
220       static_cast<int>(
221           cros_healthd::mojom::DiskReadRoutineTypeEnum::kMaxValue) +
222       1);
223 }
224 
225 }  // namespace converters
226 }  // namespace chromeos
227