| 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..2efac049bdaae85bd45f4cc404bd1744f04d4141 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(), '/',
|
| + &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);
|
|
|
|
|