// Copyright 2018 The Chromium Embedded Framework 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 "libcef/common/cef_crash_report_utils.h" #include "base/strings/string_split.h" namespace crash_report_utils { ParameterMap FilterParameters(const ParameterMap& parameters) { ParameterMap in_map = parameters; // Extract the key map, if any. Must match the logic in // CefCrashReporterClient::ReadCrashConfigFile. std::string key_map; for (size_t i = 0; true; ++i) { const std::string& key = "K-" + std::string(1, 'A' + i); ParameterMap::iterator it = in_map.find(key); if (it == in_map.end()) { break; } key_map += it->second; in_map.erase(it); } if (key_map.empty()) { // Nothing to substitute. return parameters; } // Parse |key_map|. base::StringPairs kv_pairs; if (!base::SplitStringIntoKeyValuePairs(key_map, '=', ',', &kv_pairs)) { return parameters; } ParameterMap subs; for (const auto& pairs : kv_pairs) { subs.insert(std::make_pair(pairs.first, pairs.second)); } ParameterMap out_map; // Perform key substitutions. for (const auto& params : in_map) { std::string key = params.first; ParameterMap::const_iterator subs_it = subs.find(params.first); if (subs_it != subs.end()) { key = subs_it->second; } out_map.insert(std::make_pair(key, params.second)); } return out_map; } } // namespace crash_report_utils