// Copyright 2013 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.

#ifndef MEDIA_BASE_KEY_SYSTEMS_SUPPORT_UMA_H_
#define MEDIA_BASE_KEY_SYSTEMS_SUPPORT_UMA_H_

#include <string>

#include "base/containers/scoped_ptr_hash_map.h"

namespace media {

// Key system support UMA statistics for queried key systems.
// 1. The key system is queried (with or without a MIME type).
// 2. The key system is queried with a MIME type.
// 3. The queried key system is supported (with or without a MIME type). This is
//    reported when the key system is supported when queried, regardless of
//    whether a MIME type is specified.
// 4. The queried key system is supported with a MIME type. This is reported
//    when the key system is supported when queried without a MIME type
//    specified.
// Note: All 4 stats are only reported once per renderer process per key system.
class KeySystemsSupportUMA {
 public:
  KeySystemsSupportUMA();
  ~KeySystemsSupportUMA();

  // Adds a |key_system| for which query/support statistics are reported.
  // If you use this function to add key system to report, make sure to update
  // AddKeySystemSupportActions() in tools/metrics/actions/extract_actions.py.
  void AddKeySystemToReport(const std::string& key_system);

  // Reports that the |key_system| is queried. When |has_type|, also reports
  // that the |key_system| with a MIME type is queried.
  void ReportKeySystemQuery(const std::string& key_system, bool has_type);

  // Reports that the queried |key_system| is supported. When |has_type| (a
  // a MIME type is specified in the query), also reports that the queried
  // |key_system| is supported with that MIME type.
  void ReportKeySystemSupport(const std::string& key_system, bool has_type);

 private:
  class Reporter;

  // Returns the Reporter for |key_system|. Returns NULL if |key_system| was not
  // added for UMA reporting.
  Reporter* GetReporter(const std::string& key_system);

  // Key system <-> Reporter map.
  typedef base::ScopedPtrHashMap<std::string, scoped_ptr<Reporter>> Reporters;
  Reporters reporters_;
};

}  // namespace media

#endif  // MEDIA_BASE_KEY_SYSTEMS_SUPPORT_UMA_H_
