Index: chrome/browser/media/webrtc_log_uploader.cc |
diff --git a/chrome/browser/media/webrtc_log_uploader.cc b/chrome/browser/media/webrtc_log_uploader.cc |
index 0ed5f1e051c1a64cebf4be09b9f86fd66b126cfa..740e0ac776b06aa9e5cfb28ed251a449503aeab0 100644 |
--- a/chrome/browser/media/webrtc_log_uploader.cc |
+++ b/chrome/browser/media/webrtc_log_uploader.cc |
@@ -58,6 +58,23 @@ void WebRtcLogUploader::OnURLFetchComplete( |
std::string report_id; |
if (response_code == 200 && source->GetResponseAsString(&report_id)) |
AddUploadedLogInfoToUploadListFile(report_id); |
+ DCHECK(upload_done_data_.find(source) != upload_done_data_.end()); |
+ content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE, |
+ base::Bind(&WebRtcLoggingHandlerHost::UploadLogDone, |
+ upload_done_data_[source].host)); |
+ if (!upload_done_data_[source].callback.is_null()) { |
+ bool success = response_code == 200; |
+ std::string error_message; |
+ if (!success) { |
+ error_message = "Uploading failed, response code: " + |
+ base::IntToString(response_code); |
+ } |
+ content::BrowserThread::PostTask( |
+ content::BrowserThread::UI, FROM_HERE, |
+ base::Bind(upload_done_data_[source].callback, success, report_id, |
+ error_message)); |
+ } |
+ upload_done_data_.erase(source); |
} |
void WebRtcLogUploader::OnURLFetchUploadProgress( |
@@ -73,18 +90,24 @@ bool WebRtcLogUploader::ApplyForStartLogging() { |
return false; |
} |
-void WebRtcLogUploader::UploadLog(net::URLRequestContextGetter* request_context, |
- scoped_ptr<base::SharedMemory> shared_memory, |
- uint32 length, |
- const std::string& app_session_id, |
- const std::string& app_url) { |
+void WebRtcLogUploader::LoggingStoppedDontUpload() { |
+ content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE, |
+ base::Bind(&WebRtcLogUploader::DecreaseLogCount, base::Unretained(this))); |
+} |
+ |
+void WebRtcLogUploader::LoggingStoppedDoUpload( |
+ net::URLRequestContextGetter* request_context, |
+ scoped_ptr<base::SharedMemory> shared_memory, |
+ uint32 length, |
+ const std::map<std::string, std::string>& meta_data, |
+ const WebRtcLogUploadDoneData& upload_done_data) { |
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::FILE)); |
DCHECK(shared_memory); |
DCHECK(shared_memory->memory()); |
std::string post_data; |
SetupMultipart(&post_data, reinterpret_cast<uint8*>(shared_memory->memory()), |
- length, app_session_id, app_url); |
+ length, meta_data); |
// If a test has set the test string pointer, write to it and skip uploading. |
// This will be removed when the browser test for this feature is fully done |
@@ -103,16 +126,15 @@ void WebRtcLogUploader::UploadLog(net::URLRequestContextGetter* request_context, |
url_fetcher->SetRequestContext(request_context); |
url_fetcher->SetUploadData(content_type, post_data); |
url_fetcher->Start(); |
+ upload_done_data_[url_fetcher] = upload_done_data; |
content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE, |
base::Bind(&WebRtcLogUploader::DecreaseLogCount, base::Unretained(this))); |
} |
-void WebRtcLogUploader::SetupMultipart(std::string* post_data, |
- uint8* log_buffer, |
- uint32 log_buffer_length, |
- const std::string& app_session_id, |
- const std::string& app_url) { |
+void WebRtcLogUploader::SetupMultipart( |
+ std::string* post_data, uint8* log_buffer, uint32 log_buffer_length, |
+ const std::map<std::string, std::string>& meta_data) { |
#if defined(OS_WIN) |
const char product[] = "Chrome"; |
#elif defined(OS_MACOSX) |
@@ -140,10 +162,14 @@ void WebRtcLogUploader::SetupMultipart(std::string* post_data, |
"", post_data); |
net::AddMultipartValueForUpload("type", "webrtc_log", kMultipartBoundary, |
"", post_data); |
- net::AddMultipartValueForUpload("app_session_id", app_session_id, |
- kMultipartBoundary, "", post_data); |
- net::AddMultipartValueForUpload("url", app_url, kMultipartBoundary, |
- "", post_data); |
+ |
+ // Add custom meta data. |
+ std::map<std::string, std::string>::const_iterator it = meta_data.begin(); |
+ for (; it != meta_data.end(); ++it) { |
+ net::AddMultipartValueForUpload(it->first, it->second, kMultipartBoundary, |
+ "", post_data); |
+ } |
+ |
AddLogData(post_data, log_buffer, log_buffer_length); |
net::AddMultipartFinalDelimiterForUpload(kMultipartBoundary, post_data); |
} |