| // Copyright 2021 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/browser/lacros/field_trial_observer.h" |
| |
| #include "chrome/browser/metrics/chrome_metrics_service_accessor.h" |
| #include "chromeos/lacros/lacros_service.h" |
| |
| namespace { |
| // Prefix prepended by Lacros before sending ash field trials as |
| // synthetic field trials. |
| constexpr char ASH_FIELD_TRIAL_PREFIX[] = "ASH_"; |
| } // namespace |
| |
| FieldTrialObserver::FieldTrialObserver() = default; |
| FieldTrialObserver::~FieldTrialObserver() = default; |
| |
| void FieldTrialObserver::Start() { |
| auto* lacros_service = chromeos::LacrosService::Get(); |
| if (!lacros_service->IsAvailable<crosapi::mojom::FieldTrialService>()) |
| return; |
| |
| // Check if Ash is too old to support FieldTrialObserver. |
| int version = lacros_service->GetInterfaceVersion( |
| crosapi::mojom::FieldTrialService::Uuid_); |
| int min_required_version = |
| static_cast<int>(crosapi::mojom::FieldTrialService::MethodMinVersions:: |
| kAddFieldTrialObserverMinVersion); |
| if (version < min_required_version) |
| return; |
| |
| lacros_service->GetRemote<crosapi::mojom::FieldTrialService>() |
| ->AddFieldTrialObserver(receiver_.BindNewPipeAndPassRemote()); |
| } |
| |
| void FieldTrialObserver::OnFieldTrialGroupActivated( |
| std::vector<crosapi::mojom::FieldTrialGroupInfoPtr> infos) { |
| for (const auto& info : infos) { |
| ChromeMetricsServiceAccessor::RegisterSyntheticFieldTrial( |
| ASH_FIELD_TRIAL_PREFIX + info->trial_name, info->group_name); |
| } |
| } |