Home | History | Annotate | Download | only in diagnostics
      1 // Copyright 2013 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_CONTROLLER_H_
      6 #define CHROME_BROWSER_DIAGNOSTICS_DIAGNOSTICS_CONTROLLER_H_
      7 
      8 #include "base/memory/scoped_ptr.h"
      9 #include "base/memory/singleton.h"
     10 
     11 class CommandLine;
     12 
     13 namespace diagnostics {
     14 
     15 class DiagnosticsWriter;
     16 class DiagnosticsModel;
     17 
     18 class DiagnosticsController {
     19  public:
     20   static DiagnosticsController* GetInstance();
     21 
     22   // Entry point for the diagnostics mode. Returns zero if able to run
     23   // diagnostics successfully, regardless of the results of the diagnostics.
     24   int Run(const CommandLine& command_line, DiagnosticsWriter* writer);
     25 
     26   // Entry point for running recovery based on diagnostics that have already
     27   // been run. In order for this to do anything, Run() must be executed first.
     28   int RunRecovery(const CommandLine& command_line, DiagnosticsWriter* writer);
     29 
     30   // Returns a model with the results that have accumulated. They can then be
     31   // queried for their attributes for human consumption later.
     32   const DiagnosticsModel& GetResults() const;
     33 
     34   // Returns true if there are any results available.
     35   bool HasResults();
     36 
     37   // Clears any results that have accumulated. After calling this, do not call
     38   // GetResults until after Run is called again.
     39   void ClearResults();
     40 
     41   // Records UMA statistics indicating that a regular Chrome startup happened,
     42   // with no diagnostics or recovery being run.  This is necessary to provide a
     43   // denominator for the diagnostics metrics.
     44   void RecordRegularStartup();
     45 
     46  private:
     47   friend struct DefaultSingletonTraits<DiagnosticsController>;
     48 
     49   DiagnosticsController();
     50   ~DiagnosticsController();
     51 
     52   scoped_ptr<DiagnosticsModel> model_;
     53   DiagnosticsWriter* writer_;
     54 
     55   DISALLOW_COPY_AND_ASSIGN(DiagnosticsController);
     56 };
     57 
     58 }  // namespace diagnostics
     59 
     60 #endif  // CHROME_BROWSER_DIAGNOSTICS_DIAGNOSTICS_CONTROLLER_H_
     61