Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(446)

Side by Side Diff: chrome/browser/media/webrtc_log_uploader.h

Issue 2307083002: Cleanup: move WebRTC related files from chrome/browser/media to chrome/browser/media/webrtc/ (Closed)
Patch Set: Removed file wrongly resuscitated during rebase Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « chrome/browser/media/webrtc_log_list.cc ('k') | chrome/browser/media/webrtc_log_uploader.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2013 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_MEDIA_WEBRTC_LOG_UPLOADER_H_
6 #define CHROME_BROWSER_MEDIA_WEBRTC_LOG_UPLOADER_H_
7
8 #include <stdint.h>
9
10 #include <map>
11 #include <string>
12 #include <vector>
13
14 #include "base/gtest_prod_util.h"
15 #include "base/macros.h"
16 #include "base/threading/thread_checker.h"
17 #include "chrome/browser/media/webrtc_logging_handler_host.h"
18 #include "net/url_request/url_fetcher_delegate.h"
19
20 class Profile;
21
22 namespace base {
23 class SharedMemory;
24 }
25
26 namespace net {
27 class URLFetcher;
28 }
29
30 typedef struct z_stream_s z_stream;
31
32 // Used when uploading is done to perform post-upload actions. |log_path| is
33 // also used pre-upload.
34 struct WebRtcLogUploadDoneData : public WebRtcLogPaths {
35 WebRtcLogUploadDoneData();
36 WebRtcLogUploadDoneData(const WebRtcLogUploadDoneData& other);
37 ~WebRtcLogUploadDoneData();
38
39 WebRtcLoggingHandlerHost::UploadDoneCallback callback;
40 scoped_refptr<WebRtcLoggingHandlerHost> host;
41 std::string local_log_id;
42 };
43
44 // WebRtcLogUploader uploads WebRTC logs, keeps count of how many logs have
45 // been started and denies further logs if a limit is reached. It also adds
46 // the timestamp and report ID of the uploded log to a text file. There must
47 // only be one object of this type.
48 class WebRtcLogUploader : public net::URLFetcherDelegate {
49 public:
50 WebRtcLogUploader();
51 ~WebRtcLogUploader() override;
52
53 // Returns true is number of logs limit is not reached yet. Increases log
54 // count if true is returned. Must be called before UploadLog().
55 bool ApplyForStartLogging();
56
57 // Notifies that logging has stopped and that the log should not be uploaded.
58 // Decreases log count. May only be called if permission to log has been
59 // granted by calling ApplyForStartLogging() and getting true in return.
60 // After this function has been called, a new permission must be granted.
61 // Call either this function or LoggingStoppedDoUpload().
62 void LoggingStoppedDontUpload();
63
64 // Notifies that that logging has stopped and that the log should be uploaded.
65 // Decreases log count. May only be called if permission to log has been
66 // granted by calling ApplyForStartLogging() and getting true in return. After
67 // this function has been called, a new permission must be granted. Call
68 // either this function or LoggingStoppedDontUpload().
69 // |upload_done_data.local_log_id| is set and used internally and should be
70 // left empty.
71 void LoggingStoppedDoUpload(std::unique_ptr<WebRtcLogBuffer> log_buffer,
72 std::unique_ptr<MetaDataMap> meta_data,
73 const WebRtcLogUploadDoneData& upload_done_data);
74
75 // Uploads a previously stored log (see LoggingStoppedDoStore()).
76 void UploadStoredLog(const WebRtcLogUploadDoneData& upload_data);
77
78 // Similarly to LoggingStoppedDoUpload(), we store the log in compressed
79 // format on disk but add the option to specify a unique |log_id| for later
80 // identification and potential upload.
81 void LoggingStoppedDoStore(
82 const WebRtcLogPaths& log_paths,
83 const std::string& log_id,
84 std::unique_ptr<WebRtcLogBuffer> log_buffer,
85 std::unique_ptr<MetaDataMap> meta_data,
86 const WebRtcLoggingHandlerHost::GenericDoneCallback& done_callback);
87
88 // Cancels URL fetcher operation by deleting all URL fetchers. This cancels
89 // any pending uploads and releases SystemURLRequestContextGetter references.
90 // Sets |shutting_down_| which prevent new fetchers to be created.
91 void StartShutdown();
92
93 // For testing purposes. If called, the multipart will not be uploaded, but
94 // written to |post_data_| instead.
95 void OverrideUploadWithBufferForTesting(std::string* post_data) {
96 DCHECK((post_data && !post_data_) || (!post_data && post_data_));
97 post_data_ = post_data;
98 }
99
100 private:
101 FRIEND_TEST_ALL_PREFIXES(WebRtcLogUploaderTest,
102 AddLocallyStoredLogInfoToUploadListFile);
103 FRIEND_TEST_ALL_PREFIXES(WebRtcLogUploaderTest,
104 AddUploadedLogInfoToUploadListFile);
105
106 // net::URLFetcherDelegate implementation.
107 void OnURLFetchComplete(const net::URLFetcher* source) override;
108 void OnURLFetchUploadProgress(const net::URLFetcher* source,
109 int64_t current,
110 int64_t total) override;
111
112 // Sets up a multipart body to be uploaded. The body is produced according
113 // to RFC 2046.
114 void SetupMultipart(std::string* post_data,
115 const std::string& compressed_log,
116 const base::FilePath& incoming_rtp_dump,
117 const base::FilePath& outgoing_rtp_dump,
118 const std::map<std::string, std::string>& meta_data);
119
120 void CompressLog(std::string* compressed_log,
121 WebRtcLogBuffer* buffer);
122
123 void ResizeForNextOutput(std::string* compressed_log,
124 z_stream* stream);
125
126 void UploadCompressedLog(const WebRtcLogUploadDoneData& upload_done_data,
127 std::unique_ptr<std::string> post_data);
128
129 // A couple of helper functions due to having to hop to the UI thread
130 // to fetch the system_request_context and back again to the IO thread.
131 void SetRequestContextOnUIThread(
132 net::URLFetcher* url_fetcher, const WebRtcLogUploadDoneData& data);
133 void StartAndTrackRequestContext(
134 net::URLFetcher* url_fetcher, const WebRtcLogUploadDoneData& data);
135
136 void DecreaseLogCount();
137
138 void ShutdownOnIOThread();
139
140 // Must be called on the FILE thread.
141 void WriteCompressedLogToFile(const std::string& compressed_log,
142 const base::FilePath& log_file_path);
143
144 void PrepareMultipartPostData(
145 const std::string& compressed_log,
146 std::unique_ptr<MetaDataMap> meta_data,
147 const WebRtcLogUploadDoneData& upload_done_data);
148
149 // Append information (upload time, report ID and local ID) about a log to a
150 // log list file, limited to |kLogListLimitLines| entries. This list is used
151 // for viewing the logs under chrome://webrtc-logs, see WebRtcLogUploadList.
152 // The list has the format
153 // upload_time,report_id,local_id
154 // upload_time,report_id,local_id
155 // etc.
156 // where each line represents a log. "upload_time" is the time when the log
157 // was uploaded in Unix time. "report_id" is the ID reported back by the
158 // server. "local_id" is the ID for the locally stored log. It's the time
159 // stored in Unix time and it's also used as file name.
160 // AddLocallyStoredLogInfoToUploadListFile() will first be called,
161 // "upload_time" and "report_id" is the left empty in the entry written to the
162 // list file. If uploading is successful, AddUploadedLogInfoToUploadListFile()
163 // is called and those empty items are filled out.
164 // Must be called on the FILE thread.
165 void AddLocallyStoredLogInfoToUploadListFile(
166 const base::FilePath& upload_list_path,
167 const std::string& local_log_id);
168 void AddUploadedLogInfoToUploadListFile(
169 const base::FilePath& upload_list_path,
170 const std::string& local_log_id,
171 const std::string& report_id);
172
173 void NotifyUploadDone(int response_code,
174 const std::string& report_id,
175 const WebRtcLogUploadDoneData& upload_done_data);
176
177 // This is the UI thread for Chromium. Some other thread for tests.
178 base::ThreadChecker create_thread_checker_;
179
180 // This is the FILE thread for Chromium. Some other thread for tests.
181 base::ThreadChecker file_thread_checker_;
182
183 // Keeps track of number of currently open logs. Must be accessed on the IO
184 // thread.
185 int log_count_;
186
187 // For testing purposes, see OverrideUploadWithBufferForTesting. Only accessed
188 // on the FILE thread.
189 std::string* post_data_;
190
191 typedef std::map<const net::URLFetcher*, WebRtcLogUploadDoneData>
192 UploadDoneDataMap;
193 // Only accessed on the IO thread.
194 UploadDoneDataMap upload_done_data_;
195
196 // When shutting down, don't create new URLFetchers.
197 bool shutting_down_;
198
199 DISALLOW_COPY_AND_ASSIGN(WebRtcLogUploader);
200 };
201
202 #endif // CHROME_BROWSER_MEDIA_WEBRTC_LOG_UPLOADER_H_
OLDNEW
« no previous file with comments | « chrome/browser/media/webrtc_log_list.cc ('k') | chrome/browser/media/webrtc_log_uploader.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698