• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_DATA_H_
6 #define COMPONENTS_FEEDBACK_FEEDBACK_DATA_H_
7 
8 #include <string>
9 
10 #include "base/callback.h"
11 #include "base/memory/scoped_ptr.h"
12 #include "components/feedback/feedback_common.h"
13 #include "url/gurl.h"
14 
15 namespace base {
16 class FilePath;
17 class RefCountedString;
18 }
19 namespace content {
20 class BrowserContext;
21 }
22 
23 namespace feedback {
24 
25 class FeedbackData : public FeedbackCommon {
26  public:
27   FeedbackData();
28 
29   // Called once we've updated all the data from the feedback page.
30   void OnFeedbackPageDataComplete();
31 
32   // Sets the system information for this instance and kicks off its
33   // compression.
34   void SetAndCompressSystemInfo(scoped_ptr<SystemLogsMap> sys_info);
35 
36   // Sets the histograms for this instance and kicks off its
37   // compression.
38   void SetAndCompressHistograms(scoped_ptr<std::string> histograms);
39 
40   // Sets the attached file data and kicks off its compression.
41   void AttachAndCompressFileData(scoped_ptr<std::string> attached_filedata);
42 
43   // Called once we have compressed our system logs.
44   void OnCompressLogsComplete(scoped_ptr<std::string> compressed_logs);
45 
46   // Called once we have compressed our attached file.
47   void OnCompressFileComplete(scoped_ptr<std::string> compressed_file);
48 
49   // Returns true if we've completed all the tasks needed before we can send
50   // feedback - at this time this is includes getting the feedback page data
51   // and compressing the system logs.
52   bool IsDataComplete();
53 
54   // Sends the feedback report if we have all our data complete.
55   void SendReport();
56 
57   // Getters
context()58   content::BrowserContext* context() const { return context_; }
attached_filename()59   const std::string attached_filename() const { return attached_filename_; }
attached_file_uuid()60   const std::string attached_file_uuid() const { return attached_file_uuid_; }
screenshot_uuid()61   const std::string screenshot_uuid() const { return screenshot_uuid_; }
trace_id()62   int trace_id() const { return trace_id_; }
63 
64   // Setters
set_context(content::BrowserContext * context)65   void set_context(content::BrowserContext* context) { context_ = context; }
set_attached_filename(const std::string & attached_filename)66   void set_attached_filename(const std::string& attached_filename) {
67     attached_filename_ = attached_filename;
68   }
set_attached_file_uuid(const std::string & uuid)69   void set_attached_file_uuid(const std::string& uuid) {
70     attached_file_uuid_ = uuid;
71   }
set_screenshot_uuid(const std::string & uuid)72   void set_screenshot_uuid(const std::string& uuid) {
73     screenshot_uuid_ = uuid;
74   }
set_trace_id(int trace_id)75   void set_trace_id(int trace_id) { trace_id_ = trace_id; }
set_send_report_callback(const base::Callback<void (scoped_refptr<FeedbackData>)> & send_report)76   void set_send_report_callback(
77       const base::Callback<void(scoped_refptr<FeedbackData>)>& send_report) {
78     send_report_ = send_report;
79   }
80 
81  private:
82   virtual ~FeedbackData();
83 
84   // Called once a compression operation is complete.
85   void OnCompressComplete();
86 
87   void OnGetTraceData(int trace_id,
88                       scoped_refptr<base::RefCountedString> trace_data);
89 
90   base::Callback<void(scoped_refptr<FeedbackData>)> send_report_;
91 
92   content::BrowserContext* context_;
93 
94   std::string attached_filename_;
95   std::string attached_file_uuid_;
96   std::string screenshot_uuid_;
97 
98   int trace_id_;
99 
100   int pending_op_count_;
101   bool report_sent_;
102 
103   DISALLOW_COPY_AND_ASSIGN(FeedbackData);
104 };
105 
106 }  // namespace feedback
107 
108 #endif  // COMPONENTS_FEEDBACK_FEEDBACK_DATA_H_
109