| 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 16 matching lines...) Expand all Loading... |
| 27 namespace { | 27 namespace { |
| 28 | 28 |
| 29 class CrashReportDatabaseTest : public testing::Test { | 29 class CrashReportDatabaseTest : public testing::Test { |
| 30 public: | 30 public: |
| 31 CrashReportDatabaseTest() { | 31 CrashReportDatabaseTest() { |
| 32 } | 32 } |
| 33 | 33 |
| 34 protected: | 34 protected: |
| 35 // testing::Test: | 35 // testing::Test: |
| 36 void SetUp() override { | 36 void SetUp() override { |
| 37 db_ = CrashReportDatabase::Initialize(path()); | 37 db_ = CrashReportDatabase::Initialize(path(), true); |
| 38 ASSERT_TRUE(db_); | 38 ASSERT_TRUE(db_); |
| 39 } | 39 } |
| 40 | 40 |
| 41 void ResetDatabase() { | 41 void ResetDatabase() { |
| 42 db_.reset(); | 42 db_.reset(); |
| 43 } | 43 } |
| 44 | 44 |
| 45 CrashReportDatabase* db() { return db_.get(); } | 45 CrashReportDatabase* db() { return db_.get(); } |
| 46 base::FilePath path() const { | 46 base::FilePath path() const { |
| 47 return temp_dir_.path().Append(FILE_PATH_LITERAL("crashpad_test_database")); | 47 return temp_dir_.path().Append(FILE_PATH_LITERAL("crashpad_test_database")); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 68 Settings* const settings = db_->GetSettings(); | 68 Settings* const settings = db_->GetSettings(); |
| 69 ASSERT_TRUE(settings); | 69 ASSERT_TRUE(settings); |
| 70 time_t times[2]; | 70 time_t times[2]; |
| 71 ASSERT_TRUE(settings->GetLastUploadAttemptTime(×[0])); | 71 ASSERT_TRUE(settings->GetLastUploadAttemptTime(×[0])); |
| 72 | 72 |
| 73 const CrashReportDatabase::Report* report = nullptr; | 73 const CrashReportDatabase::Report* report = nullptr; |
| 74 ASSERT_EQ(CrashReportDatabase::kNoError, | 74 ASSERT_EQ(CrashReportDatabase::kNoError, |
| 75 db_->GetReportForUploading(uuid, &report)); | 75 db_->GetReportForUploading(uuid, &report)); |
| 76 EXPECT_NE(UUID(), report->uuid); | 76 EXPECT_NE(UUID(), report->uuid); |
| 77 EXPECT_FALSE(report->file_path.empty()); | 77 EXPECT_FALSE(report->file_path.empty()); |
| 78 EXPECT_TRUE(FileExists(report->file_path)) | 78 EXPECT_TRUE(FileExists(report->file_path)) << report->file_path.value(); |
| 79 << report->file_path.value(); | |
| 80 EXPECT_GT(report->creation_time, 0); | 79 EXPECT_GT(report->creation_time, 0); |
| 81 EXPECT_EQ(CrashReportDatabase::kNoError, | 80 EXPECT_EQ(CrashReportDatabase::kNoError, |
| 82 db_->RecordUploadAttempt(report, successful, id)); | 81 db_->RecordUploadAttempt(report, successful, id)); |
| 83 | 82 |
| 84 ASSERT_TRUE(settings->GetLastUploadAttemptTime(×[1])); | 83 ASSERT_TRUE(settings->GetLastUploadAttemptTime(×[1])); |
| 85 EXPECT_NE(times[1], 0); | 84 EXPECT_NE(times[1], 0); |
| 86 EXPECT_GE(times[1], times[0]); | 85 EXPECT_GE(times[1], times[0]); |
| 87 } | 86 } |
| 88 | 87 |
| 89 void ExpectPreparedCrashReport(const CrashReportDatabase::Report& report) { | 88 void ExpectPreparedCrashReport(const CrashReportDatabase::Report& report) { |
| (...skipping 19 matching lines...) Expand all Loading... |
| 109 | 108 |
| 110 DISALLOW_COPY_AND_ASSIGN(CrashReportDatabaseTest); | 109 DISALLOW_COPY_AND_ASSIGN(CrashReportDatabaseTest); |
| 111 }; | 110 }; |
| 112 | 111 |
| 113 TEST_F(CrashReportDatabaseTest, Initialize) { | 112 TEST_F(CrashReportDatabaseTest, Initialize) { |
| 114 // Initialize the database for the first time, creating it. | 113 // Initialize the database for the first time, creating it. |
| 115 ASSERT_TRUE(db()); | 114 ASSERT_TRUE(db()); |
| 116 | 115 |
| 117 Settings* settings = db()->GetSettings(); | 116 Settings* settings = db()->GetSettings(); |
| 118 | 117 |
| 119 UUID client_ids[2]; | 118 UUID client_ids[3]; |
| 120 ASSERT_TRUE(settings->GetClientID(&client_ids[0])); | 119 ASSERT_TRUE(settings->GetClientID(&client_ids[0])); |
| 121 EXPECT_NE(client_ids[0], UUID()); | 120 EXPECT_NE(client_ids[0], UUID()); |
| 122 | 121 |
| 123 time_t last_upload_attempt_time; | 122 time_t last_upload_attempt_time; |
| 124 ASSERT_TRUE(settings->GetLastUploadAttemptTime(&last_upload_attempt_time)); | 123 ASSERT_TRUE(settings->GetLastUploadAttemptTime(&last_upload_attempt_time)); |
| 125 EXPECT_EQ(0, last_upload_attempt_time); | 124 EXPECT_EQ(0, last_upload_attempt_time); |
| 126 | 125 |
| 127 // Close and reopen the database at the same path. | 126 // Close and reopen the database at the same path. |
| 128 ResetDatabase(); | 127 ResetDatabase(); |
| 129 EXPECT_FALSE(db()); | 128 EXPECT_FALSE(db()); |
| 130 auto db = CrashReportDatabase::Initialize(path()); | 129 auto db = CrashReportDatabase::Initialize(path(), false); |
| 131 ASSERT_TRUE(db); | 130 ASSERT_TRUE(db); |
| 132 | 131 |
| 133 settings = db->GetSettings(); | 132 settings = db->GetSettings(); |
| 134 | 133 |
| 135 ASSERT_TRUE(settings->GetClientID(&client_ids[1])); | 134 ASSERT_TRUE(settings->GetClientID(&client_ids[1])); |
| 136 EXPECT_EQ(client_ids[0], client_ids[1]); | 135 EXPECT_EQ(client_ids[0], client_ids[1]); |
| 137 | 136 |
| 138 ASSERT_TRUE(settings->GetLastUploadAttemptTime(&last_upload_attempt_time)); | 137 ASSERT_TRUE(settings->GetLastUploadAttemptTime(&last_upload_attempt_time)); |
| 139 EXPECT_EQ(0, last_upload_attempt_time); | 138 EXPECT_EQ(0, last_upload_attempt_time); |
| 140 | 139 |
| 140 // Check that the database can also be opened when “create” is set to true. |
| 141 db = CrashReportDatabase::Initialize(path(), true); |
| 142 ASSERT_TRUE(db); |
| 143 |
| 144 settings = db->GetSettings(); |
| 145 |
| 146 ASSERT_TRUE(settings->GetClientID(&client_ids[2])); |
| 147 EXPECT_EQ(client_ids[0], client_ids[2]); |
| 148 |
| 149 ASSERT_TRUE(settings->GetLastUploadAttemptTime(&last_upload_attempt_time)); |
| 150 EXPECT_EQ(0, last_upload_attempt_time); |
| 151 |
| 141 std::vector<CrashReportDatabase::Report> reports; | 152 std::vector<CrashReportDatabase::Report> reports; |
| 142 EXPECT_EQ(CrashReportDatabase::kNoError, db->GetPendingReports(&reports)); | 153 EXPECT_EQ(CrashReportDatabase::kNoError, db->GetPendingReports(&reports)); |
| 143 EXPECT_TRUE(reports.empty()); | 154 EXPECT_TRUE(reports.empty()); |
| 144 reports.clear(); | 155 reports.clear(); |
| 145 EXPECT_EQ(CrashReportDatabase::kNoError, db->GetCompletedReports(&reports)); | 156 EXPECT_EQ(CrashReportDatabase::kNoError, db->GetCompletedReports(&reports)); |
| 146 EXPECT_TRUE(reports.empty()); | 157 EXPECT_TRUE(reports.empty()); |
| 158 |
| 159 // With “create” set to false, a nonexistent database shouldn’t be created. |
| 160 base::FilePath non_database_path = |
| 161 path().DirName().Append(FILE_PATH_LITERAL("not_a_database")); |
| 162 db = CrashReportDatabase::Initialize(non_database_path, false); |
| 163 EXPECT_FALSE(db); |
| 147 } | 164 } |
| 148 | 165 |
| 149 TEST_F(CrashReportDatabaseTest, NewCrashReport) { | 166 TEST_F(CrashReportDatabaseTest, NewCrashReport) { |
| 150 CrashReportDatabase::NewReport* new_report; | 167 CrashReportDatabase::NewReport* new_report; |
| 151 EXPECT_EQ(CrashReportDatabase::kNoError, | 168 EXPECT_EQ(CrashReportDatabase::kNoError, |
| 152 db()->PrepareNewCrashReport(&new_report)); | 169 db()->PrepareNewCrashReport(&new_report)); |
| 153 UUID expect_uuid = new_report->uuid; | 170 UUID expect_uuid = new_report->uuid; |
| 154 EXPECT_TRUE(FileExists(new_report->path)) << new_report->path.value(); | 171 EXPECT_TRUE(FileExists(new_report->path)) << new_report->path.value(); |
| 155 UUID uuid; | 172 UUID uuid; |
| 156 EXPECT_EQ(CrashReportDatabase::kNoError, | 173 EXPECT_EQ(CrashReportDatabase::kNoError, |
| 157 db()->FinishedWritingCrashReport(new_report, &uuid)); | 174 db()->FinishedWritingCrashReport(new_report, &uuid)); |
| 158 EXPECT_EQ(expect_uuid, uuid); | 175 EXPECT_EQ(expect_uuid, uuid); |
| 159 | 176 |
| 160 CrashReportDatabase::Report report; | 177 CrashReportDatabase::Report report; |
| 161 EXPECT_EQ(CrashReportDatabase::kNoError, | 178 EXPECT_EQ(CrashReportDatabase::kNoError, |
| 162 db()->LookUpCrashReport(uuid, &report)); | 179 db()->LookUpCrashReport(uuid, &report)); |
| 163 ExpectPreparedCrashReport(report); | 180 ExpectPreparedCrashReport(report); |
| 164 | 181 |
| 165 std::vector<CrashReportDatabase::Report> reports; | 182 std::vector<CrashReportDatabase::Report> reports; |
| 166 EXPECT_EQ(CrashReportDatabase::kNoError, | 183 EXPECT_EQ(CrashReportDatabase::kNoError, db()->GetPendingReports(&reports)); |
| 167 db()->GetPendingReports(&reports)); | |
| 168 ASSERT_EQ(1u, reports.size()); | 184 ASSERT_EQ(1u, reports.size()); |
| 169 EXPECT_EQ(report.uuid, reports[0].uuid); | 185 EXPECT_EQ(report.uuid, reports[0].uuid); |
| 170 | 186 |
| 171 reports.clear(); | 187 reports.clear(); |
| 172 EXPECT_EQ(CrashReportDatabase::kNoError, | 188 EXPECT_EQ(CrashReportDatabase::kNoError, db()->GetCompletedReports(&reports)); |
| 173 db()->GetCompletedReports(&reports)); | |
| 174 EXPECT_TRUE(reports.empty()); | 189 EXPECT_TRUE(reports.empty()); |
| 175 } | 190 } |
| 176 | 191 |
| 177 TEST_F(CrashReportDatabaseTest, ErrorWritingCrashReport) { | 192 TEST_F(CrashReportDatabaseTest, ErrorWritingCrashReport) { |
| 178 CrashReportDatabase::NewReport* new_report = nullptr; | 193 CrashReportDatabase::NewReport* new_report = nullptr; |
| 179 ASSERT_EQ(CrashReportDatabase::kNoError, | 194 ASSERT_EQ(CrashReportDatabase::kNoError, |
| 180 db()->PrepareNewCrashReport(&new_report)); | 195 db()->PrepareNewCrashReport(&new_report)); |
| 181 base::FilePath new_report_path = new_report->path; | 196 base::FilePath new_report_path = new_report->path; |
| 182 EXPECT_TRUE(FileExists(new_report_path)) << new_report_path.value(); | 197 EXPECT_TRUE(FileExists(new_report_path)) << new_report_path.value(); |
| 183 EXPECT_EQ(CrashReportDatabase::kNoError, | 198 EXPECT_EQ(CrashReportDatabase::kNoError, |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 313 CreateCrashReport(&reports[3]); | 328 CreateCrashReport(&reports[3]); |
| 314 CreateCrashReport(&reports[4]); | 329 CreateCrashReport(&reports[4]); |
| 315 | 330 |
| 316 const UUID& report_0_uuid = reports[0].uuid; | 331 const UUID& report_0_uuid = reports[0].uuid; |
| 317 const UUID& report_1_uuid = reports[1].uuid; | 332 const UUID& report_1_uuid = reports[1].uuid; |
| 318 const UUID& report_2_uuid = reports[2].uuid; | 333 const UUID& report_2_uuid = reports[2].uuid; |
| 319 const UUID& report_3_uuid = reports[3].uuid; | 334 const UUID& report_3_uuid = reports[3].uuid; |
| 320 const UUID& report_4_uuid = reports[4].uuid; | 335 const UUID& report_4_uuid = reports[4].uuid; |
| 321 | 336 |
| 322 std::vector<CrashReportDatabase::Report> pending; | 337 std::vector<CrashReportDatabase::Report> pending; |
| 323 EXPECT_EQ(CrashReportDatabase::kNoError, | 338 EXPECT_EQ(CrashReportDatabase::kNoError, db()->GetPendingReports(&pending)); |
| 324 db()->GetPendingReports(&pending)); | |
| 325 | 339 |
| 326 std::vector<CrashReportDatabase::Report> completed; | 340 std::vector<CrashReportDatabase::Report> completed; |
| 327 EXPECT_EQ(CrashReportDatabase::kNoError, | 341 EXPECT_EQ(CrashReportDatabase::kNoError, |
| 328 db()->GetCompletedReports(&completed)); | 342 db()->GetCompletedReports(&completed)); |
| 329 | 343 |
| 330 EXPECT_EQ(reports.size(), pending.size()); | 344 EXPECT_EQ(reports.size(), pending.size()); |
| 331 EXPECT_EQ(0u, completed.size()); | 345 EXPECT_EQ(0u, completed.size()); |
| 332 | 346 |
| 333 // Upload one report successfully. | 347 // Upload one report successfully. |
| 334 UploadReport(report_1_uuid, true, "report1"); | 348 UploadReport(report_1_uuid, true, "report1"); |
| 335 | 349 |
| 336 pending.clear(); | 350 pending.clear(); |
| 337 EXPECT_EQ(CrashReportDatabase::kNoError, | 351 EXPECT_EQ(CrashReportDatabase::kNoError, db()->GetPendingReports(&pending)); |
| 338 db()->GetPendingReports(&pending)); | |
| 339 completed.clear(); | 352 completed.clear(); |
| 340 EXPECT_EQ(CrashReportDatabase::kNoError, | 353 EXPECT_EQ(CrashReportDatabase::kNoError, |
| 341 db()->GetCompletedReports(&completed)); | 354 db()->GetCompletedReports(&completed)); |
| 342 | 355 |
| 343 EXPECT_EQ(4u, pending.size()); | 356 EXPECT_EQ(4u, pending.size()); |
| 344 ASSERT_EQ(1u, completed.size()); | 357 ASSERT_EQ(1u, completed.size()); |
| 345 | 358 |
| 346 for (const auto& report : pending) { | 359 for (const auto& report : pending) { |
| 347 EXPECT_NE(report_1_uuid, report.uuid); | 360 EXPECT_NE(report_1_uuid, report.uuid); |
| 348 EXPECT_FALSE(report.file_path.empty()); | 361 EXPECT_FALSE(report.file_path.empty()); |
| 349 } | 362 } |
| 350 EXPECT_EQ(report_1_uuid, completed[0].uuid); | 363 EXPECT_EQ(report_1_uuid, completed[0].uuid); |
| 351 EXPECT_EQ("report1", completed[0].id); | 364 EXPECT_EQ("report1", completed[0].id); |
| 352 EXPECT_EQ(true, completed[0].uploaded); | 365 EXPECT_EQ(true, completed[0].uploaded); |
| 353 EXPECT_GT(completed[0].last_upload_attempt_time, 0); | 366 EXPECT_GT(completed[0].last_upload_attempt_time, 0); |
| 354 EXPECT_EQ(1, completed[0].upload_attempts); | 367 EXPECT_EQ(1, completed[0].upload_attempts); |
| 355 | 368 |
| 356 // Fail to upload one report. | 369 // Fail to upload one report. |
| 357 UploadReport(report_2_uuid, false, std::string()); | 370 UploadReport(report_2_uuid, false, std::string()); |
| 358 | 371 |
| 359 pending.clear(); | 372 pending.clear(); |
| 360 EXPECT_EQ(CrashReportDatabase::kNoError, | 373 EXPECT_EQ(CrashReportDatabase::kNoError, db()->GetPendingReports(&pending)); |
| 361 db()->GetPendingReports(&pending)); | |
| 362 completed.clear(); | 374 completed.clear(); |
| 363 EXPECT_EQ(CrashReportDatabase::kNoError, | 375 EXPECT_EQ(CrashReportDatabase::kNoError, |
| 364 db()->GetCompletedReports(&completed)); | 376 db()->GetCompletedReports(&completed)); |
| 365 | 377 |
| 366 EXPECT_EQ(4u, pending.size()); | 378 EXPECT_EQ(4u, pending.size()); |
| 367 ASSERT_EQ(1u, completed.size()); | 379 ASSERT_EQ(1u, completed.size()); |
| 368 | 380 |
| 369 for (const auto& report : pending) { | 381 for (const auto& report : pending) { |
| 370 if (report.upload_attempts != 0) { | 382 if (report.upload_attempts != 0) { |
| 371 EXPECT_EQ(report_2_uuid, report.uuid); | 383 EXPECT_EQ(report_2_uuid, report.uuid); |
| 372 EXPECT_GT(report.last_upload_attempt_time, 0); | 384 EXPECT_GT(report.last_upload_attempt_time, 0); |
| 373 EXPECT_FALSE(report.uploaded); | 385 EXPECT_FALSE(report.uploaded); |
| 374 EXPECT_TRUE(report.id.empty()); | 386 EXPECT_TRUE(report.id.empty()); |
| 375 } | 387 } |
| 376 EXPECT_FALSE(report.file_path.empty()); | 388 EXPECT_FALSE(report.file_path.empty()); |
| 377 } | 389 } |
| 378 | 390 |
| 379 // Upload a second report. | 391 // Upload a second report. |
| 380 UploadReport(report_4_uuid, true, "report_4"); | 392 UploadReport(report_4_uuid, true, "report_4"); |
| 381 | 393 |
| 382 pending.clear(); | 394 pending.clear(); |
| 383 EXPECT_EQ(CrashReportDatabase::kNoError, | 395 EXPECT_EQ(CrashReportDatabase::kNoError, db()->GetPendingReports(&pending)); |
| 384 db()->GetPendingReports(&pending)); | |
| 385 completed.clear(); | 396 completed.clear(); |
| 386 EXPECT_EQ(CrashReportDatabase::kNoError, | 397 EXPECT_EQ(CrashReportDatabase::kNoError, |
| 387 db()->GetCompletedReports(&completed)); | 398 db()->GetCompletedReports(&completed)); |
| 388 | 399 |
| 389 EXPECT_EQ(3u, pending.size()); | 400 EXPECT_EQ(3u, pending.size()); |
| 390 ASSERT_EQ(2u, completed.size()); | 401 ASSERT_EQ(2u, completed.size()); |
| 391 | 402 |
| 392 // Succeed the failed report. | 403 // Succeed the failed report. |
| 393 UploadReport(report_2_uuid, true, "report 2"); | 404 UploadReport(report_2_uuid, true, "report 2"); |
| 394 | 405 |
| 395 pending.clear(); | 406 pending.clear(); |
| 396 EXPECT_EQ(CrashReportDatabase::kNoError, | 407 EXPECT_EQ(CrashReportDatabase::kNoError, db()->GetPendingReports(&pending)); |
| 397 db()->GetPendingReports(&pending)); | |
| 398 completed.clear(); | 408 completed.clear(); |
| 399 EXPECT_EQ(CrashReportDatabase::kNoError, | 409 EXPECT_EQ(CrashReportDatabase::kNoError, |
| 400 db()->GetCompletedReports(&completed)); | 410 db()->GetCompletedReports(&completed)); |
| 401 | 411 |
| 402 EXPECT_EQ(2u, pending.size()); | 412 EXPECT_EQ(2u, pending.size()); |
| 403 ASSERT_EQ(3u, completed.size()); | 413 ASSERT_EQ(3u, completed.size()); |
| 404 | 414 |
| 405 for (const auto& report : pending) { | 415 for (const auto& report : pending) { |
| 406 EXPECT_TRUE(report.uuid == report_0_uuid || | 416 EXPECT_TRUE(report.uuid == report_0_uuid || report.uuid == report_3_uuid); |
| 407 report.uuid == report_3_uuid); | |
| 408 EXPECT_FALSE(report.file_path.empty()); | 417 EXPECT_FALSE(report.file_path.empty()); |
| 409 } | 418 } |
| 410 | 419 |
| 411 // Skip upload for one report. | 420 // Skip upload for one report. |
| 412 EXPECT_EQ(CrashReportDatabase::kNoError, | 421 EXPECT_EQ(CrashReportDatabase::kNoError, |
| 413 db()->SkipReportUpload(report_3_uuid)); | 422 db()->SkipReportUpload(report_3_uuid)); |
| 414 | 423 |
| 415 pending.clear(); | 424 pending.clear(); |
| 416 EXPECT_EQ(CrashReportDatabase::kNoError, | 425 EXPECT_EQ(CrashReportDatabase::kNoError, db()->GetPendingReports(&pending)); |
| 417 db()->GetPendingReports(&pending)); | |
| 418 completed.clear(); | 426 completed.clear(); |
| 419 EXPECT_EQ(CrashReportDatabase::kNoError, | 427 EXPECT_EQ(CrashReportDatabase::kNoError, |
| 420 db()->GetCompletedReports(&completed)); | 428 db()->GetCompletedReports(&completed)); |
| 421 | 429 |
| 422 ASSERT_EQ(1u, pending.size()); | 430 ASSERT_EQ(1u, pending.size()); |
| 423 ASSERT_EQ(4u, completed.size()); | 431 ASSERT_EQ(4u, completed.size()); |
| 424 | 432 |
| 425 EXPECT_EQ(report_0_uuid, pending[0].uuid); | 433 EXPECT_EQ(report_0_uuid, pending[0].uuid); |
| 426 | 434 |
| 427 for (const auto& report : completed) { | 435 for (const auto& report : completed) { |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 493 << ErrnoMessage("unlink"); | 501 << ErrnoMessage("unlink"); |
| 494 #endif | 502 #endif |
| 495 | 503 |
| 496 EXPECT_EQ(CrashReportDatabase::kReportNotFound, | 504 EXPECT_EQ(CrashReportDatabase::kReportNotFound, |
| 497 db()->LookUpCrashReport(uuid, &report)); | 505 db()->LookUpCrashReport(uuid, &report)); |
| 498 } | 506 } |
| 499 | 507 |
| 500 } // namespace | 508 } // namespace |
| 501 } // namespace test | 509 } // namespace test |
| 502 } // namespace crashpad | 510 } // namespace crashpad |
| OLD | NEW |