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.
5 #ifndef COMPONENTS_FEEDBACK_FEEDBACK_DATA_H_
6 #define COMPONENTS_FEEDBACK_FEEDBACK_DATA_H_
12 #include "base/memory/ref_counted.h"
13 #include "base/memory/scoped_ptr.h"
18 class RefCountedString
;
26 class FeedbackData
: public base::RefCountedThreadSafe
<FeedbackData
> {
28 typedef std::map
<std::string
, std::string
> SystemLogsMap
;
30 // Determine if the given feedback value is small enough to not need to
32 static bool BelowCompressionThreshold(const std::string
& content
);
36 // Called once we've updated all the data from the feedback page.
37 void OnFeedbackPageDataComplete();
39 // Sets the system information for this instance and kicks off its
41 void SetAndCompressSystemInfo(scoped_ptr
<SystemLogsMap
> sys_info
);
43 // Sets the histograms for this instance and kicks off its
45 void SetAndCompressHistograms(scoped_ptr
<std::string
> histograms
);
47 // Sets the attached file data and kicks off its compression.
48 void AttachAndCompressFileData(scoped_ptr
<std::string
> attached_filedata
);
50 // Called once we have compressed our system logs.
51 void OnCompressLogsComplete(scoped_ptr
<std::string
> compressed_logs
);
53 // Called once we have compressed our histograms.
54 void OnCompressHistogramsComplete(
55 scoped_ptr
<std::string
> compressed_histograms
);
57 // Called once we have compressed our attached file.
58 void OnCompressFileComplete(scoped_ptr
<std::string
> compressed_file
);
60 // Returns true if we've completed all the tasks needed before we can send
61 // feedback - at this time this is includes getting the feedback page data
62 // and compressing the system logs.
63 bool IsDataComplete();
65 // Sends the feedback report if we have all our data complete.
69 content::BrowserContext
* context() const { return context_
; }
70 const std::string
& category_tag() const { return category_tag_
; }
71 const std::string
& page_url() const { return page_url_
; }
72 const std::string
& description() const { return description_
; }
73 const std::string
& user_email() const { return user_email_
; }
74 std::string
* image() const { return image_
.get(); }
75 const std::string
attached_filename() const { return attached_filename_
; }
76 const std::string
attached_file_uuid() const { return attached_file_uuid_
; }
77 std::string
* attached_filedata() const { return attached_filedata_
.get(); }
78 const std::string
screenshot_uuid() const { return screenshot_uuid_
; }
79 int trace_id() const { return trace_id_
; }
80 SystemLogsMap
* sys_info() const { return sys_info_
.get(); }
81 std::string
* compressed_logs() const { return compressed_logs_
.get(); }
82 std::string
* histograms() const { return histograms_
.get(); }
83 std::string
* compressed_histograms() const {
84 return compressed_histograms_
.get();
86 std::string
user_agent() const { return user_agent_
; }
87 std::string
locale() const { return locale_
; }
90 void set_context(content::BrowserContext
* context
) { context_
= context
; }
91 void set_category_tag(const std::string
& category_tag
) {
92 category_tag_
= category_tag
;
94 void set_page_url(const std::string
& page_url
) { page_url_
= page_url
; }
95 void set_description(const std::string
& description
) {
96 description_
= description
;
98 void set_user_email(const std::string
& user_email
) {
99 user_email_
= user_email
;
101 void set_image(scoped_ptr
<std::string
> image
) { image_
= image
.Pass(); }
102 void set_attached_filename(const std::string
& attached_filename
) {
103 attached_filename_
= attached_filename
;
105 void set_attached_file_uuid(const std::string
& uuid
) {
106 attached_file_uuid_
= uuid
;
108 void set_screenshot_uuid(const std::string
& uuid
) {
109 screenshot_uuid_
= uuid
;
111 void set_trace_id(int trace_id
) { trace_id_
= trace_id
; }
112 void set_user_agent(const std::string
& user_agent
) {
113 user_agent_
= user_agent
;
115 void set_locale(const std::string
& locale
) { locale_
= locale
; }
118 friend class base::RefCountedThreadSafe
<FeedbackData
>;
120 virtual ~FeedbackData();
122 void OnGetTraceData(int trace_id
,
123 scoped_refptr
<base::RefCountedString
> trace_data
);
125 content::BrowserContext
* context_
;
127 std::string category_tag_
;
128 std::string page_url_
;
129 std::string description_
;
130 std::string user_email_
;
131 scoped_ptr
<std::string
> image_
;
132 std::string attached_filename_
;
133 scoped_ptr
<std::string
> attached_filedata_
;
134 std::string user_agent_
;
137 std::string attached_file_uuid_
;
138 std::string screenshot_uuid_
;
142 scoped_ptr
<SystemLogsMap
> sys_info_
;
143 scoped_ptr
<std::string
> compressed_logs_
;
145 scoped_ptr
<std::string
> histograms_
;
146 scoped_ptr
<std::string
> compressed_histograms_
;
148 // TODO(rkc): Refactor compressing logic into a simpler common implementation.
149 bool feedback_page_data_complete_
;
150 bool syslogs_compression_complete_
;
151 bool histograms_compression_complete_
;
152 bool attached_file_compression_complete_
;
155 DISALLOW_COPY_AND_ASSIGN(FeedbackData
);
158 } // namespace feedback
160 #endif // COMPONENTS_FEEDBACK_FEEDBACK_DATA_H_