| Index: base/feature_list_unittest.cc
 | 
| diff --git a/base/feature_list_unittest.cc b/base/feature_list_unittest.cc
 | 
| index 9d1dcb72f3094a963f71d8c889cb483b29a4a99e..189e9740176d14900ed2cddec438b4e9672fe4a1 100644
 | 
| --- a/base/feature_list_unittest.cc
 | 
| +++ b/base/feature_list_unittest.cc
 | 
| @@ -13,6 +13,7 @@
 | 
|  #include "base/macros.h"
 | 
|  #include "base/memory/ptr_util.h"
 | 
|  #include "base/metrics/field_trial.h"
 | 
| +#include "base/metrics/persistent_memory_allocator.h"
 | 
|  #include "base/strings/string_util.h"
 | 
|  #include "base/strings/stringprintf.h"
 | 
|  #include "testing/gtest/include/gtest/gtest.h"
 | 
| @@ -468,4 +469,68 @@ TEST_F(FeatureListTest, UninitializedInstance_IsEnabledReturnsFalse) {
 | 
|    EXPECT_FALSE(FeatureList::IsEnabled(kFeatureOffByDefault));
 | 
|  }
 | 
|  
 | 
| +TEST_F(FeatureListTest, StoreAndRetrieveFeaturesFromSharedMemory) {
 | 
| +  std::unique_ptr<base::FeatureList> feature_list(new base::FeatureList);
 | 
| +
 | 
| +  // Create some overrides.
 | 
| +  feature_list->RegisterOverride(kFeatureOffByDefaultName,
 | 
| +                                 FeatureList::OVERRIDE_ENABLE_FEATURE, nullptr);
 | 
| +  feature_list->RegisterOverride(
 | 
| +      kFeatureOnByDefaultName, FeatureList::OVERRIDE_DISABLE_FEATURE, nullptr);
 | 
| +  feature_list->FinalizeInitialization();
 | 
| +
 | 
| +  // Create an allocator and store the overrides.
 | 
| +  std::unique_ptr<SharedMemory> shm(new SharedMemory());
 | 
| +  shm->CreateAndMapAnonymous(4 << 10);
 | 
| +  SharedPersistentMemoryAllocator allocator(std::move(shm), 1, "", false);
 | 
| +  feature_list->AddFeaturesToAllocator(&allocator);
 | 
| +
 | 
| +  std::unique_ptr<base::FeatureList> feature_list2(new base::FeatureList);
 | 
| +
 | 
| +  // Check that the new feature list is empty.
 | 
| +  EXPECT_FALSE(feature_list2->IsFeatureOverriddenFromCommandLine(
 | 
| +      kFeatureOffByDefaultName, FeatureList::OVERRIDE_ENABLE_FEATURE));
 | 
| +  EXPECT_FALSE(feature_list2->IsFeatureOverriddenFromCommandLine(
 | 
| +      kFeatureOnByDefaultName, FeatureList::OVERRIDE_DISABLE_FEATURE));
 | 
| +
 | 
| +  feature_list2->InitializeFromSharedMemory(&allocator);
 | 
| +  // Check that the new feature list now has 2 overrides.
 | 
| +  EXPECT_TRUE(feature_list2->IsFeatureOverriddenFromCommandLine(
 | 
| +      kFeatureOffByDefaultName, FeatureList::OVERRIDE_ENABLE_FEATURE));
 | 
| +  EXPECT_TRUE(feature_list2->IsFeatureOverriddenFromCommandLine(
 | 
| +      kFeatureOnByDefaultName, FeatureList::OVERRIDE_DISABLE_FEATURE));
 | 
| +}
 | 
| +
 | 
| +TEST_F(FeatureListTest, StoreAndRetrieveAssociatedFeaturesFromSharedMemory) {
 | 
| +  FieldTrialList field_trial_list(nullptr);
 | 
| +  std::unique_ptr<base::FeatureList> feature_list(new base::FeatureList);
 | 
| +
 | 
| +  // Create some overrides.
 | 
| +  FieldTrial* trial1 = FieldTrialList::CreateFieldTrial("TrialExample1", "A");
 | 
| +  FieldTrial* trial2 = FieldTrialList::CreateFieldTrial("TrialExample2", "B");
 | 
| +  feature_list->RegisterFieldTrialOverride(
 | 
| +      kFeatureOnByDefaultName, FeatureList::OVERRIDE_USE_DEFAULT, trial1);
 | 
| +  feature_list->RegisterFieldTrialOverride(
 | 
| +      kFeatureOffByDefaultName, FeatureList::OVERRIDE_USE_DEFAULT, trial2);
 | 
| +  feature_list->FinalizeInitialization();
 | 
| +
 | 
| +  // Create an allocator and store the overrides.
 | 
| +  std::unique_ptr<SharedMemory> shm(new SharedMemory());
 | 
| +  shm->CreateAndMapAnonymous(4 << 10);
 | 
| +  SharedPersistentMemoryAllocator allocator(std::move(shm), 1, "", false);
 | 
| +  feature_list->AddFeaturesToAllocator(&allocator);
 | 
| +
 | 
| +  std::unique_ptr<base::FeatureList> feature_list2(new base::FeatureList);
 | 
| +  feature_list2->InitializeFromSharedMemory(&allocator);
 | 
| +  feature_list2->FinalizeInitialization();
 | 
| +
 | 
| +  // Check that the field trials are still associated.
 | 
| +  FieldTrial* associated_trial1 =
 | 
| +      feature_list2->GetAssociatedFieldTrial(kFeatureOnByDefault);
 | 
| +  FieldTrial* associated_trial2 =
 | 
| +      feature_list2->GetAssociatedFieldTrial(kFeatureOffByDefault);
 | 
| +  EXPECT_EQ(associated_trial1, trial1);
 | 
| +  EXPECT_EQ(associated_trial2, trial2);
 | 
| +}
 | 
| +
 | 
|  }  // namespace base
 | 
| 
 |