cef/libcef/common/cef_crash_report_utils.cc

59 lines
1.5 KiB
C++

// 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 "cef/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