1 // Copyright (c) 2012 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.
5 #ifndef CHROME_BROWSER_FEEDBACK_FEEDBACK_DATA_H_
6 #define CHROME_BROWSER_FEEDBACK_FEEDBACK_DATA_H_
12 #include "base/memory/ref_counted.h"
13 #include "base/memory/scoped_ptr.h"
18 class RefCountedString
;
22 class FeedbackData
: public base::RefCountedThreadSafe
<FeedbackData
> {
24 typedef std::map
<std::string
, std::string
> SystemLogsMap
;
26 // Determine if the given feedback value is small enough to not need to
28 static bool BelowCompressionThreshold(const std::string
& content
);
32 // Called once we've updated all the data from the feedback page.
33 void OnFeedbackPageDataComplete();
35 // Sets the system information for this instance and kicks off its
37 void SetAndCompressSystemInfo(scoped_ptr
<SystemLogsMap
> sys_info
);
39 // Sets the histograms for this instance and kicks off its
41 void SetAndCompressHistograms(scoped_ptr
<std::string
> histograms
);
43 // Sets the attached file data and kicks off its compression.
44 void AttachAndCompressFileData(scoped_ptr
<std::string
> attached_filedata
);
46 // Called once we have compressed our system logs.
47 void OnCompressLogsComplete(scoped_ptr
<std::string
> compressed_logs
);
49 // Called once we have compressed our histograms.
50 void OnCompressHistogramsComplete(
51 scoped_ptr
<std::string
> compressed_histograms
);
53 // Called once we have compressed our attached file.
54 void OnCompressFileComplete(scoped_ptr
<std::string
> compressed_file
);
56 // Returns true if we've completed all the tasks needed before we can send
57 // feedback - at this time this is includes getting the feedback page data
58 // and compressing the system logs.
59 bool IsDataComplete();
61 // Sends the feedback report if we have all our data complete.
65 Profile
* profile() const { return profile_
; }
66 const std::string
& category_tag() const { return category_tag_
; }
67 const std::string
& page_url() const { return page_url_
; }
68 const std::string
& description() const { return description_
; }
69 const std::string
& user_email() const { return user_email_
; }
70 std::string
* image() const { return image_
.get(); }
71 const std::string
attached_filename() const { return attached_filename_
; }
72 const std::string
attached_file_uuid() const { return attached_file_uuid_
; }
73 std::string
* attached_filedata() const { return attached_filedata_
.get(); }
74 const std::string
screenshot_uuid() const { return screenshot_uuid_
; }
75 int trace_id() const { return trace_id_
; }
76 SystemLogsMap
* sys_info() const { return sys_info_
.get(); }
77 std::string
* compressed_logs() const { return compressed_logs_
.get(); }
78 std::string
* histograms() const { return histograms_
.get(); }
79 std::string
* compressed_histograms() const {
80 return compressed_histograms_
.get();
84 void set_profile(Profile
* profile
) { profile_
= profile
; }
85 void set_category_tag(const std::string
& category_tag
) {
86 category_tag_
= category_tag
;
88 void set_page_url(const std::string
& page_url
) { page_url_
= page_url
; }
89 void set_description(const std::string
& description
) {
90 description_
= description
;
92 void set_user_email(const std::string
& user_email
) {
93 user_email_
= user_email
;
95 void set_image(scoped_ptr
<std::string
> image
) { image_
= image
.Pass(); }
96 void set_attached_filename(const std::string
& attached_filename
) {
97 attached_filename_
= attached_filename
;
99 void set_attached_file_uuid(const std::string
& uuid
) {
100 attached_file_uuid_
= uuid
;
102 void set_screenshot_uuid(const std::string
& uuid
) {
103 screenshot_uuid_
= uuid
;
105 void set_trace_id(int trace_id
) { trace_id_
= trace_id
; }
108 friend class base::RefCountedThreadSafe
<FeedbackData
>;
110 virtual ~FeedbackData();
112 void OnGetTraceData(int trace_id
,
113 scoped_refptr
<base::RefCountedString
> trace_data
);
117 std::string category_tag_
;
118 std::string page_url_
;
119 std::string description_
;
120 std::string user_email_
;
121 scoped_ptr
<std::string
> image_
;
122 std::string attached_filename_
;
123 scoped_ptr
<std::string
> attached_filedata_
;
125 std::string attached_file_uuid_
;
126 std::string screenshot_uuid_
;
130 scoped_ptr
<SystemLogsMap
> sys_info_
;
131 scoped_ptr
<std::string
> compressed_logs_
;
133 scoped_ptr
<std::string
> histograms_
;
134 scoped_ptr
<std::string
> compressed_histograms_
;
136 // TODO(rkc): Refactor compressing logic into a simpler common implementation.
137 bool feedback_page_data_complete_
;
138 bool syslogs_compression_complete_
;
139 bool histograms_compression_complete_
;
140 bool attached_file_compression_complete_
;
143 DISALLOW_COPY_AND_ASSIGN(FeedbackData
);
146 #endif // CHROME_BROWSER_FEEDBACK_FEEDBACK_DATA_H_