// Copyright (c) 2010 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// This file defines a service that collects information about the user
// experience in order to help improve future versions of the app.

#ifndef CHROME_FRAME_CRASH_REPORTING_CRASH_METRICS_H_
#define CHROME_FRAME_CRASH_REPORTING_CRASH_METRICS_H_

#include "base/basictypes.h"
#include "base/lazy_instance.h"
#include "base/thread_local.h"

// This class provides functionality to track counters like successful page
// loads in the host browser, total number of crashes, page loads in chrome
// frame.
class CrashMetricsReporter {
 public:
  enum Metric {
    NAVIGATION_COUNT,
    CRASH_COUNT,
    CHROME_FRAME_NAVIGATION_COUNT,
    SESSION_ID,
    LAST_METRIC,
  };
  // Returns the global instance of this class.
  static CrashMetricsReporter* GetInstance();

  // The following function pair return/set/increment the specified user
  // metrics value from the registry. These values are set under the
  // following key:-
  // HKCU\Software\\Google\\ChromeFrame\\UserMetrics
  int GetMetric(Metric metric);
  bool SetMetric(Metric metric, int value);
  int IncrementMetric(Metric metric);

  // Records the crash metrics counters like navigation count, crash count.
  void RecordCrashMetrics();

  bool active() const {
    return active_;
  }

  void set_active(bool active) {
    active_ = active;
  }

 private:
  friend struct base::DefaultLazyInstanceTraits<CrashMetricsReporter>;

  CrashMetricsReporter()
      : active_(false) {}
  virtual ~CrashMetricsReporter() {}

  // Indicates whether the crash metrics reporter instance is active.
  bool active_;

  static wchar_t* g_metric_names[LAST_METRIC];

  DISALLOW_COPY_AND_ASSIGN(CrashMetricsReporter);
};

#endif  // CHROME_FRAME_CRASH_REPORTING_CRASH_METRICS_H_