OLD | NEW |
1 // Copyright 2015 The Crashpad Authors. All rights reserved. | 1 // Copyright 2015 The Crashpad Authors. All rights reserved. |
2 // | 2 // |
3 // Licensed under the Apache License, Version 2.0 (the "License"); | 3 // Licensed under the Apache License, Version 2.0 (the "License"); |
4 // you may not use this file except in compliance with the License. | 4 // you may not use this file except in compliance with the License. |
5 // You may obtain a copy of the License at | 5 // You may obtain a copy of the License at |
6 // | 6 // |
7 // http://www.apache.org/licenses/LICENSE-2.0 | 7 // http://www.apache.org/licenses/LICENSE-2.0 |
8 // | 8 // |
9 // Unless required by applicable law or agreed to in writing, software | 9 // Unless required by applicable law or agreed to in writing, software |
10 // distributed under the License is distributed on an "AS IS" BASIS, | 10 // distributed under the License is distributed on an "AS IS" BASIS, |
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
183 return; | 183 return; |
184 } | 184 } |
185 } | 185 } |
186 } | 186 } |
187 | 187 |
188 void CrashReportUploadThread::ProcessPendingReport( | 188 void CrashReportUploadThread::ProcessPendingReport( |
189 const CrashReportDatabase::Report& report) { | 189 const CrashReportDatabase::Report& report) { |
190 Settings* const settings = database_->GetSettings(); | 190 Settings* const settings = database_->GetSettings(); |
191 | 191 |
192 bool uploads_enabled; | 192 bool uploads_enabled; |
193 if (!settings->GetUploadsEnabled(&uploads_enabled) || | 193 if (url_.empty() || |
194 !uploads_enabled || | 194 (!report.upload_explicitly_requested && |
195 url_.empty()) { | 195 (!settings->GetUploadsEnabled(&uploads_enabled) || !uploads_enabled))) { |
196 // If the upload-enabled state can’t be determined, uploads are disabled, or | 196 // Don’t attempt an upload if there’s no URL to upload to. Allow upload if |
197 // there’s no URL to upload to, don’t attempt to upload the new report. | 197 // it has been explicitly requested by the user, otherwise, respect the |
| 198 // upload-enabled state stored in the database’s settings. |
198 database_->SkipReportUpload(report.uuid); | 199 database_->SkipReportUpload(report.uuid); |
199 return; | 200 return; |
200 } | 201 } |
201 | 202 |
202 // This currently implements very simplistic rate-limiting, compatible with | 203 // This currently implements very simplistic rate-limiting, compatible with |
203 // the Breakpad client, where the strategy is to permit one upload attempt per | 204 // the Breakpad client, where the strategy is to permit one upload attempt per |
204 // hour, and retire reports that would exceed this limit or for which the | 205 // hour, and retire reports that would exceed this limit or for which the |
205 // upload fails on the first attempt. | 206 // upload fails on the first attempt. |
206 // | 207 // |
207 // TODO(mark): Provide a proper rate-limiting strategy and allow for failed | 208 // TODO(mark): Provide a proper rate-limiting strategy and allow for failed |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
244 case CrashReportDatabase::kBusyError: | 245 case CrashReportDatabase::kBusyError: |
245 return; | 246 return; |
246 | 247 |
247 case CrashReportDatabase::kReportNotFound: | 248 case CrashReportDatabase::kReportNotFound: |
248 case CrashReportDatabase::kFileSystemError: | 249 case CrashReportDatabase::kFileSystemError: |
249 case CrashReportDatabase::kDatabaseError: | 250 case CrashReportDatabase::kDatabaseError: |
250 // In these cases, SkipReportUpload() might not work either, but it’s best | 251 // In these cases, SkipReportUpload() might not work either, but it’s best |
251 // to at least try to get the report out of the way. | 252 // to at least try to get the report out of the way. |
252 database_->SkipReportUpload(report.uuid); | 253 database_->SkipReportUpload(report.uuid); |
253 return; | 254 return; |
| 255 |
| 256 case CrashReportDatabase::kCannotRequestUpload: |
| 257 NOTREACHED(); |
| 258 return; |
254 } | 259 } |
255 | 260 |
256 CallRecordUploadAttempt call_record_upload_attempt(database_, upload_report); | 261 CallRecordUploadAttempt call_record_upload_attempt(database_, upload_report); |
257 | 262 |
258 std::string response_body; | 263 std::string response_body; |
259 UploadResult upload_result = UploadReport(upload_report, &response_body); | 264 UploadResult upload_result = UploadReport(upload_report, &response_body); |
260 switch (upload_result) { | 265 switch (upload_result) { |
261 case UploadResult::kSuccess: | 266 case UploadResult::kSuccess: |
262 call_record_upload_attempt.Disarm(); | 267 call_record_upload_attempt.Disarm(); |
263 database_->RecordUploadAttempt(upload_report, true, response_body); | 268 database_->RecordUploadAttempt(upload_report, true, response_body); |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
330 } | 335 } |
331 | 336 |
332 return UploadResult::kSuccess; | 337 return UploadResult::kSuccess; |
333 } | 338 } |
334 | 339 |
335 void CrashReportUploadThread::DoWork(const WorkerThread* thread) { | 340 void CrashReportUploadThread::DoWork(const WorkerThread* thread) { |
336 ProcessPendingReports(); | 341 ProcessPendingReports(); |
337 } | 342 } |
338 | 343 |
339 } // namespace crashpad | 344 } // namespace crashpad |
OLD | NEW |