Chromium Code Reviews| 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..6f62b9d0bb6ef1b7cc6922cda0c747f184081039 100644 |
| --- a/chrome/browser/tracing/crash_service_uploader.cc |
| +++ b/chrome/browser/tracing/crash_service_uploader.cc |
| @@ -50,6 +50,43 @@ TraceCrashServiceUploader::TraceCrashServiceUploader( |
| upload_url = command_line.GetSwitchValueASCII(switches::kTraceUploadURL); |
| } |
| SetUploadURL(upload_url); |
| + |
| +#if defined(OS_WIN) |
| + const char product[] = "Chrome"; |
| +#elif defined(OS_MACOSX) |
| + const char product[] = "Chrome_Mac"; |
| +#elif defined(OS_LINUX) |
| + const char product[] = "Chrome_Linux"; |
| +#elif defined(OS_ANDROID) |
| + const char product[] = "Chrome_Android"; |
| +#elif defined(OS_CHROMEOS) |
| + const char product[] = "Chrome_ChromeOS"; |
| +#else |
| +#error Platform not supported. |
| +#endif |
| + |
| + // VersionInfo::ProductNameAndVersionForUserAgent() returns a string like |
| + // "Chrome/aa.bb.cc.dd", split out the part before the "/". |
| + chrome::VersionInfo version_info; |
| + std::vector<std::string> product_components; |
| + base::SplitString(version_info.ProductNameAndVersionForUserAgent(), '/', |
|
oystein (OOO til 10th of July)
2015/06/12 18:14:16
Why have this twice now?
shatch
2015/06/12 19:05:54
This was actually just moved from earlier in the f
|
| + &product_components); |
| + DCHECK_EQ(2U, product_components.size()); |
| + std::string version; |
| + if (product_components.size() == 2U) { |
| + version = product_components[1]; |
| + } else { |
| + version = "unknown"; |
| + } |
| + |
| + metadata_.insert(std::pair<std::string, std::string>("prod", product)); |
| + metadata_.insert( |
| + std::pair<std::string, std::string>("ver", version + "-trace")); |
| + metadata_.insert(std::pair<std::string, std::string>("guid", "0")); |
| + metadata_.insert(std::pair<std::string, std::string>("type", "trace")); |
| + // No minidump means no need for crash to process the report. |
| + metadata_.insert( |
| + std::pair<std::string, std::string>("should_process", "false")); |
| } |
| TraceCrashServiceUploader::~TraceCrashServiceUploader() { |
| @@ -64,6 +101,12 @@ void TraceCrashServiceUploader::SetUploadURL(const std::string& url) { |
| upload_url_.clear(); |
| } |
| +void TraceCrashServiceUploader::SetMetadata( |
| + const std::map<std::string, std::string>& metadata) { |
| + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| + metadata_.insert(metadata.begin(), metadata.end()); |
| +} |
| + |
| void TraceCrashServiceUploader::OnURLFetchComplete( |
| const net::URLFetcher* source) { |
| DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| @@ -104,13 +147,14 @@ void TraceCrashServiceUploader::DoUpload( |
| content::BrowserThread::PostTask( |
| content::BrowserThread::FILE, FROM_HERE, |
| base::Bind(&TraceCrashServiceUploader::DoUploadOnFileThread, |
| - base::Unretained(this), file_contents, upload_url_, |
| + base::Unretained(this), file_contents, upload_url_, metadata_, |
| progress_callback, done_callback)); |
| } |
| void TraceCrashServiceUploader::DoUploadOnFileThread( |
| const std::string& file_contents, |
| const std::string& upload_url, |
| + const std::map<std::string, std::string>& metadata, |
| const UploadProgressCallback& progress_callback, |
| const UploadDoneCallback& done_callback) { |
| DCHECK_CURRENTLY_ON(content::BrowserThread::FILE); |
| @@ -124,34 +168,6 @@ void TraceCrashServiceUploader::DoUploadOnFileThread( |
| return; |
| } |
| -#if defined(OS_WIN) |
| - const char product[] = "Chrome"; |
| -#elif defined(OS_MACOSX) |
| - const char product[] = "Chrome_Mac"; |
| -#elif defined(OS_LINUX) |
| - const char product[] = "Chrome_Linux"; |
| -#elif defined(OS_ANDROID) |
| - const char product[] = "Chrome_Android"; |
| -#elif defined(OS_CHROMEOS) |
| - const char product[] = "Chrome_ChromeOS"; |
| -#else |
| -#error Platform not supported. |
| -#endif |
| - |
| - // VersionInfo::ProductNameAndVersionForUserAgent() returns a string like |
| - // "Chrome/aa.bb.cc.dd", split out the part before the "/". |
| - chrome::VersionInfo version_info; |
| - std::vector<std::string> product_components; |
| - base::SplitString(version_info.ProductNameAndVersionForUserAgent(), '/', |
| - &product_components); |
| - DCHECK_EQ(2U, product_components.size()); |
| - std::string version; |
| - if (product_components.size() == 2U) { |
| - version = product_components[1]; |
| - } else { |
| - version = "unknown"; |
| - } |
| - |
| if (url_fetcher_.get()) { |
| OnUploadError("Already uploading."); |
| return; |
| @@ -166,7 +182,7 @@ void TraceCrashServiceUploader::DoUploadOnFileThread( |
| } |
| std::string post_data; |
| - SetupMultipart(product, version, "trace.json.gz", |
| + SetupMultipart(metadata, "trace.json.gz", |
| std::string(compressed_contents.get(), compressed_bytes), |
| &post_data); |
| @@ -184,22 +200,14 @@ void TraceCrashServiceUploader::OnUploadError(std::string error_message) { |
| } |
| void TraceCrashServiceUploader::SetupMultipart( |
| - const std::string& product, |
| - const std::string& version, |
| + const std::map<std::string, std::string> metadata, |
| const std::string& trace_filename, |
| const std::string& trace_contents, |
| std::string* post_data) { |
| - net::AddMultipartValueForUpload("prod", product, kMultipartBoundary, "", |
| - post_data); |
| - net::AddMultipartValueForUpload("ver", version + "-trace", kMultipartBoundary, |
| - "", post_data); |
| - net::AddMultipartValueForUpload("guid", "0", kMultipartBoundary, "", |
| - post_data); |
| - net::AddMultipartValueForUpload("type", "trace", kMultipartBoundary, "", |
| - post_data); |
| - // No minidump means no need for crash to process the report. |
| - net::AddMultipartValueForUpload("should_process", "false", kMultipartBoundary, |
| - "", post_data); |
| + for (auto it = metadata.begin(); it != metadata.end(); ++it) { |
| + net::AddMultipartValueForUpload(it->first, it->second, kMultipartBoundary, |
| + "", post_data); |
| + } |
| AddTraceFile(trace_filename, trace_contents, post_data); |