// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef COMPONENTS_FEEDBACK_FEEDBACK_DATA_H_ #define COMPONENTS_FEEDBACK_FEEDBACK_DATA_H_ #include #include #include #include "base/memory/ref_counted.h" #include "base/memory/scoped_ptr.h" #include "url/gurl.h" namespace base { class FilePath; class RefCountedString; } namespace content { class BrowserContext; } namespace feedback { class FeedbackData : public base::RefCountedThreadSafe { public: typedef std::map SystemLogsMap; // Determine if the given feedback value is small enough to not need to // be compressed. static bool BelowCompressionThreshold(const std::string& content); FeedbackData(); // Called once we've updated all the data from the feedback page. void OnFeedbackPageDataComplete(); // Sets the system information for this instance and kicks off its // compression. void SetAndCompressSystemInfo(scoped_ptr sys_info); // Sets the histograms for this instance and kicks off its // compression. void SetAndCompressHistograms(scoped_ptr histograms); // Sets the attached file data and kicks off its compression. void AttachAndCompressFileData(scoped_ptr attached_filedata); // Called once we have compressed our system logs. void OnCompressLogsComplete(scoped_ptr compressed_logs); // Called once we have compressed our histograms. void OnCompressHistogramsComplete( scoped_ptr compressed_histograms); // Called once we have compressed our attached file. void OnCompressFileComplete(scoped_ptr compressed_file); // Returns true if we've completed all the tasks needed before we can send // feedback - at this time this is includes getting the feedback page data // and compressing the system logs. bool IsDataComplete(); // Sends the feedback report if we have all our data complete. void SendReport(); // Getters content::BrowserContext* context() const { return context_; } const std::string& category_tag() const { return category_tag_; } const std::string& page_url() const { return page_url_; } const std::string& description() const { return description_; } const std::string& user_email() const { return user_email_; } std::string* image() const { return image_.get(); } const std::string attached_filename() const { return attached_filename_; } const std::string attached_file_uuid() const { return attached_file_uuid_; } std::string* attached_filedata() const { return attached_filedata_.get(); } const std::string screenshot_uuid() const { return screenshot_uuid_; } int trace_id() const { return trace_id_; } SystemLogsMap* sys_info() const { return sys_info_.get(); } std::string* compressed_logs() const { return compressed_logs_.get(); } std::string* histograms() const { return histograms_.get(); } std::string* compressed_histograms() const { return compressed_histograms_.get(); } std::string user_agent() const { return user_agent_; } std::string locale() const { return locale_; } // Setters void set_context(content::BrowserContext* context) { context_ = context; } void set_category_tag(const std::string& category_tag) { category_tag_ = category_tag; } void set_page_url(const std::string& page_url) { page_url_ = page_url; } void set_description(const std::string& description) { description_ = description; } void set_user_email(const std::string& user_email) { user_email_ = user_email; } void set_image(scoped_ptr image) { image_ = image.Pass(); } void set_attached_filename(const std::string& attached_filename) { attached_filename_ = attached_filename; } void set_attached_file_uuid(const std::string& uuid) { attached_file_uuid_ = uuid; } void set_screenshot_uuid(const std::string& uuid) { screenshot_uuid_ = uuid; } void set_trace_id(int trace_id) { trace_id_ = trace_id; } void set_user_agent(const std::string& user_agent) { user_agent_ = user_agent; } void set_locale(const std::string& locale) { locale_ = locale; } private: friend class base::RefCountedThreadSafe; virtual ~FeedbackData(); void OnGetTraceData(int trace_id, scoped_refptr trace_data); content::BrowserContext* context_; std::string category_tag_; std::string page_url_; std::string description_; std::string user_email_; scoped_ptr image_; std::string attached_filename_; scoped_ptr attached_filedata_; std::string user_agent_; std::string locale_; std::string attached_file_uuid_; std::string screenshot_uuid_; int trace_id_; scoped_ptr sys_info_; scoped_ptr compressed_logs_; scoped_ptr histograms_; scoped_ptr compressed_histograms_; // TODO(rkc): Refactor compressing logic into a simpler common implementation. bool feedback_page_data_complete_; bool syslogs_compression_complete_; bool histograms_compression_complete_; bool attached_file_compression_complete_; bool report_sent_; DISALLOW_COPY_AND_ASSIGN(FeedbackData); }; } // namespace feedback #endif // COMPONENTS_FEEDBACK_FEEDBACK_DATA_H_