15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_DIAGNOSTICS_DIAGNOSTICS_TEST_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_DIAGNOSTICS_DIAGNOSTICS_TEST_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 9424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "chrome/browser/diagnostics/diagnostics_metrics.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/diagnostics/diagnostics_model.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace base { 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FilePath; 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochnamespace diagnostics { 177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Represents a single diagnostic test and encapsulates the common 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// functionality across platforms as well. 207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// It also implements the TestInfo interface providing the storage 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// for the outcome of the test. 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Specific tests need (minimally) only to: 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 1- override ExecuteImpl() to implement the test. 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 2- call RecordStopFailure() or RecordFailure() or RecordSuccess() 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// at the end of the test. 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 3- Optionally call observer->OnProgress() if the test is long. 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 4- Optionally call observer->OnSkipped() if the test cannot be run. 287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass DiagnosticsTest : public DiagnosticsModel::TestInfo { 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 30424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) explicit DiagnosticsTest(DiagnosticsTestId id); 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual ~DiagnosticsTest(); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Runs the test. Returning false signals that no more tests should be run. 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The actual outcome of the test should be set using the RecordXX functions. 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool Execute(DiagnosticsModel::Observer* observer, DiagnosticsModel* model, 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t index); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 393240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // Runs any recovery steps for the test. Returning false signals that no more 403240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // recovery should be attempted. 413240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch bool Recover(DiagnosticsModel::Observer* observer, DiagnosticsModel* model, 423240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch size_t index); 433240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch void RecordStopFailure(int outcome_code, const std::string& additional_info) { 457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch RecordOutcome( 467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch outcome_code, additional_info, DiagnosticsModel::TEST_FAIL_STOP); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch void RecordFailure(int outcome_code, const std::string& additional_info) { 507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch RecordOutcome( 517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch outcome_code, additional_info, DiagnosticsModel::TEST_FAIL_CONTINUE); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch void RecordSuccess(const std::string& additional_info) { 557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch RecordOutcome(0, additional_info, DiagnosticsModel::TEST_OK); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch void RecordOutcome(int outcome_code, 597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const std::string& additional_info, 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DiagnosticsModel::TestResult result); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static base::FilePath GetUserDefaultProfileDir(); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // DiagnosticsModel::TestInfo overrides 65424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) virtual int GetId() const OVERRIDE; 66424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) virtual std::string GetName() const OVERRIDE; 677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual std::string GetTitle() const OVERRIDE; 687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual DiagnosticsModel::TestResult GetResult() const OVERRIDE; 697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual std::string GetAdditionalInfo() const OVERRIDE; 707dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual int GetOutcomeCode() const OVERRIDE; 717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual base::Time GetStartTime() const OVERRIDE; 727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual base::Time GetEndTime() const OVERRIDE; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Derived classes override this method do perform the actual test. 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool ExecuteImpl(DiagnosticsModel::Observer* observer) = 0; 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 773240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // Derived classes may override this method to perform a recovery, if recovery 783240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // makes sense for the diagnostics test. 793240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch virtual bool RecoveryImpl(DiagnosticsModel::Observer* observer); 803240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 81424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) const DiagnosticsTestId id_; 827dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch std::string additional_info_; 837dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch int outcome_code_; 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DiagnosticsModel::TestResult result_; 857dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::Time start_time_; 867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::Time end_time_; 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 897dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} // namespace diagnostics 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_DIAGNOSTICS_DIAGNOSTICS_TEST_H_ 91