OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/tracing/crash_service_uploader.h" | 5 #include "chrome/browser/tracing/crash_service_uploader.h" |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/files/file_path.h" | 8 #include "base/files/file_path.h" |
9 #include "base/files/file_util.h" | 9 #include "base/files/file_util.h" |
10 #include "base/format_macros.h" | 10 #include "base/format_macros.h" |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
86 const UploadProgressCallback& progress_callback, | 86 const UploadProgressCallback& progress_callback, |
87 const UploadDoneCallback& done_callback) { | 87 const UploadDoneCallback& done_callback) { |
88 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 88 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
89 content::BrowserThread::PostTask( | 89 content::BrowserThread::PostTask( |
90 content::BrowserThread::FILE, FROM_HERE, | 90 content::BrowserThread::FILE, FROM_HERE, |
91 base::Bind(&TraceCrashServiceUploader::DoUploadOnFileThread, | 91 base::Bind(&TraceCrashServiceUploader::DoUploadOnFileThread, |
92 base::Unretained(this), file_contents, progress_callback, | 92 base::Unretained(this), file_contents, progress_callback, |
93 done_callback)); | 93 done_callback)); |
94 } | 94 } |
95 | 95 |
| 96 void TraceCrashServiceUploader::SetUploadURL(const std::string& url) { |
| 97 upload_url_ = url; |
| 98 } |
| 99 |
96 void TraceCrashServiceUploader::DoUploadOnFileThread( | 100 void TraceCrashServiceUploader::DoUploadOnFileThread( |
97 const std::string& file_contents, | 101 const std::string& file_contents, |
98 const UploadProgressCallback& progress_callback, | 102 const UploadProgressCallback& progress_callback, |
99 const UploadDoneCallback& done_callback) { | 103 const UploadDoneCallback& done_callback) { |
100 DCHECK_CURRENTLY_ON(content::BrowserThread::FILE); | 104 DCHECK_CURRENTLY_ON(content::BrowserThread::FILE); |
101 DCHECK(!url_fetcher_.get()); | 105 DCHECK(!url_fetcher_.get()); |
102 | 106 |
103 progress_callback_ = progress_callback; | 107 progress_callback_ = progress_callback; |
104 done_callback_ = done_callback; | 108 done_callback_ = done_callback; |
105 | 109 |
106 const base::CommandLine& command_line = | 110 const base::CommandLine& command_line = |
107 *base::CommandLine::ForCurrentProcess(); | 111 *base::CommandLine::ForCurrentProcess(); |
108 std::string upload_url = kUploadURL; | 112 std::string upload_url = kUploadURL; |
| 113 if (!upload_url_.empty()) |
| 114 upload_url = upload_url_; |
| 115 |
109 if (command_line.HasSwitch(switches::kTraceUploadURL)) { | 116 if (command_line.HasSwitch(switches::kTraceUploadURL)) { |
110 upload_url = command_line.GetSwitchValueASCII(switches::kTraceUploadURL); | 117 upload_url = command_line.GetSwitchValueASCII(switches::kTraceUploadURL); |
111 } | 118 } |
112 if (!GURL(upload_url).is_valid()) | 119 if (!GURL(upload_url).is_valid()) |
113 upload_url.clear(); | 120 upload_url.clear(); |
114 | 121 |
115 if (upload_url.empty()) { | 122 if (upload_url.empty()) { |
116 OnUploadError("Upload URL empty or invalid"); | 123 OnUploadError("Upload URL empty or invalid"); |
117 return; | 124 return; |
118 } | 125 } |
(...skipping 24 matching lines...) Expand all Loading... |
143 version = product_components[1]; | 150 version = product_components[1]; |
144 } else { | 151 } else { |
145 version = "unknown"; | 152 version = "unknown"; |
146 } | 153 } |
147 | 154 |
148 if (url_fetcher_.get()) { | 155 if (url_fetcher_.get()) { |
149 OnUploadError("Already uploading."); | 156 OnUploadError("Already uploading."); |
150 return; | 157 return; |
151 } | 158 } |
152 | 159 |
153 scoped_ptr<char[]> compressed_contents(new char[kMaxUploadBytes]); | |
154 int compressed_bytes; | |
155 if (!Compress(file_contents, kMaxUploadBytes, compressed_contents.get(), | |
156 &compressed_bytes)) { | |
157 OnUploadError("Compressing file failed."); | |
158 return; | |
159 } | |
160 | |
161 std::string post_data; | 160 std::string post_data; |
162 SetupMultipart(product, version, "trace.json.gz", | 161 SetupMultipart(product, version, "trace.json.gz", file_contents, &post_data); |
163 std::string(compressed_contents.get(), compressed_bytes), | 162 // scoped_ptr<char[]> compressed_contents(new char[kMaxUploadBytes]); |
164 &post_data); | 163 // int compressed_bytes; |
| 164 // if (!Compress(file_contents, kMaxUploadBytes, compressed_contents.get(), |
| 165 // &compressed_bytes)) { |
| 166 // OnUploadError("Compressing file failed."); |
| 167 // return; |
| 168 // } |
| 169 // |
| 170 // std::string post_data; |
| 171 // SetupMultipart(product, version, "trace.json.gz", |
| 172 // std::string(compressed_contents.get(), compressed_bytes), |
| 173 // &post_data); |
165 | 174 |
166 content::BrowserThread::PostTask( | 175 content::BrowserThread::PostTask( |
167 content::BrowserThread::UI, FROM_HERE, | 176 content::BrowserThread::UI, FROM_HERE, |
168 base::Bind(&TraceCrashServiceUploader::CreateAndStartURLFetcher, | 177 base::Bind(&TraceCrashServiceUploader::CreateAndStartURLFetcher, |
169 base::Unretained(this), upload_url, post_data)); | 178 base::Unretained(this), upload_url, post_data)); |
170 } | 179 } |
171 | 180 |
172 void TraceCrashServiceUploader::OnUploadError(std::string error_message) { | 181 void TraceCrashServiceUploader::OnUploadError(std::string error_message) { |
173 LOG(ERROR) << error_message; | 182 LOG(ERROR) << error_message; |
174 content::BrowserThread::PostTask( | 183 content::BrowserThread::PostTask( |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
255 std::string content_type = kUploadContentType; | 264 std::string content_type = kUploadContentType; |
256 content_type.append("; boundary="); | 265 content_type.append("; boundary="); |
257 content_type.append(kMultipartBoundary); | 266 content_type.append(kMultipartBoundary); |
258 | 267 |
259 url_fetcher_.reset( | 268 url_fetcher_.reset( |
260 net::URLFetcher::Create(GURL(upload_url), net::URLFetcher::POST, this)); | 269 net::URLFetcher::Create(GURL(upload_url), net::URLFetcher::POST, this)); |
261 url_fetcher_->SetRequestContext(request_context_); | 270 url_fetcher_->SetRequestContext(request_context_); |
262 url_fetcher_->SetUploadData(content_type, post_data); | 271 url_fetcher_->SetUploadData(content_type, post_data); |
263 url_fetcher_->Start(); | 272 url_fetcher_->Start(); |
264 } | 273 } |
OLD | NEW |