Home | History | Annotate | Download | only in diagnostics
      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 #ifndef CHROME_BROWSER_DIAGNOSTICS_DIAGNOSTICS_TEST_H_
      6 #define CHROME_BROWSER_DIAGNOSTICS_DIAGNOSTICS_TEST_H_
      7 
      8 #include "base/compiler_specific.h"
      9 #include "chrome/browser/diagnostics/diagnostics_metrics.h"
     10 #include "chrome/browser/diagnostics/diagnostics_model.h"
     11 
     12 namespace base {
     13 class FilePath;
     14 }
     15 
     16 namespace diagnostics {
     17 
     18 // Represents a single diagnostic test and encapsulates the common
     19 // functionality across platforms as well.
     20 // It also implements the TestInfo interface providing the storage
     21 // for the outcome of the test.
     22 // Specific tests need (minimally) only to:
     23 // 1- override ExecuteImpl() to implement the test.
     24 // 2- call RecordStopFailure() or RecordFailure() or RecordSuccess()
     25 //    at the end of the test.
     26 // 3- Optionally call observer->OnProgress() if the test is long.
     27 // 4- Optionally call observer->OnSkipped() if the test cannot be run.
     28 class DiagnosticsTest : public DiagnosticsModel::TestInfo {
     29  public:
     30   explicit DiagnosticsTest(DiagnosticsTestId id);
     31 
     32   virtual ~DiagnosticsTest();
     33 
     34   // Runs the test. Returning false signals that no more tests should be run.
     35   // The actual outcome of the test should be set using the RecordXX functions.
     36   bool Execute(DiagnosticsModel::Observer* observer, DiagnosticsModel* model,
     37                size_t index);
     38 
     39   // Runs any recovery steps for the test. Returning false signals that no more
     40   // recovery should be attempted.
     41   bool Recover(DiagnosticsModel::Observer* observer, DiagnosticsModel* model,
     42                size_t index);
     43 
     44   void RecordStopFailure(int outcome_code, const std::string& additional_info) {
     45     RecordOutcome(
     46         outcome_code, additional_info, DiagnosticsModel::TEST_FAIL_STOP);
     47   }
     48 
     49   void RecordFailure(int outcome_code, const std::string& additional_info) {
     50     RecordOutcome(
     51         outcome_code, additional_info, DiagnosticsModel::TEST_FAIL_CONTINUE);
     52   }
     53 
     54   void RecordSuccess(const std::string& additional_info) {
     55     RecordOutcome(0, additional_info, DiagnosticsModel::TEST_OK);
     56   }
     57 
     58   void RecordOutcome(int outcome_code,
     59                      const std::string& additional_info,
     60                      DiagnosticsModel::TestResult result);
     61 
     62   static base::FilePath GetUserDefaultProfileDir();
     63 
     64   // DiagnosticsModel::TestInfo overrides
     65   virtual int GetId() const OVERRIDE;
     66   virtual std::string GetName() const OVERRIDE;
     67   virtual std::string GetTitle() const OVERRIDE;
     68   virtual DiagnosticsModel::TestResult GetResult() const OVERRIDE;
     69   virtual std::string GetAdditionalInfo() const OVERRIDE;
     70   virtual int GetOutcomeCode() const OVERRIDE;
     71   virtual base::Time GetStartTime() const OVERRIDE;
     72   virtual base::Time GetEndTime() const OVERRIDE;
     73  protected:
     74   // Derived classes override this method do perform the actual test.
     75   virtual bool ExecuteImpl(DiagnosticsModel::Observer* observer) = 0;
     76 
     77   // Derived classes may override this method to perform a recovery, if recovery
     78   // makes sense for the diagnostics test.
     79   virtual bool RecoveryImpl(DiagnosticsModel::Observer* observer);
     80 
     81   const DiagnosticsTestId id_;
     82   std::string additional_info_;
     83   int outcome_code_;
     84   DiagnosticsModel::TestResult result_;
     85   base::Time start_time_;
     86   base::Time end_time_;
     87 };
     88 
     89 }  // namespace diagnostics
     90 #endif  // CHROME_BROWSER_DIAGNOSTICS_DIAGNOSTICS_TEST_H_
     91