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 16 namespace base { 17 class SequencedTaskRunner; 18 } 19 20 namespace feedback { 21 22 typedef 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. 27 class 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 upload_at()38 const base::Time& upload_at() const { return upload_at_; } data()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