blob: 73cf0606dbe3f52232d494d1e5ce53d154c4e79b [file] [log] [blame]
[email protected]d778d6e2011-08-12 09:47:051// Copyright (c) 2011 The Chromium Authors. All rights reserved.
[email protected]e4be2dd2010-12-14 00:44:392// 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
[email protected]57999812013-02-24 05:40:527#include "base/files/file_path.h"
asvitkineaa060312016-09-01 22:44:138#include "base/metrics/histogram_macros.h"
[email protected]e4be2dd2010-12-14 00:44:399#include "base/path_service.h"
avie4d7b6f2015-12-26 00:59:1810#include "build/build_config.h"
[email protected]e4be2dd2010-12-14 00:44:3911#include "chrome/common/chrome_constants.h"
12#include "chrome/common/chrome_paths.h"
13
[email protected]f22fae42013-07-09 21:11:1114namespace diagnostics {
[email protected]e4be2dd2010-12-14 00:44:3915
[email protected]0c38b262013-08-23 23:34:2416DiagnosticsTest::DiagnosticsTest(DiagnosticsTestId id)
17 : id_(id), outcome_code_(-1), result_(DiagnosticsModel::TEST_NOT_RUN) {}
[email protected]e4be2dd2010-12-14 00:44:3918
[email protected]f22fae42013-07-09 21:11:1119DiagnosticsTest::~DiagnosticsTest() {}
20
21bool DiagnosticsTest::Execute(DiagnosticsModel::Observer* observer,
22 DiagnosticsModel* model,
23 size_t index) {
24 start_time_ = base::Time::Now();
[email protected]e4be2dd2010-12-14 00:44:3925 result_ = DiagnosticsModel::TEST_RUNNING;
[email protected]e4be2dd2010-12-14 00:44:3926 bool keep_going = ExecuteImpl(observer);
[email protected]f22fae42013-07-09 21:11:1127 if (observer)
[email protected]60756be2013-08-07 05:20:2628 observer->OnTestFinished(index, model);
29 return keep_going;
30}
31
32bool 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;
[email protected]0c38b262013-08-23 23:34:2439#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
[email protected]60756be2013-08-07 05:20:2648 if (observer)
49 observer->OnRecoveryFinished(index, model);
[email protected]e4be2dd2010-12-14 00:44:3950 return keep_going;
51}
52
[email protected]f22fae42013-07-09 21:11:1153void 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;
[email protected]e4be2dd2010-12-14 00:44:3958 additional_info_ = additional_info;
59 result_ = result;
[email protected]0c38b262013-08-23 23:34:2460#if defined(OS_CHROMEOS) // Only collecting UMA stats on ChromeOS
Wei-Yin Chen (陳威尹)223326c2017-07-21 02:08:2861 DiagnosticsTestId id = static_cast<DiagnosticsTestId>(GetId());
[email protected]0c38b262013-08-23 23:34:2462 if (result_ == DiagnosticsModel::TEST_OK) {
63 // Record individual test success.
Wei-Yin Chen (陳威尹)223326c2017-07-21 02:08:2864 RecordUMATestResult(id, RESULT_SUCCESS);
[email protected]0c38b262013-08-23 23:34:2465 } else if (result_ == DiagnosticsModel::TEST_FAIL_CONTINUE ||
66 result_ == DiagnosticsModel::TEST_FAIL_STOP) {
67 // Record test failure in summary histogram.
Wei-Yin Chen (陳威尹)223326c2017-07-21 02:08:2868 UMA_HISTOGRAM_ENUMERATION("Diagnostics.TestFailures", id,
69 DIAGNOSTICS_TEST_ID_COUNT);
[email protected]0c38b262013-08-23 23:34:2470 // Record individual test failure.
Wei-Yin Chen (陳威尹)223326c2017-07-21 02:08:2871 RecordUMATestResult(id, RESULT_FAILURE);
[email protected]0c38b262013-08-23 23:34:2472 }
73#endif
[email protected]e4be2dd2010-12-14 00:44:3974}
75
76// static
[email protected]f22fae42013-07-09 21:11:1177base::FilePath DiagnosticsTest::GetUserDefaultProfileDir() {
[email protected]650b2d52013-02-10 03:41:4578 base::FilePath path;
Avi Drissman9098f9002018-05-04 00:11:5279 if (!base::PathService::Get(chrome::DIR_USER_DATA, &path))
[email protected]650b2d52013-02-10 03:41:4580 return base::FilePath();
[email protected]d778d6e2011-08-12 09:47:0581 return path.AppendASCII(chrome::kInitialProfile);
[email protected]e4be2dd2010-12-14 00:44:3982}
[email protected]f22fae42013-07-09 21:11:1183
[email protected]0c38b262013-08-23 23:34:2484int DiagnosticsTest::GetId() const { return id_; }
[email protected]f22fae42013-07-09 21:11:1185
[email protected]0c38b262013-08-23 23:34:2486std::string DiagnosticsTest::GetName() const { return GetTestName(id_); }
87
88std::string DiagnosticsTest::GetTitle() const {
89 return GetTestDescription(id_);
90}
[email protected]f22fae42013-07-09 21:11:1191
92DiagnosticsModel::TestResult DiagnosticsTest::GetResult() const {
93 return result_;
94}
95
96int DiagnosticsTest::GetOutcomeCode() const { return outcome_code_; }
97
98std::string DiagnosticsTest::GetAdditionalInfo() const {
99 return additional_info_;
100}
101
102base::Time DiagnosticsTest::GetStartTime() const { return start_time_; }
103
104base::Time DiagnosticsTest::GetEndTime() const { return end_time_; }
105
[email protected]60756be2013-08-07 05:20:26106bool DiagnosticsTest::RecoveryImpl(DiagnosticsModel::Observer* observer) {
107 return true;
[email protected]0c38b262013-08-23 23:34:24108}
[email protected]60756be2013-08-07 05:20:26109
[email protected]f22fae42013-07-09 21:11:11110} // namespace diagnostics