| OLD | NEW |
| 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_log_uploader.h" | 5 #include "chrome/browser/media/webrtc_log_uploader.h" |
| 6 | 6 |
| 7 #include "base/file_util.h" | 7 #include "base/file_util.h" |
| 8 #include "base/files/file_enumerator.h" | 8 #include "base/files/file_enumerator.h" |
| 9 #include "base/files/file_path.h" | 9 #include "base/files/file_path.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 69 } // namespace | 69 } // namespace |
| 70 | 70 |
| 71 WebRtcLogUploadDoneData::WebRtcLogUploadDoneData() {} | 71 WebRtcLogUploadDoneData::WebRtcLogUploadDoneData() {} |
| 72 | 72 |
| 73 WebRtcLogUploadDoneData::~WebRtcLogUploadDoneData() {} | 73 WebRtcLogUploadDoneData::~WebRtcLogUploadDoneData() {} |
| 74 | 74 |
| 75 WebRtcLogUploader::WebRtcLogUploader() | 75 WebRtcLogUploader::WebRtcLogUploader() |
| 76 : log_count_(0), | 76 : log_count_(0), |
| 77 post_data_(NULL), | 77 post_data_(NULL), |
| 78 shutting_down_(false) { | 78 shutting_down_(false) { |
| 79 file_thread_checker_.DetachFromThread(); | 79 blocking_sequence_checker_.DetachFromSequence(); |
| 80 } | 80 } |
| 81 | 81 |
| 82 WebRtcLogUploader::~WebRtcLogUploader() { | 82 WebRtcLogUploader::~WebRtcLogUploader() { |
| 83 DCHECK(create_thread_checker_.CalledOnValidThread()); | 83 DCHECK(create_thread_checker_.CalledOnValidThread()); |
| 84 DCHECK(upload_done_data_.empty()); | 84 DCHECK(upload_done_data_.empty()); |
| 85 DCHECK(shutting_down_); | 85 DCHECK(shutting_down_); |
| 86 } | 86 } |
| 87 | 87 |
| 88 void WebRtcLogUploader::OnURLFetchComplete( | 88 void WebRtcLogUploader::OnURLFetchComplete( |
| 89 const net::URLFetcher* source) { | 89 const net::URLFetcher* source) { |
| 90 DCHECK(create_thread_checker_.CalledOnValidThread()); | 90 DCHECK(create_thread_checker_.CalledOnValidThread()); |
| 91 DCHECK(upload_done_data_.find(source) != upload_done_data_.end()); | 91 DCHECK(upload_done_data_.find(source) != upload_done_data_.end()); |
| 92 DCHECK(!shutting_down_); | 92 DCHECK(!shutting_down_); |
| 93 int response_code = source->GetResponseCode(); | 93 int response_code = source->GetResponseCode(); |
| 94 UploadDoneDataMap::iterator it = upload_done_data_.find(source); | 94 UploadDoneDataMap::iterator it = upload_done_data_.find(source); |
| 95 if (it != upload_done_data_.end()) { | 95 if (it != upload_done_data_.end()) { |
| 96 // The log path can be empty here if we failed getting it before. We still | 96 // The log path can be empty here if we failed getting it before. We still |
| 97 // upload the log if that's the case. | 97 // upload the log if that's the case. |
| 98 std::string report_id; | 98 std::string report_id; |
| 99 if (response_code == kHttpResponseOk && | 99 if (response_code == kHttpResponseOk && |
| 100 source->GetResponseAsString(&report_id) && | 100 source->GetResponseAsString(&report_id) && |
| 101 !it->second.log_path.empty()) { | 101 !it->second.log_path.empty()) { |
| 102 // TODO(jiayl): Add the RTP dump records to chrome://webrtc-logs. | 102 // TODO(jiayl): Add the RTP dump records to chrome://webrtc-logs. |
| 103 base::FilePath log_list_path = | 103 base::FilePath log_list_path = |
| 104 WebRtcLogList::GetWebRtcLogListFileForDirectory(it->second.log_path); | 104 WebRtcLogList::GetWebRtcLogListFileForDirectory(it->second.log_path); |
| 105 content::BrowserThread::PostTask( | 105 content::BrowserThread::PostBlockingPoolTask( |
| 106 content::BrowserThread::FILE, | |
| 107 FROM_HERE, | 106 FROM_HERE, |
| 108 base::Bind(&WebRtcLogUploader::AddUploadedLogInfoToUploadListFile, | 107 base::Bind(&WebRtcLogUploader::AddUploadedLogInfoToUploadListFile, |
| 109 base::Unretained(this), | 108 base::Unretained(this), |
| 110 log_list_path, | 109 log_list_path, |
| 111 it->second.local_log_id, | 110 it->second.local_log_id, |
| 112 report_id)); | 111 report_id)); |
| 113 } | 112 } |
| 114 NotifyUploadDone(response_code, report_id, it->second); | 113 NotifyUploadDone(response_code, report_id, it->second); |
| 115 upload_done_data_.erase(it); | 114 upload_done_data_.erase(it); |
| 116 } | 115 } |
| (...skipping 17 matching lines...) Expand all Loading... |
| 134 void WebRtcLogUploader::LoggingStoppedDontUpload() { | 133 void WebRtcLogUploader::LoggingStoppedDontUpload() { |
| 135 content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE, | 134 content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE, |
| 136 base::Bind(&WebRtcLogUploader::DecreaseLogCount, base::Unretained(this))); | 135 base::Bind(&WebRtcLogUploader::DecreaseLogCount, base::Unretained(this))); |
| 137 } | 136 } |
| 138 | 137 |
| 139 void WebRtcLogUploader::LoggingStoppedDoUpload( | 138 void WebRtcLogUploader::LoggingStoppedDoUpload( |
| 140 scoped_ptr<unsigned char[]> log_buffer, | 139 scoped_ptr<unsigned char[]> log_buffer, |
| 141 uint32 length, | 140 uint32 length, |
| 142 const std::map<std::string, std::string>& meta_data, | 141 const std::map<std::string, std::string>& meta_data, |
| 143 const WebRtcLogUploadDoneData& upload_done_data) { | 142 const WebRtcLogUploadDoneData& upload_done_data) { |
| 144 DCHECK(file_thread_checker_.CalledOnValidThread()); | 143 DCHECK(blocking_sequence_checker_.CalledOnValidSequencedThread()); |
| 145 DCHECK(log_buffer.get()); | 144 DCHECK(log_buffer.get()); |
| 146 DCHECK(!upload_done_data.log_path.empty()); | 145 DCHECK(!upload_done_data.log_path.empty()); |
| 147 | 146 |
| 148 std::vector<uint8> compressed_log; | 147 std::vector<uint8> compressed_log; |
| 149 CompressLog( | 148 CompressLog( |
| 150 &compressed_log, reinterpret_cast<uint8*>(&log_buffer[0]), length); | 149 &compressed_log, reinterpret_cast<uint8*>(&log_buffer[0]), length); |
| 151 | 150 |
| 152 std::string local_log_id; | 151 std::string local_log_id; |
| 153 | 152 |
| 154 if (base::PathExists(upload_done_data.log_path)) { | 153 if (base::PathExists(upload_done_data.log_path)) { |
| (...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 345 } | 344 } |
| 346 | 345 |
| 347 void WebRtcLogUploader::DecreaseLogCount() { | 346 void WebRtcLogUploader::DecreaseLogCount() { |
| 348 DCHECK(create_thread_checker_.CalledOnValidThread()); | 347 DCHECK(create_thread_checker_.CalledOnValidThread()); |
| 349 --log_count_; | 348 --log_count_; |
| 350 } | 349 } |
| 351 | 350 |
| 352 void WebRtcLogUploader::WriteCompressedLogToFile( | 351 void WebRtcLogUploader::WriteCompressedLogToFile( |
| 353 const std::vector<uint8>& compressed_log, | 352 const std::vector<uint8>& compressed_log, |
| 354 const base::FilePath& log_file_path) { | 353 const base::FilePath& log_file_path) { |
| 355 DCHECK(file_thread_checker_.CalledOnValidThread()); | 354 DCHECK(blocking_sequence_checker_.CalledOnValidSequencedThread()); |
| 356 DCHECK(!compressed_log.empty()); | 355 DCHECK(!compressed_log.empty()); |
| 357 base::WriteFile(log_file_path, | 356 base::WriteFile(log_file_path, |
| 358 reinterpret_cast<const char*>(&compressed_log[0]), | 357 reinterpret_cast<const char*>(&compressed_log[0]), |
| 359 compressed_log.size()); | 358 compressed_log.size()); |
| 360 } | 359 } |
| 361 | 360 |
| 362 void WebRtcLogUploader::AddLocallyStoredLogInfoToUploadListFile( | 361 void WebRtcLogUploader::AddLocallyStoredLogInfoToUploadListFile( |
| 363 const base::FilePath& upload_list_path, | 362 const base::FilePath& upload_list_path, |
| 364 const std::string& local_log_id) { | 363 const std::string& local_log_id) { |
| 365 DCHECK(file_thread_checker_.CalledOnValidThread()); | 364 DCHECK(blocking_sequence_checker_.CalledOnValidSequencedThread()); |
| 366 DCHECK(!upload_list_path.empty()); | 365 DCHECK(!upload_list_path.empty()); |
| 367 DCHECK(!local_log_id.empty()); | 366 DCHECK(!local_log_id.empty()); |
| 368 | 367 |
| 369 std::string contents; | 368 std::string contents; |
| 370 | 369 |
| 371 if (base::PathExists(upload_list_path)) { | 370 if (base::PathExists(upload_list_path)) { |
| 372 if (!base::ReadFileToString(upload_list_path, &contents)) { | 371 if (!base::ReadFileToString(upload_list_path, &contents)) { |
| 373 DPLOG(WARNING) << "Could not read WebRTC log list file."; | 372 DPLOG(WARNING) << "Could not read WebRTC log list file."; |
| 374 return; | 373 return; |
| 375 } | 374 } |
| (...skipping 23 matching lines...) Expand all Loading... |
| 399 if (written != static_cast<int>(contents.size())) { | 398 if (written != static_cast<int>(contents.size())) { |
| 400 DPLOG(WARNING) << "Could not write all data to WebRTC log list file: " | 399 DPLOG(WARNING) << "Could not write all data to WebRTC log list file: " |
| 401 << written; | 400 << written; |
| 402 } | 401 } |
| 403 } | 402 } |
| 404 | 403 |
| 405 void WebRtcLogUploader::AddUploadedLogInfoToUploadListFile( | 404 void WebRtcLogUploader::AddUploadedLogInfoToUploadListFile( |
| 406 const base::FilePath& upload_list_path, | 405 const base::FilePath& upload_list_path, |
| 407 const std::string& local_log_id, | 406 const std::string& local_log_id, |
| 408 const std::string& report_id) { | 407 const std::string& report_id) { |
| 409 DCHECK(file_thread_checker_.CalledOnValidThread()); | 408 DCHECK(blocking_sequence_checker_.CalledOnValidSequencedThread()); |
| 410 DCHECK(!upload_list_path.empty()); | 409 DCHECK(!upload_list_path.empty()); |
| 411 DCHECK(!local_log_id.empty()); | 410 DCHECK(!local_log_id.empty()); |
| 412 DCHECK(!report_id.empty()); | 411 DCHECK(!report_id.empty()); |
| 413 | 412 |
| 414 std::string contents; | 413 std::string contents; |
| 415 | 414 |
| 416 if (base::PathExists(upload_list_path)) { | 415 if (base::PathExists(upload_list_path)) { |
| 417 if (!base::ReadFileToString(upload_list_path, &contents)) { | 416 if (!base::ReadFileToString(upload_list_path, &contents)) { |
| 418 DPLOG(WARNING) << "Could not read WebRTC log list file."; | 417 DPLOG(WARNING) << "Could not read WebRTC log list file."; |
| 419 return; | 418 return; |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 454 if (!success) { | 453 if (!success) { |
| 455 error_message = "Uploading failed, response code: " + | 454 error_message = "Uploading failed, response code: " + |
| 456 base::IntToString(response_code); | 455 base::IntToString(response_code); |
| 457 } | 456 } |
| 458 content::BrowserThread::PostTask( | 457 content::BrowserThread::PostTask( |
| 459 content::BrowserThread::UI, FROM_HERE, | 458 content::BrowserThread::UI, FROM_HERE, |
| 460 base::Bind(upload_done_data.callback, success, report_id, | 459 base::Bind(upload_done_data.callback, success, report_id, |
| 461 error_message)); | 460 error_message)); |
| 462 } | 461 } |
| 463 } | 462 } |
| OLD | NEW |