Upstream version 7.35.144.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / feedback / feedback_data.h
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.
4
5 #ifndef CHROME_BROWSER_FEEDBACK_FEEDBACK_DATA_H_
6 #define CHROME_BROWSER_FEEDBACK_FEEDBACK_DATA_H_
7
8 #include <map>
9 #include <string>
10 #include <vector>
11
12 #include "base/memory/ref_counted.h"
13 #include "base/memory/scoped_ptr.h"
14 #include "url/gurl.h"
15
16 namespace base {
17 class FilePath;
18 class RefCountedString;
19 }
20 class Profile;
21
22 class FeedbackData : public base::RefCountedThreadSafe<FeedbackData> {
23  public:
24   typedef std::map<std::string, std::string> SystemLogsMap;
25
26   // Determine if the given feedback value is small enough to not need to
27   // be compressed.
28   static bool BelowCompressionThreshold(const std::string& content);
29
30   FeedbackData();
31
32   // Called once we've updated all the data from the feedback page.
33   void OnFeedbackPageDataComplete();
34
35   // Sets the system information for this instance and kicks off its
36   // compression.
37   void SetAndCompressSystemInfo(scoped_ptr<SystemLogsMap> sys_info);
38
39   // Sets the histograms for this instance and kicks off its
40   // compression.
41   void SetAndCompressHistograms(scoped_ptr<std::string> histograms);
42
43   // Sets the attached file data and kicks off its compression.
44   void AttachAndCompressFileData(scoped_ptr<std::string> attached_filedata);
45
46   // Called once we have compressed our system logs.
47   void OnCompressLogsComplete(scoped_ptr<std::string> compressed_logs);
48
49   // Called once we have compressed our histograms.
50   void OnCompressHistogramsComplete(
51       scoped_ptr<std::string> compressed_histograms);
52
53   // Called once we have compressed our attached file.
54   void OnCompressFileComplete(scoped_ptr<std::string> compressed_file);
55
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();
60
61   // Sends the feedback report if we have all our data complete.
62   void SendReport();
63
64   // Getters
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();
81   }
82
83   // Setters
84   void set_profile(Profile* profile) { profile_ = profile; }
85   void set_category_tag(const std::string& category_tag) {
86     category_tag_ = category_tag;
87   }
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;
91   }
92   void set_user_email(const std::string& user_email) {
93     user_email_ = user_email;
94   }
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;
98   }
99   void set_attached_file_uuid(const std::string& uuid) {
100     attached_file_uuid_ = uuid;
101   }
102   void set_screenshot_uuid(const std::string& uuid) {
103     screenshot_uuid_ = uuid;
104   }
105   void set_trace_id(int trace_id) { trace_id_ = trace_id; }
106
107  private:
108   friend class base::RefCountedThreadSafe<FeedbackData>;
109
110   virtual ~FeedbackData();
111
112   void OnGetTraceData(int trace_id,
113                       scoped_refptr<base::RefCountedString> trace_data);
114
115   Profile* profile_;
116
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_;
124
125   std::string attached_file_uuid_;
126   std::string screenshot_uuid_;
127
128   int trace_id_;
129
130   scoped_ptr<SystemLogsMap> sys_info_;
131   scoped_ptr<std::string> compressed_logs_;
132
133   scoped_ptr<std::string> histograms_;
134   scoped_ptr<std::string> compressed_histograms_;
135
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_;
141   bool report_sent_;
142
143   DISALLOW_COPY_AND_ASSIGN(FeedbackData);
144 };
145
146 #endif  // CHROME_BROWSER_FEEDBACK_FEEDBACK_DATA_H_