| // Copyright 2018 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 "content/child/field_trial.h" |
| #include "base/base_switches.h" |
| #include "base/command_line.h" |
| #include "base/debug/leak_annotations.h" |
| #include "base/feature_list.h" |
| #include "base/macros.h" |
| #include "base/metrics/field_trial.h" |
| #include "build/build_config.h" |
| #include "content/public/common/content_switches.h" |
| #include "services/service_manager/embedder/descriptors.h" |
| |
| namespace content { |
| |
| void InitializeFieldTrialAndFeatureList() { |
| const base::CommandLine& command_line = |
| *base::CommandLine::ForCurrentProcess(); |
| |
| // Initialize statistical testing infrastructure. We set the entropy |
| // provider to nullptr to disallow non-browser processes from creating |
| // their own one-time randomized trials; they should be created in the |
| // browser process. |
| // |
| // This is intentionally leaked since it needs to live for the duration of the |
| // process and there's no benefit in cleaning it up at exit. |
| base::FieldTrialList* leaked_field_trial_list = |
| new base::FieldTrialList(nullptr); |
| ANNOTATE_LEAKING_OBJECT_PTR(leaked_field_trial_list); |
| ignore_result(leaked_field_trial_list); |
| |
| // Ensure any field trials in browser are reflected into the child |
| // process. |
| #if defined(OS_WIN) || defined(OS_MACOSX) |
| base::FieldTrialList::CreateTrialsFromCommandLine( |
| command_line, switches::kFieldTrialHandle, -1); |
| #elif defined(OS_POSIX) || defined(OS_FUCHSIA) |
| // On POSIX systems that use the zygote, we get the trials from a shared |
| // memory segment backed by an fd instead of the command line. |
| base::FieldTrialList::CreateTrialsFromCommandLine( |
| command_line, switches::kFieldTrialHandle, |
| service_manager::kFieldTrialDescriptor); |
| #endif |
| |
| std::unique_ptr<base::FeatureList> feature_list(new base::FeatureList); |
| base::FieldTrialList::CreateFeaturesFromCommandLine( |
| command_line, switches::kEnableFeatures, switches::kDisableFeatures, |
| feature_list.get()); |
| base::FeatureList::SetInstance(std::move(feature_list)); |
| } |
| |
| } // namespace content |