| // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/browser/diagnostics/diagnostics_test.h" |
| |
| #include "base/files/file_path.h" |
| #include "base/logging.h" |
| #include "base/metrics/histogram.h" |
| #include "base/path_service.h" |
| #include "chrome/common/chrome_constants.h" |
| #include "chrome/common/chrome_paths.h" |
| |
| namespace diagnostics { |
| |
| DiagnosticsTest::DiagnosticsTest(DiagnosticsTestId id) |
| : id_(id), outcome_code_(-1), result_(DiagnosticsModel::TEST_NOT_RUN) {} |
| |
| DiagnosticsTest::~DiagnosticsTest() {} |
| |
| bool DiagnosticsTest::Execute(DiagnosticsModel::Observer* observer, |
| DiagnosticsModel* model, |
| size_t index) { |
| start_time_ = base::Time::Now(); |
| result_ = DiagnosticsModel::TEST_RUNNING; |
| bool keep_going = ExecuteImpl(observer); |
| if (observer) |
| observer->OnTestFinished(index, model); |
| return keep_going; |
| } |
| |
| bool DiagnosticsTest::Recover(DiagnosticsModel::Observer* observer, |
| DiagnosticsModel* model, |
| size_t index) { |
| result_ = DiagnosticsModel::RECOVERY_RUNNING; |
| bool keep_going = RecoveryImpl(observer); |
| result_ = keep_going ? DiagnosticsModel::RECOVERY_OK |
| : DiagnosticsModel::RECOVERY_FAIL_STOP; |
| #if defined(OS_CHROMEOS) // Only collecting UMA stats on ChromeOS |
| if (result_ == DiagnosticsModel::RECOVERY_OK) { |
| RecordUMARecoveryResult(static_cast<DiagnosticsTestId>(GetId()), |
| RESULT_SUCCESS); |
| } else { |
| RecordUMARecoveryResult(static_cast<DiagnosticsTestId>(GetId()), |
| RESULT_FAILURE); |
| } |
| #endif |
| if (observer) |
| observer->OnRecoveryFinished(index, model); |
| return keep_going; |
| } |
| |
| void DiagnosticsTest::RecordOutcome(int outcome_code, |
| const std::string& additional_info, |
| DiagnosticsModel::TestResult result) { |
| end_time_ = base::Time::Now(); |
| outcome_code_ = outcome_code; |
| additional_info_ = additional_info; |
| result_ = result; |
| #if defined(OS_CHROMEOS) // Only collecting UMA stats on ChromeOS |
| if (result_ == DiagnosticsModel::TEST_OK) { |
| // Record individual test success. |
| RecordUMATestResult(static_cast<DiagnosticsTestId>(GetId()), |
| RESULT_SUCCESS); |
| } else if (result_ == DiagnosticsModel::TEST_FAIL_CONTINUE || |
| result_ == DiagnosticsModel::TEST_FAIL_STOP) { |
| // Record test failure in summary histogram. |
| UMA_HISTOGRAM_ENUMERATION( |
| "Diagnostics.TestFailures", GetId(), DIAGNOSTICS_TEST_ID_COUNT); |
| // Record individual test failure. |
| RecordUMATestResult(static_cast<DiagnosticsTestId>(GetId()), |
| RESULT_FAILURE); |
| } |
| #endif |
| } |
| |
| // static |
| base::FilePath DiagnosticsTest::GetUserDefaultProfileDir() { |
| base::FilePath path; |
| if (!PathService::Get(chrome::DIR_USER_DATA, &path)) |
| return base::FilePath(); |
| return path.AppendASCII(chrome::kInitialProfile); |
| } |
| |
| int DiagnosticsTest::GetId() const { return id_; } |
| |
| std::string DiagnosticsTest::GetName() const { return GetTestName(id_); } |
| |
| std::string DiagnosticsTest::GetTitle() const { |
| return GetTestDescription(id_); |
| } |
| |
| DiagnosticsModel::TestResult DiagnosticsTest::GetResult() const { |
| return result_; |
| } |
| |
| int DiagnosticsTest::GetOutcomeCode() const { return outcome_code_; } |
| |
| std::string DiagnosticsTest::GetAdditionalInfo() const { |
| return additional_info_; |
| } |
| |
| base::Time DiagnosticsTest::GetStartTime() const { return start_time_; } |
| |
| base::Time DiagnosticsTest::GetEndTime() const { return end_time_; } |
| |
| bool DiagnosticsTest::RecoveryImpl(DiagnosticsModel::Observer* observer) { |
| return true; |
| } |
| |
| } // namespace diagnostics |