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 28 matching lines...) Expand all Loading... |
39 } // namespace | 39 } // namespace |
40 | 40 |
41 WebRtcLogUploadDoneData::WebRtcLogUploadDoneData() {} | 41 WebRtcLogUploadDoneData::WebRtcLogUploadDoneData() {} |
42 | 42 |
43 WebRtcLogUploadDoneData::~WebRtcLogUploadDoneData() {} | 43 WebRtcLogUploadDoneData::~WebRtcLogUploadDoneData() {} |
44 | 44 |
45 WebRtcLogUploader::WebRtcLogUploader() | 45 WebRtcLogUploader::WebRtcLogUploader() |
46 : log_count_(0), | 46 : log_count_(0), |
47 post_data_(NULL), | 47 post_data_(NULL), |
48 shutting_down_(false) { | 48 shutting_down_(false) { |
49 file_thread_checker_.DetachFromThread(); | 49 blocking_sequence_checker_.DetachFromSequence(); |
50 } | 50 } |
51 | 51 |
52 WebRtcLogUploader::~WebRtcLogUploader() { | 52 WebRtcLogUploader::~WebRtcLogUploader() { |
53 DCHECK(create_thread_checker_.CalledOnValidThread()); | 53 DCHECK(create_thread_checker_.CalledOnValidThread()); |
54 DCHECK(upload_done_data_.empty()); | 54 DCHECK(upload_done_data_.empty()); |
55 DCHECK(shutting_down_); | 55 DCHECK(shutting_down_); |
56 } | 56 } |
57 | 57 |
58 void WebRtcLogUploader::OnURLFetchComplete( | 58 void WebRtcLogUploader::OnURLFetchComplete( |
59 const net::URLFetcher* source) { | 59 const net::URLFetcher* source) { |
60 DCHECK(create_thread_checker_.CalledOnValidThread()); | 60 DCHECK(create_thread_checker_.CalledOnValidThread()); |
61 DCHECK(upload_done_data_.find(source) != upload_done_data_.end()); | 61 DCHECK(upload_done_data_.find(source) != upload_done_data_.end()); |
62 DCHECK(!shutting_down_); | 62 DCHECK(!shutting_down_); |
63 int response_code = source->GetResponseCode(); | 63 int response_code = source->GetResponseCode(); |
64 UploadDoneDataMap::iterator it = upload_done_data_.find(source); | 64 UploadDoneDataMap::iterator it = upload_done_data_.find(source); |
65 if (it != upload_done_data_.end()) { | 65 if (it != upload_done_data_.end()) { |
66 // The log path can be empty here if we failed getting it before. We still | 66 // The log path can be empty here if we failed getting it before. We still |
67 // upload the log if that's the case. | 67 // upload the log if that's the case. |
68 std::string report_id; | 68 std::string report_id; |
69 if (response_code == kHttpResponseOk && | 69 if (response_code == kHttpResponseOk && |
70 source->GetResponseAsString(&report_id) && | 70 source->GetResponseAsString(&report_id) && |
71 !it->second.log_path.empty()) { | 71 !it->second.log_path.empty()) { |
72 base::FilePath log_list_path = | 72 base::FilePath log_list_path = |
73 WebRtcLogList::GetWebRtcLogListFileForDirectory(it->second.log_path); | 73 WebRtcLogList::GetWebRtcLogListFileForDirectory(it->second.log_path); |
74 content::BrowserThread::PostTask( | 74 content::BrowserThread::PostBlockingPoolTask( |
75 content::BrowserThread::FILE, | |
76 FROM_HERE, | 75 FROM_HERE, |
77 base::Bind(&WebRtcLogUploader::AddUploadedLogInfoToUploadListFile, | 76 base::Bind(&WebRtcLogUploader::AddUploadedLogInfoToUploadListFile, |
78 base::Unretained(this), | 77 base::Unretained(this), |
79 log_list_path, | 78 log_list_path, |
80 it->second.local_log_id, | 79 it->second.local_log_id, |
81 report_id)); | 80 report_id)); |
82 } | 81 } |
83 NotifyUploadDone(response_code, report_id, it->second); | 82 NotifyUploadDone(response_code, report_id, it->second); |
84 upload_done_data_.erase(it); | 83 upload_done_data_.erase(it); |
85 } | 84 } |
(...skipping 17 matching lines...) Expand all Loading... |
103 void WebRtcLogUploader::LoggingStoppedDontUpload() { | 102 void WebRtcLogUploader::LoggingStoppedDontUpload() { |
104 content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE, | 103 content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE, |
105 base::Bind(&WebRtcLogUploader::DecreaseLogCount, base::Unretained(this))); | 104 base::Bind(&WebRtcLogUploader::DecreaseLogCount, base::Unretained(this))); |
106 } | 105 } |
107 | 106 |
108 void WebRtcLogUploader::LoggingStoppedDoUpload( | 107 void WebRtcLogUploader::LoggingStoppedDoUpload( |
109 scoped_ptr<unsigned char[]> log_buffer, | 108 scoped_ptr<unsigned char[]> log_buffer, |
110 uint32 length, | 109 uint32 length, |
111 const std::map<std::string, std::string>& meta_data, | 110 const std::map<std::string, std::string>& meta_data, |
112 const WebRtcLogUploadDoneData& upload_done_data) { | 111 const WebRtcLogUploadDoneData& upload_done_data) { |
113 DCHECK(file_thread_checker_.CalledOnValidThread()); | 112 DCHECK(blocking_sequence_checker_.CalledOnValidSequencedThread()); |
114 DCHECK(log_buffer.get()); | 113 DCHECK(log_buffer.get()); |
115 DCHECK(!upload_done_data.log_path.empty()); | 114 DCHECK(!upload_done_data.log_path.empty()); |
116 | 115 |
117 std::vector<uint8> compressed_log; | 116 std::vector<uint8> compressed_log; |
118 CompressLog( | 117 CompressLog( |
119 &compressed_log, reinterpret_cast<uint8*>(&log_buffer[0]), length); | 118 &compressed_log, reinterpret_cast<uint8*>(&log_buffer[0]), length); |
120 | 119 |
121 std::string local_log_id; | 120 std::string local_log_id; |
122 | 121 |
123 if (base::PathExists(upload_done_data.log_path)) { | 122 if (base::PathExists(upload_done_data.log_path)) { |
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
308 } | 307 } |
309 | 308 |
310 void WebRtcLogUploader::DecreaseLogCount() { | 309 void WebRtcLogUploader::DecreaseLogCount() { |
311 DCHECK(create_thread_checker_.CalledOnValidThread()); | 310 DCHECK(create_thread_checker_.CalledOnValidThread()); |
312 --log_count_; | 311 --log_count_; |
313 } | 312 } |
314 | 313 |
315 void WebRtcLogUploader::WriteCompressedLogToFile( | 314 void WebRtcLogUploader::WriteCompressedLogToFile( |
316 const std::vector<uint8>& compressed_log, | 315 const std::vector<uint8>& compressed_log, |
317 const base::FilePath& log_file_path) { | 316 const base::FilePath& log_file_path) { |
318 DCHECK(file_thread_checker_.CalledOnValidThread()); | 317 DCHECK(blocking_sequence_checker_.CalledOnValidSequencedThread()); |
319 DCHECK(!compressed_log.empty()); | 318 DCHECK(!compressed_log.empty()); |
320 base::WriteFile(log_file_path, | 319 base::WriteFile(log_file_path, |
321 reinterpret_cast<const char*>(&compressed_log[0]), | 320 reinterpret_cast<const char*>(&compressed_log[0]), |
322 compressed_log.size()); | 321 compressed_log.size()); |
323 } | 322 } |
324 | 323 |
325 void WebRtcLogUploader::AddLocallyStoredLogInfoToUploadListFile( | 324 void WebRtcLogUploader::AddLocallyStoredLogInfoToUploadListFile( |
326 const base::FilePath& upload_list_path, | 325 const base::FilePath& upload_list_path, |
327 const std::string& local_log_id) { | 326 const std::string& local_log_id) { |
328 DCHECK(file_thread_checker_.CalledOnValidThread()); | 327 DCHECK(blocking_sequence_checker_.CalledOnValidSequencedThread()); |
329 DCHECK(!upload_list_path.empty()); | 328 DCHECK(!upload_list_path.empty()); |
330 DCHECK(!local_log_id.empty()); | 329 DCHECK(!local_log_id.empty()); |
331 | 330 |
332 std::string contents; | 331 std::string contents; |
333 | 332 |
334 if (base::PathExists(upload_list_path)) { | 333 if (base::PathExists(upload_list_path)) { |
335 if (!base::ReadFileToString(upload_list_path, &contents)) { | 334 if (!base::ReadFileToString(upload_list_path, &contents)) { |
336 DPLOG(WARNING) << "Could not read WebRTC log list file."; | 335 DPLOG(WARNING) << "Could not read WebRTC log list file."; |
337 return; | 336 return; |
338 } | 337 } |
(...skipping 23 matching lines...) Expand all Loading... |
362 if (written != static_cast<int>(contents.size())) { | 361 if (written != static_cast<int>(contents.size())) { |
363 DPLOG(WARNING) << "Could not write all data to WebRTC log list file: " | 362 DPLOG(WARNING) << "Could not write all data to WebRTC log list file: " |
364 << written; | 363 << written; |
365 } | 364 } |
366 } | 365 } |
367 | 366 |
368 void WebRtcLogUploader::AddUploadedLogInfoToUploadListFile( | 367 void WebRtcLogUploader::AddUploadedLogInfoToUploadListFile( |
369 const base::FilePath& upload_list_path, | 368 const base::FilePath& upload_list_path, |
370 const std::string& local_log_id, | 369 const std::string& local_log_id, |
371 const std::string& report_id) { | 370 const std::string& report_id) { |
372 DCHECK(file_thread_checker_.CalledOnValidThread()); | 371 DCHECK(blocking_sequence_checker_.CalledOnValidSequencedThread()); |
373 DCHECK(!upload_list_path.empty()); | 372 DCHECK(!upload_list_path.empty()); |
374 DCHECK(!local_log_id.empty()); | 373 DCHECK(!local_log_id.empty()); |
375 DCHECK(!report_id.empty()); | 374 DCHECK(!report_id.empty()); |
376 | 375 |
377 std::string contents; | 376 std::string contents; |
378 | 377 |
379 if (base::PathExists(upload_list_path)) { | 378 if (base::PathExists(upload_list_path)) { |
380 if (!base::ReadFileToString(upload_list_path, &contents)) { | 379 if (!base::ReadFileToString(upload_list_path, &contents)) { |
381 DPLOG(WARNING) << "Could not read WebRTC log list file."; | 380 DPLOG(WARNING) << "Could not read WebRTC log list file."; |
382 return; | 381 return; |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
417 if (!success) { | 416 if (!success) { |
418 error_message = "Uploading failed, response code: " + | 417 error_message = "Uploading failed, response code: " + |
419 base::IntToString(response_code); | 418 base::IntToString(response_code); |
420 } | 419 } |
421 content::BrowserThread::PostTask( | 420 content::BrowserThread::PostTask( |
422 content::BrowserThread::UI, FROM_HERE, | 421 content::BrowserThread::UI, FROM_HERE, |
423 base::Bind(upload_done_data.callback, success, report_id, | 422 base::Bind(upload_done_data.callback, success, report_id, |
424 error_message)); | 423 error_message)); |
425 } | 424 } |
426 } | 425 } |
OLD | NEW |