1// Copyright (c) 2012 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 RLZ_CHROMEOS_LIB_RLZ_VALUE_STORE_CHROMEOS_H_
6#define RLZ_CHROMEOS_LIB_RLZ_VALUE_STORE_CHROMEOS_H_
7
8#include "base/files/file_path.h"
9#include "base/threading/non_thread_safe.h"
10#include "base/values.h"
11#include "rlz/lib/rlz_value_store.h"
12
13namespace base {
14class ListValue;
15class SequencedTaskRunner;
16class Value;
17}
18
19namespace rlz_lib {
20
21// An implementation of RlzValueStore for ChromeOS.
22class RlzValueStoreChromeOS : public RlzValueStore,
23                              public base::NonThreadSafe {
24 public:
25  // // Sets the task runner that will be used by ImportantFileWriter for write
26  // // operations.
27  // static void SetFileTaskRunner(base::SequencedTaskRunner* file_task_runner);
28
29  // Creates new instance and synchronously reads data from file.
30  RlzValueStoreChromeOS(const base::FilePath& store_path);
31  virtual ~RlzValueStoreChromeOS();
32
33  // RlzValueStore overrides:
34  virtual bool HasAccess(AccessType type) OVERRIDE;
35
36  virtual bool WritePingTime(Product product, int64 time) OVERRIDE;
37  virtual bool ReadPingTime(Product product, int64* time) OVERRIDE;
38  virtual bool ClearPingTime(Product product) OVERRIDE;
39
40  virtual bool WriteAccessPointRlz(AccessPoint access_point,
41                                   const char* new_rlz) OVERRIDE;
42  virtual bool ReadAccessPointRlz(AccessPoint access_point,
43                                  char* rlz,
44                                  size_t rlz_size) OVERRIDE;
45  virtual bool ClearAccessPointRlz(AccessPoint access_point) OVERRIDE;
46
47  virtual bool AddProductEvent(Product product, const char* event_rlz) OVERRIDE;
48  virtual bool ReadProductEvents(Product product,
49                                 std::vector<std::string>* events) OVERRIDE;
50  virtual bool ClearProductEvent(Product product,
51                                 const char* event_rlz) OVERRIDE;
52  virtual bool ClearAllProductEvents(Product product) OVERRIDE;
53
54  virtual bool AddStatefulEvent(Product product,
55                                const char* event_rlz) OVERRIDE;
56  virtual bool IsStatefulEvent(Product product,
57                               const char* event_rlz) OVERRIDE;
58  virtual bool ClearAllStatefulEvents(Product product) OVERRIDE;
59
60  virtual void CollectGarbage() OVERRIDE;
61
62 private:
63  // Reads RLZ store from file.
64  void ReadStore();
65
66  // Writes RLZ store back to file.
67  void WriteStore();
68
69  // Adds |value| to list at |list_name| path in JSON store.
70  bool AddValueToList(std::string list_name, base::Value* value);
71  // Removes |value| from list at |list_name| path in JSON store.
72  bool RemoveValueFromList(std::string list_name, const base::Value& value);
73
74  // In-memory store with RLZ data.
75  scoped_ptr<base::DictionaryValue> rlz_store_;
76
77  base::FilePath store_path_;
78
79  bool read_only_;
80
81  DISALLOW_COPY_AND_ASSIGN(RlzValueStoreChromeOS);
82};
83
84}  // namespace rlz_lib
85
86#endif  // RLZ_CHROMEOS_LIB_RLZ_VALUE_STORE_CHROMEOS_H_
87