// 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 "build/build_config.h" #include "components/feedback/feedback_data.h" #include "components/feedback/feedback_uploader.h" #include "components/feedback/feedback_uploader_factory.h" #include "components/feedback/proto/extension.pb.h" #include "third_party/zlib/google/zip.h" using feedback::FeedbackData; namespace feedback_util { void SendReport(scoped_refptr data) { if (!data.get()) { LOG(ERROR) << "SendReport called with NULL data!"; NOTREACHED(); return; } userfeedback::ExtensionSubmit feedback_data; data->PrepareReport(&feedback_data); // This pointer will eventually get deleted by the PostCleanup class, after // we've either managed to successfully upload the report or died trying. std::string post_body; feedback_data.SerializeToString(&post_body); feedback::FeedbackUploader *uploader = feedback::FeedbackUploaderFactory::GetForBrowserContext(data->context()); uploader->QueueReport(post_body); } bool ZipString(const base::FilePath& filename, const std::string& data, std::string* compressed_logs) { base::FilePath temp_path; 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 (!base::CreateNewTempDirectory(base::FilePath::StringType(), &temp_path)) return false; if (base::WriteFile(temp_path.Append(filename), data.c_str(), data.size()) == -1) { return false; } bool succeed = base::CreateTemporaryFile(&zip_file) && zip::Zip(temp_path, zip_file, false) && base::ReadFileToString(zip_file, compressed_logs); base::DeleteFile(temp_path, true); base::DeleteFile(zip_file, false); return succeed; } } // namespace feedback_util