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

Side by Side Diff: chrome/browser/media/webrtc_logging_handler_host.cc

Issue 1099803003: [chrome/browser/media] favor DCHECK_CURRENTLY_ON for better logs (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed build issue Created 5 years, 8 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
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/media/webrtc_logging_handler_host.h" 5 #include "chrome/browser/media/webrtc_logging_handler_host.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
98 *message += it->first + ": " + it->second + '\n'; 98 *message += it->first + ": " + it->second + '\n';
99 } 99 }
100 // Remove last '\n'. 100 // Remove last '\n'.
101 message->resize(message->size() - 1); 101 message->resize(message->size() - 1);
102 } 102 }
103 103
104 void FireGenericDoneCallback( 104 void FireGenericDoneCallback(
105 const WebRtcLoggingHandlerHost::GenericDoneCallback& callback, 105 const WebRtcLoggingHandlerHost::GenericDoneCallback& callback,
106 bool success, 106 bool success,
107 const std::string& error_message) { 107 const std::string& error_message) {
108 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 108 DCHECK_CURRENTLY_ON(BrowserThread::IO);
109 DCHECK(!callback.is_null()); 109 DCHECK(!callback.is_null());
110 content::BrowserThread::PostTask( 110 content::BrowserThread::PostTask(
111 content::BrowserThread::UI, 111 content::BrowserThread::UI,
112 FROM_HERE, 112 FROM_HERE,
113 base::Bind(callback, success, error_message)); 113 base::Bind(callback, success, error_message));
114 } 114 }
115 115
116 void FireAndResetGenericDoneCallback( 116 void FireAndResetGenericDoneCallback(
117 WebRtcLoggingHandlerHost::GenericDoneCallback* callback, 117 WebRtcLoggingHandlerHost::GenericDoneCallback* callback,
118 bool success, 118 bool success,
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
162 logging_state_(CLOSED), 162 logging_state_(CLOSED),
163 upload_log_on_render_close_(false) { 163 upload_log_on_render_close_(false) {
164 DCHECK(profile_); 164 DCHECK(profile_);
165 } 165 }
166 166
167 WebRtcLoggingHandlerHost::~WebRtcLoggingHandlerHost() {} 167 WebRtcLoggingHandlerHost::~WebRtcLoggingHandlerHost() {}
168 168
169 void WebRtcLoggingHandlerHost::SetMetaData( 169 void WebRtcLoggingHandlerHost::SetMetaData(
170 scoped_ptr<MetaDataMap> meta_data, 170 scoped_ptr<MetaDataMap> meta_data,
171 const GenericDoneCallback& callback) { 171 const GenericDoneCallback& callback) {
172 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 172 DCHECK_CURRENTLY_ON(BrowserThread::IO);
173 DCHECK(!callback.is_null()); 173 DCHECK(!callback.is_null());
174 174
175 std::string error_message; 175 std::string error_message;
176 if (logging_state_ == CLOSED) { 176 if (logging_state_ == CLOSED) {
177 if (!meta_data_.get()) 177 if (!meta_data_.get())
178 meta_data_ = meta_data.Pass(); 178 meta_data_ = meta_data.Pass();
179 } else if (logging_state_ == STARTED) { 179 } else if (logging_state_ == STARTED) {
180 std::string meta_data_message; 180 std::string meta_data_message;
181 FormatMetaDataAsLogMessage(*meta_data.get(), &meta_data_message); 181 FormatMetaDataAsLogMessage(*meta_data.get(), &meta_data_message);
182 LogToCircularBuffer(meta_data_message); 182 LogToCircularBuffer(meta_data_message);
183 } else { 183 } else {
184 error_message = "Meta data must be set before stop or upload."; 184 error_message = "Meta data must be set before stop or upload.";
185 } 185 }
186 186
187 if (error_message.empty() && meta_data.get()) { 187 if (error_message.empty() && meta_data.get()) {
188 // Keep the meta data around for uploading separately from the log. 188 // Keep the meta data around for uploading separately from the log.
189 for (const auto& it : *meta_data.get()) 189 for (const auto& it : *meta_data.get())
190 (*meta_data_.get())[it.first] = it.second; 190 (*meta_data_.get())[it.first] = it.second;
191 } 191 }
192 192
193 FireGenericDoneCallback(callback, error_message.empty(), error_message); 193 FireGenericDoneCallback(callback, error_message.empty(), error_message);
194 } 194 }
195 195
196 void WebRtcLoggingHandlerHost::StartLogging( 196 void WebRtcLoggingHandlerHost::StartLogging(
197 const GenericDoneCallback& callback) { 197 const GenericDoneCallback& callback) {
198 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 198 DCHECK_CURRENTLY_ON(BrowserThread::IO);
199 DCHECK(!callback.is_null()); 199 DCHECK(!callback.is_null());
200 200
201 if (logging_state_ != CLOSED) { 201 if (logging_state_ != CLOSED) {
202 FireGenericDoneCallback(callback, false, "A log is already open"); 202 FireGenericDoneCallback(callback, false, "A log is already open");
203 return; 203 return;
204 } 204 }
205 205
206 logging_state_ = STARTING; 206 logging_state_ = STARTING;
207 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, base::Bind( 207 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, base::Bind(
208 &WebRtcLoggingHandlerHost::StartLoggingIfAllowed, this, callback)); 208 &WebRtcLoggingHandlerHost::StartLoggingIfAllowed, this, callback));
209 } 209 }
210 210
211 void WebRtcLoggingHandlerHost::StopLogging( 211 void WebRtcLoggingHandlerHost::StopLogging(
212 const GenericDoneCallback& callback) { 212 const GenericDoneCallback& callback) {
213 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 213 DCHECK_CURRENTLY_ON(BrowserThread::IO);
214 DCHECK(!callback.is_null()); 214 DCHECK(!callback.is_null());
215 215
216 if (logging_state_ != STARTED) { 216 if (logging_state_ != STARTED) {
217 FireGenericDoneCallback(callback, false, "Logging not started"); 217 FireGenericDoneCallback(callback, false, "Logging not started");
218 return; 218 return;
219 } 219 }
220 220
221 stop_callback_ = callback; 221 stop_callback_ = callback;
222 logging_state_ = STOPPING; 222 logging_state_ = STOPPING;
223 Send(new WebRtcLoggingMsg_StopLogging()); 223 Send(new WebRtcLoggingMsg_StopLogging());
224 } 224 }
225 225
226 void WebRtcLoggingHandlerHost::UploadLog(const UploadDoneCallback& callback) { 226 void WebRtcLoggingHandlerHost::UploadLog(const UploadDoneCallback& callback) {
227 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 227 DCHECK_CURRENTLY_ON(BrowserThread::IO);
228 DCHECK(!callback.is_null()); 228 DCHECK(!callback.is_null());
229 229
230 if (logging_state_ != STOPPED) { 230 if (logging_state_ != STOPPED) {
231 if (!callback.is_null()) { 231 if (!callback.is_null()) {
232 content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE, 232 content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE,
233 base::Bind(callback, false, "", kLogNotStoppedOrNoLogOpen)); 233 base::Bind(callback, false, "", kLogNotStoppedOrNoLogOpen));
234 } 234 }
235 return; 235 return;
236 } 236 }
237 237
238 content::BrowserThread::PostTaskAndReplyWithResult( 238 content::BrowserThread::PostTaskAndReplyWithResult(
239 content::BrowserThread::FILE, 239 content::BrowserThread::FILE,
240 FROM_HERE, 240 FROM_HERE,
241 base::Bind(&WebRtcLoggingHandlerHost::GetLogDirectoryAndEnsureExists, 241 base::Bind(&WebRtcLoggingHandlerHost::GetLogDirectoryAndEnsureExists,
242 this), 242 this),
243 base::Bind(&WebRtcLoggingHandlerHost::TriggerUpload, this, callback)); 243 base::Bind(&WebRtcLoggingHandlerHost::TriggerUpload, this, callback));
244 } 244 }
245 245
246 void WebRtcLoggingHandlerHost::UploadStoredLog( 246 void WebRtcLoggingHandlerHost::UploadStoredLog(
247 const std::string& log_id, 247 const std::string& log_id,
248 const UploadDoneCallback& callback) { 248 const UploadDoneCallback& callback) {
249 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 249 DCHECK_CURRENTLY_ON(BrowserThread::IO);
250 DCHECK(!callback.is_null()); 250 DCHECK(!callback.is_null());
251 251
252 content::BrowserThread::PostTask(content::BrowserThread::FILE, 252 content::BrowserThread::PostTask(content::BrowserThread::FILE,
253 FROM_HERE, 253 FROM_HERE,
254 base::Bind(&WebRtcLoggingHandlerHost::UploadStoredLogOnFileThread, 254 base::Bind(&WebRtcLoggingHandlerHost::UploadStoredLogOnFileThread,
255 this, log_id, callback)); 255 this, log_id, callback));
256 } 256 }
257 257
258 void WebRtcLoggingHandlerHost::UploadStoredLogOnFileThread( 258 void WebRtcLoggingHandlerHost::UploadStoredLogOnFileThread(
259 const std::string& log_id, 259 const std::string& log_id,
260 const UploadDoneCallback& callback) { 260 const UploadDoneCallback& callback) {
261 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); 261 DCHECK_CURRENTLY_ON(BrowserThread::FILE);
262 262
263 WebRtcLogUploadDoneData upload_data; 263 WebRtcLogUploadDoneData upload_data;
264 upload_data.log_path = GetLogDirectoryAndEnsureExists(); 264 upload_data.log_path = GetLogDirectoryAndEnsureExists();
265 upload_data.callback = callback; 265 upload_data.callback = callback;
266 upload_data.host = this; 266 upload_data.host = this;
267 upload_data.local_log_id = log_id; 267 upload_data.local_log_id = log_id;
268 268
269 g_browser_process->webrtc_log_uploader()->UploadStoredLog(upload_data); 269 g_browser_process->webrtc_log_uploader()->UploadStoredLog(upload_data);
270 } 270 }
271 271
272 void WebRtcLoggingHandlerHost::UploadLogDone() { 272 void WebRtcLoggingHandlerHost::UploadLogDone() {
273 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 273 DCHECK_CURRENTLY_ON(BrowserThread::IO);
274 logging_state_ = CLOSED; 274 logging_state_ = CLOSED;
275 } 275 }
276 276
277 void WebRtcLoggingHandlerHost::DiscardLog(const GenericDoneCallback& callback) { 277 void WebRtcLoggingHandlerHost::DiscardLog(const GenericDoneCallback& callback) {
278 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 278 DCHECK_CURRENTLY_ON(BrowserThread::IO);
279 DCHECK(!callback.is_null()); 279 DCHECK(!callback.is_null());
280 280
281 if (logging_state_ != STOPPED) { 281 if (logging_state_ != STOPPED) {
282 FireGenericDoneCallback(callback, false, kLogNotStoppedOrNoLogOpen); 282 FireGenericDoneCallback(callback, false, kLogNotStoppedOrNoLogOpen);
283 return; 283 return;
284 } 284 }
285 g_browser_process->webrtc_log_uploader()->LoggingStoppedDontUpload(); 285 g_browser_process->webrtc_log_uploader()->LoggingStoppedDontUpload();
286 log_buffer_.reset(); 286 log_buffer_.reset();
287 meta_data_.reset(); 287 meta_data_.reset();
288 logging_state_ = CLOSED; 288 logging_state_ = CLOSED;
289 rtp_dump_handler_.reset(); 289 rtp_dump_handler_.reset();
290 stop_rtp_dump_callback_.Reset(); 290 stop_rtp_dump_callback_.Reset();
291 FireGenericDoneCallback(callback, true, ""); 291 FireGenericDoneCallback(callback, true, "");
292 } 292 }
293 293
294 // Stores the log locally using a hash of log_id + security origin. 294 // Stores the log locally using a hash of log_id + security origin.
295 void WebRtcLoggingHandlerHost::StoreLog( 295 void WebRtcLoggingHandlerHost::StoreLog(
296 const std::string& log_id, 296 const std::string& log_id,
297 const GenericDoneCallback& callback) { 297 const GenericDoneCallback& callback) {
298 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 298 DCHECK_CURRENTLY_ON(BrowserThread::IO);
299 DCHECK(!callback.is_null()); 299 DCHECK(!callback.is_null());
300 300
301 if (logging_state_ != STOPPED) { 301 if (logging_state_ != STOPPED) {
302 FireGenericDoneCallback(callback, false, kLogNotStoppedOrNoLogOpen); 302 FireGenericDoneCallback(callback, false, kLogNotStoppedOrNoLogOpen);
303 return; 303 return;
304 } 304 }
305 305
306 if (rtp_dump_handler_) { 306 if (rtp_dump_handler_) {
307 BrowserThread::PostTask( 307 BrowserThread::PostTask(
308 BrowserThread::UI, 308 BrowserThread::UI,
309 FROM_HERE, 309 FROM_HERE,
310 base::Bind(stop_rtp_dump_callback_, true, true)); 310 base::Bind(stop_rtp_dump_callback_, true, true));
311 311
312 rtp_dump_handler_->StopOngoingDumps( 312 rtp_dump_handler_->StopOngoingDumps(
313 base::Bind(&WebRtcLoggingHandlerHost::StoreLogContinue, 313 base::Bind(&WebRtcLoggingHandlerHost::StoreLogContinue,
314 this, log_id, callback)); 314 this, log_id, callback));
315 return; 315 return;
316 } 316 }
317 317
318 StoreLogContinue(log_id, callback); 318 StoreLogContinue(log_id, callback);
319 } 319 }
320 320
321 void WebRtcLoggingHandlerHost::StoreLogContinue( 321 void WebRtcLoggingHandlerHost::StoreLogContinue(
322 const std::string& log_id, 322 const std::string& log_id,
323 const GenericDoneCallback& callback) { 323 const GenericDoneCallback& callback) {
324 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 324 DCHECK_CURRENTLY_ON(BrowserThread::IO);
325 DCHECK(!callback.is_null()); 325 DCHECK(!callback.is_null());
326 326
327 scoped_ptr<WebRtcLogPaths> log_paths(new WebRtcLogPaths()); 327 scoped_ptr<WebRtcLogPaths> log_paths(new WebRtcLogPaths());
328 ReleaseRtpDumps(log_paths.get()); 328 ReleaseRtpDumps(log_paths.get());
329 329
330 content::BrowserThread::PostTaskAndReplyWithResult( 330 content::BrowserThread::PostTaskAndReplyWithResult(
331 content::BrowserThread::FILE, 331 content::BrowserThread::FILE,
332 FROM_HERE, 332 FROM_HERE,
333 base::Bind(&WebRtcLoggingHandlerHost::GetLogDirectoryAndEnsureExists, 333 base::Bind(&WebRtcLoggingHandlerHost::GetLogDirectoryAndEnsureExists,
334 this), 334 this),
335 base::Bind(&WebRtcLoggingHandlerHost::StoreLogInDirectory, this, log_id, 335 base::Bind(&WebRtcLoggingHandlerHost::StoreLogInDirectory, this, log_id,
336 Passed(&log_paths), callback)); 336 Passed(&log_paths), callback));
337 } 337 }
338 338
339 void WebRtcLoggingHandlerHost::LogMessage(const std::string& message) { 339 void WebRtcLoggingHandlerHost::LogMessage(const std::string& message) {
340 BrowserThread::PostTask( 340 BrowserThread::PostTask(
341 BrowserThread::IO, 341 BrowserThread::IO,
342 FROM_HERE, 342 FROM_HERE,
343 base::Bind( 343 base::Bind(
344 &WebRtcLoggingHandlerHost::AddLogMessageFromBrowser, 344 &WebRtcLoggingHandlerHost::AddLogMessageFromBrowser,
345 this, 345 this,
346 WebRtcLoggingMessageData(base::Time::Now(), message))); 346 WebRtcLoggingMessageData(base::Time::Now(), message)));
347 } 347 }
348 348
349 void WebRtcLoggingHandlerHost::StartRtpDump( 349 void WebRtcLoggingHandlerHost::StartRtpDump(
350 RtpDumpType type, 350 RtpDumpType type,
351 const GenericDoneCallback& callback, 351 const GenericDoneCallback& callback,
352 const content::RenderProcessHost::WebRtcStopRtpDumpCallback& 352 const content::RenderProcessHost::WebRtcStopRtpDumpCallback&
353 stop_callback) { 353 stop_callback) {
354 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 354 DCHECK_CURRENTLY_ON(BrowserThread::IO);
355 DCHECK(stop_rtp_dump_callback_.is_null() || 355 DCHECK(stop_rtp_dump_callback_.is_null() ||
356 stop_rtp_dump_callback_.Equals(stop_callback)); 356 stop_rtp_dump_callback_.Equals(stop_callback));
357 357
358 stop_rtp_dump_callback_ = stop_callback; 358 stop_rtp_dump_callback_ = stop_callback;
359 359
360 if (!rtp_dump_handler_) { 360 if (!rtp_dump_handler_) {
361 content::BrowserThread::PostTaskAndReplyWithResult( 361 content::BrowserThread::PostTaskAndReplyWithResult(
362 content::BrowserThread::FILE, 362 content::BrowserThread::FILE,
363 FROM_HERE, 363 FROM_HERE,
364 base::Bind(&WebRtcLoggingHandlerHost::GetLogDirectoryAndEnsureExists, 364 base::Bind(&WebRtcLoggingHandlerHost::GetLogDirectoryAndEnsureExists,
365 this), 365 this),
366 base::Bind(&WebRtcLoggingHandlerHost::CreateRtpDumpHandlerAndStart, 366 base::Bind(&WebRtcLoggingHandlerHost::CreateRtpDumpHandlerAndStart,
367 this, 367 this,
368 type, 368 type,
369 callback)); 369 callback));
370 return; 370 return;
371 } 371 }
372 372
373 DoStartRtpDump(type, callback); 373 DoStartRtpDump(type, callback);
374 } 374 }
375 375
376 void WebRtcLoggingHandlerHost::StopRtpDump( 376 void WebRtcLoggingHandlerHost::StopRtpDump(
377 RtpDumpType type, 377 RtpDumpType type,
378 const GenericDoneCallback& callback) { 378 const GenericDoneCallback& callback) {
379 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 379 DCHECK_CURRENTLY_ON(BrowserThread::IO);
380 DCHECK(!callback.is_null()); 380 DCHECK(!callback.is_null());
381 381
382 if (!rtp_dump_handler_) { 382 if (!rtp_dump_handler_) {
383 FireGenericDoneCallback(callback, false, "RTP dump has not been started."); 383 FireGenericDoneCallback(callback, false, "RTP dump has not been started.");
384 return; 384 return;
385 } 385 }
386 386
387 if (!stop_rtp_dump_callback_.is_null()) { 387 if (!stop_rtp_dump_callback_.is_null()) {
388 BrowserThread::PostTask( 388 BrowserThread::PostTask(
389 BrowserThread::UI, 389 BrowserThread::UI,
390 FROM_HERE, 390 FROM_HERE,
391 base::Bind(stop_rtp_dump_callback_, 391 base::Bind(stop_rtp_dump_callback_,
392 type == RTP_DUMP_INCOMING || type == RTP_DUMP_BOTH, 392 type == RTP_DUMP_INCOMING || type == RTP_DUMP_BOTH,
393 type == RTP_DUMP_OUTGOING || type == RTP_DUMP_BOTH)); 393 type == RTP_DUMP_OUTGOING || type == RTP_DUMP_BOTH));
394 } 394 }
395 395
396 rtp_dump_handler_->StopDump(type, callback); 396 rtp_dump_handler_->StopDump(type, callback);
397 } 397 }
398 398
399 void WebRtcLoggingHandlerHost::OnRtpPacket(scoped_ptr<uint8[]> packet_header, 399 void WebRtcLoggingHandlerHost::OnRtpPacket(scoped_ptr<uint8[]> packet_header,
400 size_t header_length, 400 size_t header_length,
401 size_t packet_length, 401 size_t packet_length,
402 bool incoming) { 402 bool incoming) {
403 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 403 DCHECK_CURRENTLY_ON(BrowserThread::UI);
404 404
405 BrowserThread::PostTask( 405 BrowserThread::PostTask(
406 BrowserThread::IO, 406 BrowserThread::IO,
407 FROM_HERE, 407 FROM_HERE,
408 base::Bind(&WebRtcLoggingHandlerHost::DumpRtpPacketOnIOThread, 408 base::Bind(&WebRtcLoggingHandlerHost::DumpRtpPacketOnIOThread,
409 this, 409 this,
410 base::Passed(&packet_header), 410 base::Passed(&packet_header),
411 header_length, 411 header_length,
412 packet_length, 412 packet_length,
413 incoming)); 413 incoming));
414 } 414 }
415 415
416 void WebRtcLoggingHandlerHost::DumpRtpPacketOnIOThread( 416 void WebRtcLoggingHandlerHost::DumpRtpPacketOnIOThread(
417 scoped_ptr<uint8[]> packet_header, 417 scoped_ptr<uint8[]> packet_header,
418 size_t header_length, 418 size_t header_length,
419 size_t packet_length, 419 size_t packet_length,
420 bool incoming) { 420 bool incoming) {
421 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 421 DCHECK_CURRENTLY_ON(BrowserThread::IO);
422 422
423 // |rtp_dump_handler_| could be NULL if we are waiting for the FILE thread to 423 // |rtp_dump_handler_| could be NULL if we are waiting for the FILE thread to
424 // create/ensure the log directory. 424 // create/ensure the log directory.
425 if (rtp_dump_handler_) { 425 if (rtp_dump_handler_) {
426 rtp_dump_handler_->OnRtpPacket( 426 rtp_dump_handler_->OnRtpPacket(
427 packet_header.get(), header_length, packet_length, incoming); 427 packet_header.get(), header_length, packet_length, incoming);
428 } 428 }
429 } 429 }
430 430
431 void WebRtcLoggingHandlerHost::OnChannelClosing() { 431 void WebRtcLoggingHandlerHost::OnChannelClosing() {
432 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 432 DCHECK_CURRENTLY_ON(BrowserThread::IO);
433 if (logging_state_ == STARTED || logging_state_ == STOPPED) { 433 if (logging_state_ == STARTED || logging_state_ == STOPPED) {
434 if (upload_log_on_render_close_) { 434 if (upload_log_on_render_close_) {
435 logging_started_time_ = base::Time(); 435 logging_started_time_ = base::Time();
436 436
437 content::BrowserThread::PostTaskAndReplyWithResult( 437 content::BrowserThread::PostTaskAndReplyWithResult(
438 content::BrowserThread::FILE, 438 content::BrowserThread::FILE,
439 FROM_HERE, 439 FROM_HERE,
440 base::Bind(&WebRtcLoggingHandlerHost::GetLogDirectoryAndEnsureExists, 440 base::Bind(&WebRtcLoggingHandlerHost::GetLogDirectoryAndEnsureExists,
441 this), 441 this),
442 base::Bind(&WebRtcLoggingHandlerHost::TriggerUpload, this, 442 base::Bind(&WebRtcLoggingHandlerHost::TriggerUpload, this,
443 UploadDoneCallback())); 443 UploadDoneCallback()));
444 } else { 444 } else {
445 g_browser_process->webrtc_log_uploader()->LoggingStoppedDontUpload(); 445 g_browser_process->webrtc_log_uploader()->LoggingStoppedDontUpload();
446 } 446 }
447 } 447 }
448 content::BrowserMessageFilter::OnChannelClosing(); 448 content::BrowserMessageFilter::OnChannelClosing();
449 } 449 }
450 450
451 void WebRtcLoggingHandlerHost::OnDestruct() const { 451 void WebRtcLoggingHandlerHost::OnDestruct() const {
452 BrowserThread::DeleteOnIOThread::Destruct(this); 452 BrowserThread::DeleteOnIOThread::Destruct(this);
453 } 453 }
454 454
455 bool WebRtcLoggingHandlerHost::OnMessageReceived(const IPC::Message& message) { 455 bool WebRtcLoggingHandlerHost::OnMessageReceived(const IPC::Message& message) {
456 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 456 DCHECK_CURRENTLY_ON(BrowserThread::IO);
457 bool handled = true; 457 bool handled = true;
458 IPC_BEGIN_MESSAGE_MAP(WebRtcLoggingHandlerHost, message) 458 IPC_BEGIN_MESSAGE_MAP(WebRtcLoggingHandlerHost, message)
459 IPC_MESSAGE_HANDLER(WebRtcLoggingMsg_AddLogMessages, OnAddLogMessages) 459 IPC_MESSAGE_HANDLER(WebRtcLoggingMsg_AddLogMessages, OnAddLogMessages)
460 IPC_MESSAGE_HANDLER(WebRtcLoggingMsg_LoggingStopped, 460 IPC_MESSAGE_HANDLER(WebRtcLoggingMsg_LoggingStopped,
461 OnLoggingStoppedInRenderer) 461 OnLoggingStoppedInRenderer)
462 IPC_MESSAGE_UNHANDLED(handled = false) 462 IPC_MESSAGE_UNHANDLED(handled = false)
463 IPC_END_MESSAGE_MAP() 463 IPC_END_MESSAGE_MAP()
464 464
465 return handled; 465 return handled;
466 } 466 }
467 467
468 void WebRtcLoggingHandlerHost::AddLogMessageFromBrowser( 468 void WebRtcLoggingHandlerHost::AddLogMessageFromBrowser(
469 const WebRtcLoggingMessageData& message) { 469 const WebRtcLoggingMessageData& message) {
470 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 470 DCHECK_CURRENTLY_ON(BrowserThread::IO);
471 if (logging_state_ == STARTED) 471 if (logging_state_ == STARTED)
472 LogToCircularBuffer(message.Format(logging_started_time_)); 472 LogToCircularBuffer(message.Format(logging_started_time_));
473 } 473 }
474 474
475 void WebRtcLoggingHandlerHost::OnAddLogMessages( 475 void WebRtcLoggingHandlerHost::OnAddLogMessages(
476 const std::vector<WebRtcLoggingMessageData>& messages) { 476 const std::vector<WebRtcLoggingMessageData>& messages) {
477 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 477 DCHECK_CURRENTLY_ON(BrowserThread::IO);
478 if (logging_state_ == STARTED || logging_state_ == STOPPING) { 478 if (logging_state_ == STARTED || logging_state_ == STOPPING) {
479 for (size_t i = 0; i < messages.size(); ++i) { 479 for (size_t i = 0; i < messages.size(); ++i) {
480 LogToCircularBuffer(messages[i].Format(logging_started_time_)); 480 LogToCircularBuffer(messages[i].Format(logging_started_time_));
481 } 481 }
482 } 482 }
483 } 483 }
484 484
485 void WebRtcLoggingHandlerHost::OnLoggingStoppedInRenderer() { 485 void WebRtcLoggingHandlerHost::OnLoggingStoppedInRenderer() {
486 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 486 DCHECK_CURRENTLY_ON(BrowserThread::IO);
487 if (logging_state_ != STOPPING) { 487 if (logging_state_ != STOPPING) {
488 // If an out-of-order response is received, stop_callback_ may be invalid, 488 // If an out-of-order response is received, stop_callback_ may be invalid,
489 // and must not be invoked. 489 // and must not be invoked.
490 DLOG(ERROR) << "OnLoggingStoppedInRenderer invoked in state " 490 DLOG(ERROR) << "OnLoggingStoppedInRenderer invoked in state "
491 << logging_state_; 491 << logging_state_;
492 BadMessageReceived(); 492 BadMessageReceived();
493 return; 493 return;
494 } 494 }
495 logging_started_time_ = base::Time(); 495 logging_started_time_ = base::Time();
496 logging_state_ = STOPPED; 496 logging_state_ = STOPPED;
497 FireAndResetGenericDoneCallback(&stop_callback_, true, ""); 497 FireAndResetGenericDoneCallback(&stop_callback_, true, "");
498 } 498 }
499 499
500 void WebRtcLoggingHandlerHost::StartLoggingIfAllowed( 500 void WebRtcLoggingHandlerHost::StartLoggingIfAllowed(
501 const GenericDoneCallback& callback) { 501 const GenericDoneCallback& callback) {
502 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 502 DCHECK_CURRENTLY_ON(BrowserThread::UI);
503 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, base::Bind( 503 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, base::Bind(
504 &WebRtcLoggingHandlerHost::DoStartLogging, this, 504 &WebRtcLoggingHandlerHost::DoStartLogging, this,
505 g_browser_process->webrtc_log_uploader()->ApplyForStartLogging(), 505 g_browser_process->webrtc_log_uploader()->ApplyForStartLogging(),
506 callback)); 506 callback));
507 } 507 }
508 508
509 void WebRtcLoggingHandlerHost::DoStartLogging( 509 void WebRtcLoggingHandlerHost::DoStartLogging(
510 bool permissions_granted, 510 bool permissions_granted,
511 const GenericDoneCallback& callback) { 511 const GenericDoneCallback& callback) {
512 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 512 DCHECK_CURRENTLY_ON(BrowserThread::IO);
513 if (logging_state_ != STARTING) { 513 if (logging_state_ != STARTING) {
514 FireGenericDoneCallback(callback, false, "Logging cancelled."); 514 FireGenericDoneCallback(callback, false, "Logging cancelled.");
515 return; 515 return;
516 } 516 }
517 517
518 if (!permissions_granted) { 518 if (!permissions_granted) {
519 logging_state_ = CLOSED; 519 logging_state_ = CLOSED;
520 FireGenericDoneCallback(callback, false, 520 FireGenericDoneCallback(callback, false,
521 "Cannot start, maybe the maximum number of " 521 "Cannot start, maybe the maximum number of "
522 "simultaneuos logs has been reached."); 522 "simultaneuos logs has been reached.");
523 return; 523 return;
524 } 524 }
525 525
526 DCHECK(!log_buffer_.get()); 526 DCHECK(!log_buffer_.get());
527 log_buffer_.reset(new WebRtcLogBuffer()); 527 log_buffer_.reset(new WebRtcLogBuffer());
528 if (!meta_data_.get()) 528 if (!meta_data_.get())
529 meta_data_.reset(new MetaDataMap()); 529 meta_data_.reset(new MetaDataMap());
530 530
531 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, base::Bind( 531 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, base::Bind(
532 &WebRtcLoggingHandlerHost::LogInitialInfoOnFileThread, this, callback)); 532 &WebRtcLoggingHandlerHost::LogInitialInfoOnFileThread, this, callback));
533 } 533 }
534 534
535 void WebRtcLoggingHandlerHost::LogInitialInfoOnFileThread( 535 void WebRtcLoggingHandlerHost::LogInitialInfoOnFileThread(
536 const GenericDoneCallback& callback) { 536 const GenericDoneCallback& callback) {
537 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); 537 DCHECK_CURRENTLY_ON(BrowserThread::FILE);
538 538
539 net::NetworkInterfaceList network_list; 539 net::NetworkInterfaceList network_list;
540 net::GetNetworkList(&network_list, 540 net::GetNetworkList(&network_list,
541 net::EXCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES); 541 net::EXCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES);
542 542
543 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, base::Bind( 543 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, base::Bind(
544 &WebRtcLoggingHandlerHost::LogInitialInfoOnIOThread, this, network_list, 544 &WebRtcLoggingHandlerHost::LogInitialInfoOnIOThread, this, network_list,
545 callback)); 545 callback));
546 } 546 }
547 547
548 void WebRtcLoggingHandlerHost::LogInitialInfoOnIOThread( 548 void WebRtcLoggingHandlerHost::LogInitialInfoOnIOThread(
549 const net::NetworkInterfaceList& network_list, 549 const net::NetworkInterfaceList& network_list,
550 const GenericDoneCallback& callback) { 550 const GenericDoneCallback& callback) {
551 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 551 DCHECK_CURRENTLY_ON(BrowserThread::IO);
552 if (logging_state_ != STARTING) { 552 if (logging_state_ != STARTING) {
553 FireGenericDoneCallback(callback, false, "Logging cancelled."); 553 FireGenericDoneCallback(callback, false, "Logging cancelled.");
554 return; 554 return;
555 } 555 }
556 556
557 // Log start time (current time). We don't use base/i18n/time_formatting.h 557 // Log start time (current time). We don't use base/i18n/time_formatting.h
558 // here because we don't want the format of the current locale. 558 // here because we don't want the format of the current locale.
559 base::Time::Exploded now = {0}; 559 base::Time::Exploded now = {0};
560 base::Time::Now().LocalExplode(&now); 560 base::Time::Now().LocalExplode(&now);
561 LogToCircularBuffer(base::StringPrintf( 561 LogToCircularBuffer(base::StringPrintf(
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
630 "Name: " + it->friendly_name + ", Address: " + 630 "Name: " + it->friendly_name + ", Address: " +
631 IPAddressToSensitiveString(it->address) + ", Type: " + 631 IPAddressToSensitiveString(it->address) + ", Type: " +
632 net::NetworkChangeNotifier::ConnectionTypeToString(it->type)); 632 net::NetworkChangeNotifier::ConnectionTypeToString(it->type));
633 } 633 }
634 634
635 NotifyLoggingStarted(callback); 635 NotifyLoggingStarted(callback);
636 } 636 }
637 637
638 void WebRtcLoggingHandlerHost::NotifyLoggingStarted( 638 void WebRtcLoggingHandlerHost::NotifyLoggingStarted(
639 const GenericDoneCallback& callback) { 639 const GenericDoneCallback& callback) {
640 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 640 DCHECK_CURRENTLY_ON(BrowserThread::IO);
641 DCHECK_EQ(logging_state_, STARTING); 641 DCHECK_EQ(logging_state_, STARTING);
642 Send(new WebRtcLoggingMsg_StartLogging()); 642 Send(new WebRtcLoggingMsg_StartLogging());
643 logging_started_time_ = base::Time::Now(); 643 logging_started_time_ = base::Time::Now();
644 logging_state_ = STARTED; 644 logging_state_ = STARTED;
645 FireGenericDoneCallback(callback, true, ""); 645 FireGenericDoneCallback(callback, true, "");
646 } 646 }
647 647
648 void WebRtcLoggingHandlerHost::LogToCircularBuffer(const std::string& message) { 648 void WebRtcLoggingHandlerHost::LogToCircularBuffer(const std::string& message) {
649 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 649 DCHECK_CURRENTLY_ON(BrowserThread::IO);
650 DCHECK_NE(logging_state_, CLOSED); 650 DCHECK_NE(logging_state_, CLOSED);
651 log_buffer_->Log(message); 651 log_buffer_->Log(message);
652 } 652 }
653 653
654 base::FilePath WebRtcLoggingHandlerHost::GetLogDirectoryAndEnsureExists() { 654 base::FilePath WebRtcLoggingHandlerHost::GetLogDirectoryAndEnsureExists() {
655 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); 655 DCHECK_CURRENTLY_ON(BrowserThread::FILE);
656 base::FilePath log_dir_path = 656 base::FilePath log_dir_path =
657 WebRtcLogList::GetWebRtcLogDirectoryForProfile(profile_->GetPath()); 657 WebRtcLogList::GetWebRtcLogDirectoryForProfile(profile_->GetPath());
658 base::File::Error error; 658 base::File::Error error;
659 if (!base::CreateDirectoryAndGetError(log_dir_path, &error)) { 659 if (!base::CreateDirectoryAndGetError(log_dir_path, &error)) {
660 DLOG(ERROR) << "Could not create WebRTC log directory, error: " << error; 660 DLOG(ERROR) << "Could not create WebRTC log directory, error: " << error;
661 return base::FilePath(); 661 return base::FilePath();
662 } 662 }
663 return log_dir_path; 663 return log_dir_path;
664 } 664 }
665 665
666 void WebRtcLoggingHandlerHost::TriggerUpload( 666 void WebRtcLoggingHandlerHost::TriggerUpload(
667 const UploadDoneCallback& callback, 667 const UploadDoneCallback& callback,
668 const base::FilePath& log_directory) { 668 const base::FilePath& log_directory) {
669 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 669 DCHECK_CURRENTLY_ON(BrowserThread::IO);
670 670
671 if (rtp_dump_handler_) { 671 if (rtp_dump_handler_) {
672 BrowserThread::PostTask( 672 BrowserThread::PostTask(
673 BrowserThread::UI, 673 BrowserThread::UI,
674 FROM_HERE, 674 FROM_HERE,
675 base::Bind(stop_rtp_dump_callback_, true, true)); 675 base::Bind(stop_rtp_dump_callback_, true, true));
676 676
677 rtp_dump_handler_->StopOngoingDumps( 677 rtp_dump_handler_->StopOngoingDumps(
678 base::Bind(&WebRtcLoggingHandlerHost::DoUploadLogAndRtpDumps, 678 base::Bind(&WebRtcLoggingHandlerHost::DoUploadLogAndRtpDumps,
679 this, 679 this,
680 log_directory, 680 log_directory,
681 callback)); 681 callback));
682 return; 682 return;
683 } 683 }
684 684
685 DoUploadLogAndRtpDumps(log_directory, callback); 685 DoUploadLogAndRtpDumps(log_directory, callback);
686 } 686 }
687 687
688 void WebRtcLoggingHandlerHost::StoreLogInDirectory( 688 void WebRtcLoggingHandlerHost::StoreLogInDirectory(
689 const std::string& log_id, 689 const std::string& log_id,
690 scoped_ptr<WebRtcLogPaths> log_paths, 690 scoped_ptr<WebRtcLogPaths> log_paths,
691 const GenericDoneCallback& done_callback, 691 const GenericDoneCallback& done_callback,
692 const base::FilePath& directory) { 692 const base::FilePath& directory) {
693 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 693 DCHECK_CURRENTLY_ON(BrowserThread::IO);
694 log_paths->log_path = directory; 694 log_paths->log_path = directory;
695 695
696 log_buffer_->SetComplete(); 696 log_buffer_->SetComplete();
697 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, 697 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE,
698 base::Bind(&WebRtcLogUploader::LoggingStoppedDoStore, 698 base::Bind(&WebRtcLogUploader::LoggingStoppedDoStore,
699 base::Unretained(g_browser_process->webrtc_log_uploader()), 699 base::Unretained(g_browser_process->webrtc_log_uploader()),
700 *log_paths.get(), log_id, Passed(&log_buffer_), Passed(&meta_data_), 700 *log_paths.get(), log_id, Passed(&log_buffer_), Passed(&meta_data_),
701 done_callback)); 701 done_callback));
702 702
703 logging_state_ = CLOSED; 703 logging_state_ = CLOSED;
704 } 704 }
705 705
706 void WebRtcLoggingHandlerHost::DoUploadLogAndRtpDumps( 706 void WebRtcLoggingHandlerHost::DoUploadLogAndRtpDumps(
707 const base::FilePath& log_directory, 707 const base::FilePath& log_directory,
708 const UploadDoneCallback& callback) { 708 const UploadDoneCallback& callback) {
709 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 709 DCHECK_CURRENTLY_ON(BrowserThread::IO);
710 710
711 WebRtcLogUploadDoneData upload_done_data; 711 WebRtcLogUploadDoneData upload_done_data;
712 upload_done_data.log_path = log_directory; 712 upload_done_data.log_path = log_directory;
713 upload_done_data.callback = callback; 713 upload_done_data.callback = callback;
714 upload_done_data.host = this; 714 upload_done_data.host = this;
715 ReleaseRtpDumps(&upload_done_data); 715 ReleaseRtpDumps(&upload_done_data);
716 716
717 log_buffer_->SetComplete(); 717 log_buffer_->SetComplete();
718 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, base::Bind( 718 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, base::Bind(
719 &WebRtcLogUploader::LoggingStoppedDoUpload, 719 &WebRtcLogUploader::LoggingStoppedDoUpload,
720 base::Unretained(g_browser_process->webrtc_log_uploader()), 720 base::Unretained(g_browser_process->webrtc_log_uploader()),
721 Passed(&log_buffer_), 721 Passed(&log_buffer_),
722 Passed(&meta_data_), 722 Passed(&meta_data_),
723 upload_done_data)); 723 upload_done_data));
724 724
725 logging_state_ = CLOSED; 725 logging_state_ = CLOSED;
726 } 726 }
727 727
728 void WebRtcLoggingHandlerHost::CreateRtpDumpHandlerAndStart( 728 void WebRtcLoggingHandlerHost::CreateRtpDumpHandlerAndStart(
729 RtpDumpType type, 729 RtpDumpType type,
730 const GenericDoneCallback& callback, 730 const GenericDoneCallback& callback,
731 const base::FilePath& dump_dir) { 731 const base::FilePath& dump_dir) {
732 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 732 DCHECK_CURRENTLY_ON(BrowserThread::IO);
733 733
734 // |rtp_dump_handler_| may be non-NULL if StartRtpDump is called again before 734 // |rtp_dump_handler_| may be non-NULL if StartRtpDump is called again before
735 // GetLogDirectoryAndEnsureExists returns on the FILE thread for a previous 735 // GetLogDirectoryAndEnsureExists returns on the FILE thread for a previous
736 // StartRtpDump. 736 // StartRtpDump.
737 if (!rtp_dump_handler_) 737 if (!rtp_dump_handler_)
738 rtp_dump_handler_.reset(new WebRtcRtpDumpHandler(dump_dir)); 738 rtp_dump_handler_.reset(new WebRtcRtpDumpHandler(dump_dir));
739 739
740 DoStartRtpDump(type, callback); 740 DoStartRtpDump(type, callback);
741 } 741 }
742 742
743 void WebRtcLoggingHandlerHost::DoStartRtpDump( 743 void WebRtcLoggingHandlerHost::DoStartRtpDump(
744 RtpDumpType type, const GenericDoneCallback& callback) { 744 RtpDumpType type, const GenericDoneCallback& callback) {
745 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 745 DCHECK_CURRENTLY_ON(BrowserThread::IO);
746 DCHECK(rtp_dump_handler_); 746 DCHECK(rtp_dump_handler_);
747 747
748 std::string error; 748 std::string error;
749 bool result = rtp_dump_handler_->StartDump(type, &error); 749 bool result = rtp_dump_handler_->StartDump(type, &error);
750 FireGenericDoneCallback(callback, result, error); 750 FireGenericDoneCallback(callback, result, error);
751 } 751 }
752 752
753 bool WebRtcLoggingHandlerHost::ReleaseRtpDumps(WebRtcLogPaths* log_paths) { 753 bool WebRtcLoggingHandlerHost::ReleaseRtpDumps(WebRtcLogPaths* log_paths) {
754 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 754 DCHECK_CURRENTLY_ON(BrowserThread::IO);
755 DCHECK(log_paths); 755 DCHECK(log_paths);
756 756
757 if (!rtp_dump_handler_) 757 if (!rtp_dump_handler_)
758 return false; 758 return false;
759 759
760 WebRtcRtpDumpHandler::ReleasedDumps rtp_dumps( 760 WebRtcRtpDumpHandler::ReleasedDumps rtp_dumps(
761 rtp_dump_handler_->ReleaseDumps()); 761 rtp_dump_handler_->ReleaseDumps());
762 log_paths->incoming_rtp_dump = rtp_dumps.incoming_dump_path; 762 log_paths->incoming_rtp_dump = rtp_dumps.incoming_dump_path;
763 log_paths->outgoing_rtp_dump = rtp_dumps.outgoing_dump_path; 763 log_paths->outgoing_rtp_dump = rtp_dumps.outgoing_dump_path;
764 764
765 rtp_dump_handler_.reset(); 765 rtp_dump_handler_.reset();
766 stop_rtp_dump_callback_.Reset(); 766 stop_rtp_dump_callback_.Reset();
767 767
768 return true; 768 return true;
769 } 769 }
OLDNEW
« no previous file with comments | « chrome/browser/media/webrtc_log_util.cc ('k') | chrome/browser/media/webrtc_rtp_dump_handler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698