This document describes how to add a new Chrome feature flag visible to users via chrome://flags
UI.
chrome://flags
UI.See also the following for definitions:
base::Feature
This step would be different depending on where you want to use the flag:
content/
and its embeddersAdd a base::Feature
to the following files:
content/
OnlyAdd a base::Feature
to the following files:
third_party/blink/
(and Possibly in content/
)Add a base::Feature
to the following files:
Historically, Blink also has its own runtime feature mechanism. So if you feature needs to be runtime-enabled, read also Blink's Runtime Enable Features doc and Initialization of Blink runtime features in content layer.
You can refer to this CL and this document to see
base::Feature
: [1] [2]base::Feature
to a Blink runtime feature: [1]Also, this patch added a virtual test for running web tests with the flag. When you add a flag, you can consider to use that.
You have to modify these five files in total.
At first you need to add an entry to about_flags.cc, flag_descriptions.cc and flag_descriptions.h. After that, try running the following script which will update enums.xml:
# Updates enums.xml ./tools/metrics/histograms/generate_flag_enums.py --feature <your awesome feature> # Run AboutFlagsHistogramTest.CheckHistograms to verify enums.xml ./out/Default/unit_tests --gtest_filter=AboutFlagsHistogramTest.CheckHistograms # Run AboutFlagsHistogramTest.CheckHistograms on Android to verify enums.xml ./out/Default/bin/run_unit_tests --gtest_filter=AboutFlagsHistogramTest.CheckHistograms
git cl format
which will insert the entries in enums.xml in the correct order and run the tests again. You can refer to this CL as an example.Finally, run the following test.
./out/Default/unit_tests --gtest_filter=AboutFlagsTest.EveryFlagHasMetadata
That test will ask you to update the flag expiry metadata in flag-metadata.json.
When a feature flag is no longer used it should be removed. Once it has reached it's final state it can be removed in stages.
First remove the flag from the UI:
Once there is no way to change the flag value, it's usage can be removed from the code.
Finally, once the flag is no longer referenced, it can be removed from content/ and third_party/blink/