17dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved.
27dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
37dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// found in the LICENSE file.
47dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
57dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#ifndef CHROME_BROWSER_DIAGNOSTICS_DIAGNOSTICS_CONTROLLER_H_
67dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#define CHROME_BROWSER_DIAGNOSTICS_DIAGNOSTICS_CONTROLLER_H_
77dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
87dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/memory/scoped_ptr.h"
97dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/memory/singleton.h"
107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
11a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace base {
127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass CommandLine;
13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochnamespace diagnostics {
167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass DiagnosticsWriter;
187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass DiagnosticsModel;
197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass DiagnosticsController {
217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch public:
227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  static DiagnosticsController* GetInstance();
237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Entry point for the diagnostics mode. Returns zero if able to run
257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // diagnostics successfully, regardless of the results of the diagnostics.
26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  int Run(const base::CommandLine& command_line, DiagnosticsWriter* writer);
277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
283240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch  // Entry point for running recovery based on diagnostics that have already
293240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch  // been run. In order for this to do anything, Run() must be executed first.
30a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  int RunRecovery(const base::CommandLine& command_line,
31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                  DiagnosticsWriter* writer);
323240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch
333240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch  // Returns a model with the results that have accumulated. They can then be
347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // queried for their attributes for human consumption later.
357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  const DiagnosticsModel& GetResults() const;
367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Returns true if there are any results available.
387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  bool HasResults();
397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Clears any results that have accumulated. After calling this, do not call
417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // GetResults until after Run is called again.
427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  void ClearResults();
437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
44424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // Records UMA statistics indicating that a regular Chrome startup happened,
45424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // with no diagnostics or recovery being run.  This is necessary to provide a
46424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // denominator for the diagnostics metrics.
47424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  void RecordRegularStartup();
48424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch private:
507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  friend struct DefaultSingletonTraits<DiagnosticsController>;
517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  DiagnosticsController();
537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  ~DiagnosticsController();
547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  scoped_ptr<DiagnosticsModel> model_;
567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  DiagnosticsWriter* writer_;
577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  DISALLOW_COPY_AND_ASSIGN(DiagnosticsController);
597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch};
607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}  // namespace diagnostics
627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif  // CHROME_BROWSER_DIAGNOSTICS_DIAGNOSTICS_CONTROLLER_H_
64