Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(243)

Side by Side Diff: chrome/browser/tracing/crash_service_uploader.cc

Issue 1002103004: NOT FOR REVIEW - Slow Reports Reference Implementation Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: First pass stringification. Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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",
163 std::string(compressed_contents.get(), compressed_bytes), 162 file_contents,
164 &post_data); 163 &post_data);
164 // scoped_ptr<char[]> compressed_contents(new char[kMaxUploadBytes]);
165 // int compressed_bytes;
166 // if (!Compress(file_contents, kMaxUploadBytes, compressed_contents.get(),
167 // &compressed_bytes)) {
168 // OnUploadError("Compressing file failed.");
169 // return;
170 // }
171 //
172 // std::string post_data;
173 // SetupMultipart(product, version, "trace.json.gz",
174 // std::string(compressed_contents.get(), compressed_bytes),
175 // &post_data);
165 176
166 content::BrowserThread::PostTask( 177 content::BrowserThread::PostTask(
167 content::BrowserThread::UI, FROM_HERE, 178 content::BrowserThread::UI, FROM_HERE,
168 base::Bind(&TraceCrashServiceUploader::CreateAndStartURLFetcher, 179 base::Bind(&TraceCrashServiceUploader::CreateAndStartURLFetcher,
169 base::Unretained(this), upload_url, post_data)); 180 base::Unretained(this), upload_url, post_data));
170 } 181 }
171 182
172 void TraceCrashServiceUploader::OnUploadError(std::string error_message) { 183 void TraceCrashServiceUploader::OnUploadError(std::string error_message) {
173 LOG(ERROR) << error_message; 184 LOG(ERROR) << error_message;
174 content::BrowserThread::PostTask( 185 content::BrowserThread::PostTask(
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
255 std::string content_type = kUploadContentType; 266 std::string content_type = kUploadContentType;
256 content_type.append("; boundary="); 267 content_type.append("; boundary=");
257 content_type.append(kMultipartBoundary); 268 content_type.append(kMultipartBoundary);
258 269
259 url_fetcher_.reset( 270 url_fetcher_.reset(
260 net::URLFetcher::Create(GURL(upload_url), net::URLFetcher::POST, this)); 271 net::URLFetcher::Create(GURL(upload_url), net::URLFetcher::POST, this));
261 url_fetcher_->SetRequestContext(request_context_); 272 url_fetcher_->SetRequestContext(request_context_);
262 url_fetcher_->SetUploadData(content_type, post_data); 273 url_fetcher_->SetUploadData(content_type, post_data);
263 url_fetcher_->Start(); 274 url_fetcher_->Start();
264 } 275 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698