Index: base/trace_event/trace_config.cc |
diff --git a/base/trace_event/trace_config.cc b/base/trace_event/trace_config.cc |
index d60c08124d29be4e5e65395eabec108da00cade8..c2c7ad792278ba34040f1c8d74720651e3d88309 100644 |
--- a/base/trace_event/trace_config.cc |
+++ b/base/trace_event/trace_config.cc |
@@ -105,6 +105,10 @@ TraceConfig::TraceConfig(const std::string& category_filter_string, |
InitializeFromStrings(category_filter_string, trace_options_string); |
} |
+TraceConfig::TraceConfig(const DictionaryValue& config) { |
+ InitializeFromConfigDict(config); |
+} |
+ |
TraceConfig::TraceConfig(const std::string& config_string) { |
if (!config_string.empty()) |
InitializeFromConfigString(config_string); |
@@ -288,18 +292,10 @@ void TraceConfig::InitializeDefault() { |
excluded_categories_.push_back("*Test"); |
} |
-void TraceConfig::InitializeFromConfigString(const std::string& config_string) { |
- scoped_ptr<base::Value> value(base::JSONReader::Read(config_string)); |
- if (!value || !value->IsType(base::Value::TYPE_DICTIONARY)) { |
- InitializeDefault(); |
- return; |
- } |
- scoped_ptr<base::DictionaryValue> dict( |
- static_cast<base::DictionaryValue*>(value.release())); |
- |
+void TraceConfig::InitializeFromConfigDict(const DictionaryValue& dict) { |
record_mode_ = RECORD_UNTIL_FULL; |
std::string record_mode; |
- if (dict->GetString(kRecordModeParam, &record_mode)) { |
+ if (dict.GetString(kRecordModeParam, &record_mode)) { |
if (record_mode == kRecordUntilFull) { |
record_mode_ = RECORD_UNTIL_FULL; |
} else if (record_mode == kRecordContinuously) { |
@@ -312,42 +308,57 @@ void TraceConfig::InitializeFromConfigString(const std::string& config_string) { |
} |
bool enable_sampling; |
- if (!dict->GetBoolean(kEnableSamplingParam, &enable_sampling)) |
+ if (!dict.GetBoolean(kEnableSamplingParam, &enable_sampling)) |
enable_sampling_ = false; |
else |
enable_sampling_ = enable_sampling; |
bool enable_systrace; |
- if (!dict->GetBoolean(kEnableSystraceParam, &enable_systrace)) |
+ if (!dict.GetBoolean(kEnableSystraceParam, &enable_systrace)) |
enable_systrace_ = false; |
else |
enable_systrace_ = enable_systrace; |
bool enable_argument_filter; |
- if (!dict->GetBoolean(kEnableArgumentFilterParam, &enable_argument_filter)) |
+ if (!dict.GetBoolean(kEnableArgumentFilterParam, &enable_argument_filter)) |
enable_argument_filter_ = false; |
else |
enable_argument_filter_ = enable_argument_filter; |
- base::ListValue* category_list = nullptr; |
- if (dict->GetList(kIncludedCategoriesParam, &category_list)) |
+ const base::ListValue* category_list = nullptr; |
+ if (dict.GetList(kIncludedCategoriesParam, &category_list)) |
SetCategoriesFromIncludedList(*category_list); |
- if (dict->GetList(kExcludedCategoriesParam, &category_list)) |
+ if (dict.GetList(kExcludedCategoriesParam, &category_list)) |
SetCategoriesFromExcludedList(*category_list); |
- if (dict->GetList(kSyntheticDelaysParam, &category_list)) |
+ if (dict.GetList(kSyntheticDelaysParam, &category_list)) |
SetSyntheticDelaysFromList(*category_list); |
if (IsCategoryEnabled(MemoryDumpManager::kTraceCategory)) { |
// If dump triggers not set, the client is using the legacy with just |
// category enabled. So, use the default periodic dump config. |
- base::DictionaryValue* memory_dump_config = nullptr; |
- if (dict->GetDictionary(kMemoryDumpConfigParam, &memory_dump_config)) |
+ const base::DictionaryValue* memory_dump_config = nullptr; |
+ if (dict.GetDictionary(kMemoryDumpConfigParam, &memory_dump_config)) |
SetMemoryDumpConfig(*memory_dump_config); |
else |
SetDefaultMemoryDumpConfig(); |
} |
} |
+void TraceConfig::InitializeFromConfigString(const std::string& config_string) { |
+ scoped_ptr<Value> value(JSONReader::Read(config_string)); |
+ if (!value) |
+ return InitializeDefault(); |
+ |
+ const DictionaryValue* dict = nullptr; |
+ bool is_dict = value->GetAsDictionary(&dict); |
+ |
+ if (!is_dict) |
+ return InitializeDefault(); |
+ |
+ DCHECK(dict); |
+ InitializeFromConfigDict(*dict); |
+} |
+ |
void TraceConfig::InitializeFromStrings( |
const std::string& category_filter_string, |
const std::string& trace_options_string) { |