• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
profile()65   Profile* profile() const { return profile_; }
category_tag()66   const std::string& category_tag() const { return category_tag_; }
page_url()67   const std::string& page_url() const { return page_url_; }
description()68   const std::string& description() const { return description_; }
user_email()69   const std::string& user_email() const { return user_email_; }
image()70   std::string* image() const { return image_.get(); }
attached_filename()71   const std::string attached_filename() const { return attached_filename_; }
attached_file_uuid()72   const std::string attached_file_uuid() const { return attached_file_uuid_; }
attached_filedata()73   std::string* attached_filedata() const { return attached_filedata_.get(); }
screenshot_uuid()74   const std::string screenshot_uuid() const { return screenshot_uuid_; }
trace_id()75   int trace_id() const { return trace_id_; }
sys_info()76   SystemLogsMap* sys_info() const { return sys_info_.get(); }
compressed_logs()77   std::string* compressed_logs() const { return compressed_logs_.get(); }
histograms()78   std::string* histograms() const { return histograms_.get(); }
compressed_histograms()79   std::string* compressed_histograms() const {
80     return compressed_histograms_.get();
81   }
82 
83   // Setters
set_profile(Profile * profile)84   void set_profile(Profile* profile) { profile_ = profile; }
set_category_tag(const std::string & category_tag)85   void set_category_tag(const std::string& category_tag) {
86     category_tag_ = category_tag;
87   }
set_page_url(const std::string & page_url)88   void set_page_url(const std::string& page_url) { page_url_ = page_url; }
set_description(const std::string & description)89   void set_description(const std::string& description) {
90     description_ = description;
91   }
set_user_email(const std::string & user_email)92   void set_user_email(const std::string& user_email) {
93     user_email_ = user_email;
94   }
set_image(scoped_ptr<std::string> image)95   void set_image(scoped_ptr<std::string> image) { image_ = image.Pass(); }
set_attached_filename(const std::string & attached_filename)96   void set_attached_filename(const std::string& attached_filename) {
97     attached_filename_ = attached_filename;
98   }
set_attached_file_uuid(const std::string & uuid)99   void set_attached_file_uuid(const std::string& uuid) {
100     attached_file_uuid_ = uuid;
101   }
set_screenshot_uuid(const std::string & uuid)102   void set_screenshot_uuid(const std::string& uuid) {
103     screenshot_uuid_ = uuid;
104   }
set_trace_id(int trace_id)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_
147