// Copyright 2014 The Chromium 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 "components/feedback/feedback_util.h" #include #include "base/bind.h" #include "base/files/file_util.h" #include "base/files/scoped_temp_dir.h" #include "base/strings/string_util.h" #include "components/feedback/feedback_report.h" #include "third_party/zlib/google/zip.h" namespace { constexpr char kMultilineIndicatorString[] = "\n"; constexpr char kMultilineStartString[] = "---------- START ----------\n"; constexpr char kMultilineEndString[] = "---------- END ----------\n\n"; } // namespace namespace feedback_util { bool ZipString(const base::FilePath& filename, const std::string& data, std::string* compressed_logs) { base::ScopedTempDir temp_dir; base::FilePath zip_file; // Create a temporary directory, put the logs into a file in it. Create // another temporary file to receive the zip file in. if (!temp_dir.CreateUniqueTempDir()) return false; if (base::WriteFile(temp_dir.GetPath().Append(filename), data.c_str(), data.size()) == -1) { return false; } bool succeed = base::CreateTemporaryFile(&zip_file) && zip::Zip(temp_dir.GetPath(), zip_file, false) && base::ReadFileToString(zip_file, compressed_logs); base::DeleteFile(zip_file, false); return succeed; } std::string LogsToString(const FeedbackCommon::SystemLogsMap& sys_info) { std::string syslogs_string; for (const auto& iter : sys_info) { std::string key = iter.first; base::TrimString(key, "\n ", &key); if (key == feedback::FeedbackReport::kCrashReportIdsKey || key == feedback::FeedbackReport::kAllCrashReportIdsKey) { // Avoid adding the crash IDs to the system_logs.txt file for privacy // reasons. They should just be part of the product specific data. continue; } std::string value = iter.second; base::TrimString(value, "\n ", &value); if (value.find("\n") != std::string::npos) { syslogs_string.append(key + "=" + kMultilineIndicatorString + kMultilineStartString + value + "\n" + kMultilineEndString); } else { syslogs_string.append(key + "=" + value + "\n"); } } return syslogs_string; } } // namespace feedback_util