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