1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef COMPONENTS_FEEDBACK_FEEDBACK_REPORT_H_ 6#define COMPONENTS_FEEDBACK_FEEDBACK_REPORT_H_ 7 8#include <string> 9 10#include "base/basictypes.h" 11#include "base/callback_forward.h" 12#include "base/files/file_path.h" 13#include "base/memory/ref_counted.h" 14#include "base/time/time.h" 15 16namespace base { 17class SequencedTaskRunner; 18} 19 20namespace feedback { 21 22typedef base::Callback<void(const std::string&)> QueueCallback; 23 24// This class holds a feedback report. Once a report is created, a disk backup 25// for it is created automatically. This backup needs to explicitly be 26// deleted by calling DeleteReportOnDisk. 27class FeedbackReport : public base::RefCounted<FeedbackReport> { 28 public: 29 FeedbackReport(const base::FilePath& path, 30 const base::Time& upload_at, 31 const std::string& data, 32 scoped_refptr<base::SequencedTaskRunner> task_runner); 33 34 // Stops the disk write of the report and deletes the report file if already 35 // written. 36 void DeleteReportOnDisk(); 37 38 const base::Time& upload_at() const { return upload_at_; } 39 const std::string& data() const { return data_; } 40 41 // Loads the reports still on disk and queues then using the given callback. 42 // This call blocks on the file reads. 43 static void LoadReportsAndQueue(const base::FilePath& user_dir, 44 QueueCallback callback); 45 46 private: 47 friend class base::RefCounted<FeedbackReport>; 48 virtual ~FeedbackReport(); 49 50 // Name of the file corresponding to this report. 51 base::FilePath file_; 52 53 base::FilePath reports_path_; 54 base::Time upload_at_; // Upload this report at or after this time. 55 std::string data_; 56 57 scoped_refptr<base::SequencedTaskRunner> reports_task_runner_; 58 59 DISALLOW_COPY_AND_ASSIGN(FeedbackReport); 60}; 61 62} // namespace feedback 63 64#endif // COMPONENTS_FEEDBACK_FEEDBACK_REPORT_H_ 65