1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "chrome/browser/diagnostics/diagnostics_test.h" 6 7 #include "base/files/file_path.h" 8 #include "base/logging.h" 9 #include "base/metrics/histogram.h" 10 #include "base/path_service.h" 11 #include "chrome/common/chrome_constants.h" 12 #include "chrome/common/chrome_paths.h" 13 14 namespace diagnostics { 15 16 DiagnosticsTest::DiagnosticsTest(DiagnosticsTestId id) 17 : id_(id), outcome_code_(-1), result_(DiagnosticsModel::TEST_NOT_RUN) {} 18 19 DiagnosticsTest::~DiagnosticsTest() {} 20 21 bool DiagnosticsTest::Execute(DiagnosticsModel::Observer* observer, 22 DiagnosticsModel* model, 23 size_t index) { 24 start_time_ = base::Time::Now(); 25 result_ = DiagnosticsModel::TEST_RUNNING; 26 bool keep_going = ExecuteImpl(observer); 27 if (observer) 28 observer->OnTestFinished(index, model); 29 return keep_going; 30 } 31 32 bool DiagnosticsTest::Recover(DiagnosticsModel::Observer* observer, 33 DiagnosticsModel* model, 34 size_t index) { 35 result_ = DiagnosticsModel::RECOVERY_RUNNING; 36 bool keep_going = RecoveryImpl(observer); 37 result_ = keep_going ? DiagnosticsModel::RECOVERY_OK 38 : DiagnosticsModel::RECOVERY_FAIL_STOP; 39 #if defined(OS_CHROMEOS) // Only collecting UMA stats on ChromeOS 40 if (result_ == DiagnosticsModel::RECOVERY_OK) { 41 RecordUMARecoveryResult(static_cast<DiagnosticsTestId>(GetId()), 42 RESULT_SUCCESS); 43 } else { 44 RecordUMARecoveryResult(static_cast<DiagnosticsTestId>(GetId()), 45 RESULT_FAILURE); 46 } 47 #endif 48 if (observer) 49 observer->OnRecoveryFinished(index, model); 50 return keep_going; 51 } 52 53 void DiagnosticsTest::RecordOutcome(int outcome_code, 54 const std::string& additional_info, 55 DiagnosticsModel::TestResult result) { 56 end_time_ = base::Time::Now(); 57 outcome_code_ = outcome_code; 58 additional_info_ = additional_info; 59 result_ = result; 60 #if defined(OS_CHROMEOS) // Only collecting UMA stats on ChromeOS 61 if (result_ == DiagnosticsModel::TEST_OK) { 62 // Record individual test success. 63 RecordUMATestResult(static_cast<DiagnosticsTestId>(GetId()), 64 RESULT_SUCCESS); 65 } else if (result_ == DiagnosticsModel::TEST_FAIL_CONTINUE || 66 result_ == DiagnosticsModel::TEST_FAIL_STOP) { 67 // Record test failure in summary histogram. 68 UMA_HISTOGRAM_ENUMERATION( 69 "Diagnostics.TestFailures", GetId(), DIAGNOSTICS_TEST_ID_COUNT); 70 // Record individual test failure. 71 RecordUMATestResult(static_cast<DiagnosticsTestId>(GetId()), 72 RESULT_FAILURE); 73 } 74 #endif 75 } 76 77 // static 78 base::FilePath DiagnosticsTest::GetUserDefaultProfileDir() { 79 base::FilePath path; 80 if (!PathService::Get(chrome::DIR_USER_DATA, &path)) 81 return base::FilePath(); 82 return path.AppendASCII(chrome::kInitialProfile); 83 } 84 85 int DiagnosticsTest::GetId() const { return id_; } 86 87 std::string DiagnosticsTest::GetName() const { return GetTestName(id_); } 88 89 std::string DiagnosticsTest::GetTitle() const { 90 return GetTestDescription(id_); 91 } 92 93 DiagnosticsModel::TestResult DiagnosticsTest::GetResult() const { 94 return result_; 95 } 96 97 int DiagnosticsTest::GetOutcomeCode() const { return outcome_code_; } 98 99 std::string DiagnosticsTest::GetAdditionalInfo() const { 100 return additional_info_; 101 } 102 103 base::Time DiagnosticsTest::GetStartTime() const { return start_time_; } 104 105 base::Time DiagnosticsTest::GetEndTime() const { return end_time_; } 106 107 bool DiagnosticsTest::RecoveryImpl(DiagnosticsModel::Observer* observer) { 108 return true; 109 } 110 111 } // namespace diagnostics 112