File: feedback_data.h

package info (click to toggle)
chromium 138.0.7204.157-1
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 6,071,864 kB
  • sloc: cpp: 34,936,859; ansic: 7,176,967; javascript: 4,110,704; python: 1,419,953; asm: 946,768; xml: 739,967; pascal: 187,324; sh: 89,623; perl: 88,663; objc: 79,944; sql: 50,304; cs: 41,786; fortran: 24,137; makefile: 21,806; php: 13,980; tcl: 13,166; yacc: 8,925; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (141 lines) | stat: -rw-r--r-- 4,657 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
// Copyright 2014 The Chromium Authors
// 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 <memory>
#include <string>

#include "base/functional/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"

namespace base {
class RefCountedString;
}

class TracingManager;

namespace feedback {

class FeedbackData : public FeedbackCommon {
 public:
  FeedbackData(base::WeakPtr<feedback::FeedbackUploader> 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);

  // Kicks off compression of the autofill metadata for this instance.
  void CompressAutofillMetadata();

  // 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<base::RefCountedString> 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<feedback::FeedbackUploader> 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_);

  base::WeakPtr<TracingManager> tracing_manager_;
  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_