1// Copyright 2014 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 COMPONENTS_METRICS_MACHINE_ID_PROVIDER_H_
6#define COMPONENTS_METRICS_MACHINE_ID_PROVIDER_H_
7
8#include <string>
9
10#include "base/macros.h"
11#include "base/memory/ref_counted.h"
12
13namespace metrics {
14
15// Provides machine characteristics used as a machine id. The implementation is
16// platform specific with a default implementation that gives an empty id. The
17// class is ref-counted thread safe so it can be used to post to the FILE thread
18// and communicate back to the UI thread.
19// This raw machine id should not be stored or transmitted over the network.
20// TODO(jwd): Simplify implementation to get rid of the need for
21// RefCountedThreadSafe (crbug.com/354882).
22class MachineIdProvider : public base::RefCountedThreadSafe<MachineIdProvider> {
23 public:
24  // Get a string containing machine characteristics, to be used as a machine
25  // id. The implementation is platform specific, with a default implementation
26  // returning an empty string.
27  // The return value should not be stored to disk or transmitted.
28  std::string GetMachineId();
29
30  // Returns a pointer to a new MachineIdProvider or NULL if there is no
31  // provider implemented on a given platform. This is done to avoid posting a
32  // task to the FILE thread on platforms with no implementation.
33  static MachineIdProvider* CreateInstance();
34
35 private:
36  friend class base::RefCountedThreadSafe<MachineIdProvider>;
37
38  MachineIdProvider();
39  virtual ~MachineIdProvider();
40
41  DISALLOW_COPY_AND_ASSIGN(MachineIdProvider);
42};
43
44}  //  namespace metrics
45
46#endif  // COMPONENTS_METRICS_MACHINE_ID_PROVIDER_H_
47