58 lines
1.5 KiB
C++
58 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 "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
|