Home | History | Annotate | Download | only in lib
      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_MAC_LIB_RLZ_VALUE_STORE_MAC_H_
      6 #define RLZ_MAC_LIB_RLZ_VALUE_STORE_MAC_H_
      7 
      8 #include "base/compiler_specific.h"
      9 #include "base/mac/scoped_nsobject.h"
     10 #include "rlz/lib/rlz_value_store.h"
     11 
     12 @class NSDictionary;
     13 @class NSMutableDictionary;
     14 
     15 namespace rlz_lib {
     16 
     17 // An implementation of RlzValueStore for mac. It stores information in a
     18 // plist file in the user's Application Support folder.
     19 class RlzValueStoreMac : public RlzValueStore {
     20  public:
     21   virtual bool HasAccess(AccessType type) OVERRIDE;
     22 
     23   virtual bool WritePingTime(Product product, int64 time) OVERRIDE;
     24   virtual bool ReadPingTime(Product product, int64* time) OVERRIDE;
     25   virtual bool ClearPingTime(Product product) OVERRIDE;
     26 
     27   virtual bool WriteAccessPointRlz(AccessPoint access_point,
     28                                    const char* new_rlz) OVERRIDE;
     29   virtual bool ReadAccessPointRlz(AccessPoint access_point,
     30                                   char* rlz,
     31                                   size_t rlz_size) OVERRIDE;
     32   virtual bool ClearAccessPointRlz(AccessPoint access_point) OVERRIDE;
     33 
     34   virtual bool AddProductEvent(Product product, const char* event_rlz) OVERRIDE;
     35   virtual bool ReadProductEvents(Product product,
     36                                  std::vector<std::string>* events) OVERRIDE;
     37   virtual bool ClearProductEvent(Product product,
     38                                  const char* event_rlz) OVERRIDE;
     39   virtual bool ClearAllProductEvents(Product product) OVERRIDE;
     40 
     41   virtual bool AddStatefulEvent(Product product,
     42                                 const char* event_rlz) OVERRIDE;
     43   virtual bool IsStatefulEvent(Product product,
     44                                const char* event_rlz) OVERRIDE;
     45   virtual bool ClearAllStatefulEvents(Product product) OVERRIDE;
     46 
     47   virtual void CollectGarbage() OVERRIDE;
     48 
     49  private:
     50   // |dict| is the dictionary that backs all data. plist_path is the name of the
     51   // plist file, used solely for implementing HasAccess().
     52   RlzValueStoreMac(NSMutableDictionary* dict, NSString* plist_path);
     53   virtual ~RlzValueStoreMac();
     54   friend class ScopedRlzValueStoreLock;
     55 
     56   // Returns the backing dictionary that should be written to disk.
     57   NSDictionary* dictionary();
     58 
     59   // Returns the dictionary to which all data should be written. Usually, this
     60   // is just |dictionary()|, but if supplementary branding is used, it's a
     61   // subdirectory at key "brand_<supplementary branding code>".
     62   // Note that windows stores data at
     63   //    rlz/name (e.g. "pingtime")/supplementalbranding/productcode
     64   // Mac on the other hand does
     65   //    supplementalbranding/productcode/pingtime.
     66   NSMutableDictionary* WorkingDict();
     67 
     68   // Returns the subdirectory of |WorkingDict()| used to store data for
     69   // product p.
     70   NSMutableDictionary* ProductDict(Product p);
     71 
     72   base::scoped_nsobject<NSMutableDictionary> dict_;
     73   base::scoped_nsobject<NSString> plist_path_;
     74 
     75   DISALLOW_COPY_AND_ASSIGN(RlzValueStoreMac);
     76 };
     77 
     78 }  // namespace rlz_lib
     79 
     80 #endif  // RLZ_MAC_LIB_RLZ_VALUE_STORE_MAC_H_
     81