// 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 "base/callback.h" #include "base/memory/raw_ptr.h" #include "base/memory/weak_ptr.h" #include "base/sequence_checker.h" #include "components/feedback/feedback_common.h" #include "components/feedback/feedback_uploader.h" #include "url/gurl.h" namespace base { class RefCountedString; } class TracingManager; namespace feedback { class FeedbackData : public FeedbackCommon { public: FeedbackData(base::WeakPtr uploader, TracingManager* tracing_manager); FeedbackData(const FeedbackData&) = delete; FeedbackData& operator=(const FeedbackData&) = delete; // Called once we've updated all the data from the feedback page. void OnFeedbackPageDataComplete(); // Kicks off compression of the system information for this instance. void CompressSystemInfo(); // Sets the histograms for this instance and kicks off its // compression. void SetAndCompressHistograms(std::string histograms); // Sets the attached file data and kicks off its compression. void AttachAndCompressFileData(std::string attached_filedata); // 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 const std::string& attached_filename() const { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); return attached_filename_; } const std::string& attached_file_uuid() const { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); return attached_file_uuid_; } const std::string& screenshot_uuid() const { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); return screenshot_uuid_; } int trace_id() const { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); return trace_id_; } bool from_assistant() const { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); return from_assistant_; } bool assistant_debug_info_allowed() const { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); return assistant_debug_info_allowed_; } // Setters void set_attached_filename(const std::string& attached_filename) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); attached_filename_ = attached_filename; } void set_attached_file_uuid(const std::string& uuid) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); attached_file_uuid_ = uuid; } void set_screenshot_uuid(const std::string& uuid) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); screenshot_uuid_ = uuid; } void set_trace_id(int trace_id) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); trace_id_ = trace_id; } void set_from_assistant(bool from_assistant) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); from_assistant_ = from_assistant; } void set_assistant_debug_info_allowed(bool assistant_debug_info_allowed) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); assistant_debug_info_allowed_ = assistant_debug_info_allowed; } private: ~FeedbackData() override; // Called once a compression operation is complete. void OnCompressComplete(); void OnGetTraceData(int trace_id, scoped_refptr trace_data); SEQUENCE_CHECKER(sequence_checker_); // The uploader_ is tied to a profile. When the profile is deleted, the // uploader_ will be destroyed. base::WeakPtr uploader_; std::string attached_filename_ GUARDED_BY_CONTEXT(sequence_checker_); std::string attached_file_uuid_ GUARDED_BY_CONTEXT(sequence_checker_); std::string screenshot_uuid_ GUARDED_BY_CONTEXT(sequence_checker_); const raw_ptr tracing_manager_ = nullptr; // Not owned. int trace_id_ GUARDED_BY_CONTEXT(sequence_checker_) = 0; int pending_op_count_ GUARDED_BY_CONTEXT(sequence_checker_) = 1; bool report_sent_ GUARDED_BY_CONTEXT(sequence_checker_) = false; bool from_assistant_ GUARDED_BY_CONTEXT(sequence_checker_) = false; bool assistant_debug_info_allowed_ GUARDED_BY_CONTEXT(sequence_checker_) = false; }; } // namespace feedback #endif // COMPONENTS_FEEDBACK_FEEDBACK_DATA_H_