Index: chrome/browser/tracing/crash_service_uploader.cc |
diff --git a/chrome/browser/tracing/crash_service_uploader.cc b/chrome/browser/tracing/crash_service_uploader.cc |
index 9224a58b1c98c2070bdbff7e91999dbb193d1944..b3d715acdd71d318243754265b54e74e30057a9f 100644 |
--- a/chrome/browser/tracing/crash_service_uploader.cc |
+++ b/chrome/browser/tracing/crash_service_uploader.cc |
@@ -8,6 +8,7 @@ |
#include "base/files/file_path.h" |
#include "base/files/file_util.h" |
#include "base/format_macros.h" |
+#include "base/json/json_writer.h" |
#include "base/memory/shared_memory.h" |
#include "base/strings/string_number_conversions.h" |
#include "base/strings/string_split.h" |
@@ -98,6 +99,7 @@ void TraceCrashServiceUploader::OnURLFetchUploadProgress( |
void TraceCrashServiceUploader::DoUpload( |
const std::string& file_contents, |
+ scoped_ptr<base::DictionaryValue> metadata, |
const UploadProgressCallback& progress_callback, |
const UploadDoneCallback& done_callback) { |
DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
@@ -105,12 +107,14 @@ void TraceCrashServiceUploader::DoUpload( |
content::BrowserThread::FILE, FROM_HERE, |
base::Bind(&TraceCrashServiceUploader::DoUploadOnFileThread, |
base::Unretained(this), file_contents, upload_url_, |
- progress_callback, done_callback)); |
+ base::Passed(metadata.Pass()), progress_callback, |
+ done_callback)); |
} |
void TraceCrashServiceUploader::DoUploadOnFileThread( |
const std::string& file_contents, |
const std::string& upload_url, |
+ scoped_ptr<base::DictionaryValue> metadata, |
const UploadProgressCallback& progress_callback, |
const UploadDoneCallback& done_callback) { |
DCHECK_CURRENTLY_ON(content::BrowserThread::FILE); |
@@ -166,7 +170,7 @@ void TraceCrashServiceUploader::DoUploadOnFileThread( |
} |
std::string post_data; |
- SetupMultipart(product, version, "trace.json.gz", |
+ SetupMultipart(product, version, metadata.Pass(), "trace.json.gz", |
std::string(compressed_contents.get(), compressed_bytes), |
&post_data); |
@@ -186,6 +190,7 @@ void TraceCrashServiceUploader::OnUploadError(std::string error_message) { |
void TraceCrashServiceUploader::SetupMultipart( |
const std::string& product, |
const std::string& version, |
+ scoped_ptr<base::DictionaryValue> metadata, |
const std::string& trace_filename, |
const std::string& trace_contents, |
std::string* post_data) { |
@@ -200,6 +205,19 @@ void TraceCrashServiceUploader::SetupMultipart( |
// No minidump means no need for crash to process the report. |
net::AddMultipartValueForUpload("should_process", "false", kMultipartBoundary, |
"", post_data); |
+ if (metadata) { |
+ for (base::DictionaryValue::Iterator it(*metadata); !it.IsAtEnd(); |
+ it.Advance()) { |
+ std::string value; |
+ if (!it.value().GetAsString(&value)) { |
+ if (!base::JSONWriter::Write(it.value(), &value)) |
+ continue; |
+ } |
+ |
+ net::AddMultipartValueForUpload(it.key(), value, kMultipartBoundary, "", |
+ post_data); |
+ } |
+ } |
AddTraceFile(trace_filename, trace_contents, post_data); |