| Index: base/trace_event/trace_config.cc | 
| diff --git a/base/trace_event/trace_config.cc b/base/trace_event/trace_config.cc | 
| index 045c58ff10273979fa015e2e5bc5a139905d6204..d4dc2cc2e4e3594abf9dacc02117c19a6de0fd40 100644 | 
| --- a/base/trace_event/trace_config.cc | 
| +++ b/base/trace_event/trace_config.cc | 
| @@ -47,6 +47,7 @@ const char kSyntheticDelayCategoryFilterPrefix[] = "DELAY("; | 
| // String parameters that is used to parse memory dump config in trace config | 
| // string. | 
| const char kMemoryDumpConfigParam[] = "memory_dump_config"; | 
| +const char kAllowedDumpModesParam[] = "allowed_dump_modes"; | 
| const char kTriggersParam[] = "triggers"; | 
| const char kPeriodicIntervalParam[] = "periodic_interval_ms"; | 
| const char kModeParam[] = "mode"; | 
| @@ -75,6 +76,15 @@ class ConvertableTraceConfigToTraceFormat | 
| const TraceConfig trace_config_; | 
| }; | 
|  | 
| +std::set<MemoryDumpLevelOfDetail> GetDefaultAllowedMemoryDumpModes() { | 
| +  std::set<MemoryDumpLevelOfDetail> all_modes; | 
| +  for (uint32_t mode = static_cast<uint32_t>(MemoryDumpLevelOfDetail::FIRST); | 
| +       mode <= static_cast<uint32_t>(MemoryDumpLevelOfDetail::LAST); mode++) { | 
| +    all_modes.insert(static_cast<MemoryDumpLevelOfDetail>(mode)); | 
| +  } | 
| +  return all_modes; | 
| +} | 
| + | 
| }  // namespace | 
|  | 
|  | 
| @@ -99,6 +109,7 @@ TraceConfig::MemoryDumpConfig::MemoryDumpConfig( | 
| TraceConfig::MemoryDumpConfig::~MemoryDumpConfig() {}; | 
|  | 
| void TraceConfig::MemoryDumpConfig::Clear() { | 
| +  allowed_dump_modes.clear(); | 
| triggers.clear(); | 
| heap_profiler_options.Clear(); | 
| } | 
| @@ -515,9 +526,23 @@ void TraceConfig::AddCategoryToDict(base::DictionaryValue& dict, | 
|  | 
| void TraceConfig::SetMemoryDumpConfigFromConfigDict( | 
| const base::DictionaryValue& memory_dump_config) { | 
| +  // Set allowed dump modes. | 
| +  memory_dump_config_.allowed_dump_modes.clear(); | 
| +  const base::ListValue* allowed_modes_list; | 
| +  if (memory_dump_config.GetList(kAllowedDumpModesParam, &allowed_modes_list)) { | 
| +    for (size_t i = 0; i < allowed_modes_list->GetSize(); ++i) { | 
| +      std::string level_of_detail_str; | 
| +      allowed_modes_list->GetString(i, &level_of_detail_str); | 
| +      memory_dump_config_.allowed_dump_modes.insert( | 
| +          StringToMemoryDumpLevelOfDetail(level_of_detail_str)); | 
| +    } | 
| +  } else { | 
| +    // If allowed modes param is not given then allow all modes by default. | 
| +    memory_dump_config_.allowed_dump_modes = GetDefaultAllowedMemoryDumpModes(); | 
| +  } | 
| + | 
| // Set triggers | 
| memory_dump_config_.triggers.clear(); | 
| - | 
| const base::ListValue* trigger_list = nullptr; | 
| if (memory_dump_config.GetList(kTriggersParam, &trigger_list) && | 
| trigger_list->GetSize() > 0) { | 
| @@ -563,6 +588,7 @@ void TraceConfig::SetDefaultMemoryDumpConfig() { | 
| memory_dump_config_.Clear(); | 
| memory_dump_config_.triggers.push_back(kDefaultHeavyMemoryDumpTrigger); | 
| memory_dump_config_.triggers.push_back(kDefaultLightMemoryDumpTrigger); | 
| +  memory_dump_config_.allowed_dump_modes = GetDefaultAllowedMemoryDumpModes(); | 
| } | 
|  | 
| void TraceConfig::ToDict(base::DictionaryValue& dict) const { | 
| @@ -609,6 +635,15 @@ void TraceConfig::ToDict(base::DictionaryValue& dict) const { | 
| if (IsCategoryEnabled(MemoryDumpManager::kTraceCategory)) { | 
| std::unique_ptr<base::DictionaryValue> memory_dump_config( | 
| new base::DictionaryValue()); | 
| +    std::unique_ptr<base::ListValue> allowed_modes_list(new base::ListValue()); | 
| +    for (MemoryDumpLevelOfDetail dump_mode : | 
| +         memory_dump_config_.allowed_dump_modes) { | 
| +      allowed_modes_list->AppendString( | 
| +          MemoryDumpLevelOfDetailToString(dump_mode)); | 
| +    } | 
| +    memory_dump_config->Set(kAllowedDumpModesParam, | 
| +                            std::move(allowed_modes_list)); | 
| + | 
| std::unique_ptr<base::ListValue> triggers_list(new base::ListValue()); | 
| for (const MemoryDumpConfig::Trigger& config | 
| : memory_dump_config_.triggers) { | 
|  |