// 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 SYNC_UTIL_EXTENSIONS_ACTIVITY_H_
#define SYNC_UTIL_EXTENSIONS_ACTIVITY_H_
#include <map>
#include <string>
#include "base/basictypes.h"
#include "base/memory/ref_counted.h"
#include "base/synchronization/lock.h"
#include "sync/base/sync_export.h"
namespace syncer {
// A storage to record usage of extensions APIs to send to sync
// servers, with the ability to purge data once sync servers have
// acknowledged it (successful commit response).
class SYNC_EXPORT ExtensionsActivity
: public base::RefCountedThreadSafe<ExtensionsActivity> {
public:
// A data record of activity performed by extension |extension_id|.
struct SYNC_EXPORT Record {
Record();
~Record();
// The human-readable ID identifying the extension responsible
// for the activity reported in this Record.
std::string extension_id;
// How many times the extension successfully invoked a write
// operation through the bookmarks API since the last CommitMessage.
uint32 bookmark_write_count;
};
typedef std::map<std::string, Record> Records;
ExtensionsActivity();
// Fill |buffer| with all current records and then clear the
// internal records. Called on sync thread to append records to sync commit
// message.
void GetAndClearRecords(Records* buffer);
// Merge |records| with the current set of records. Called on sync thread to
// put back records if sync commit failed.
void PutRecords(const Records& records);
// Increment write count of the specified extension.
void UpdateRecord(const std::string& extension_id);
private:
friend class base::RefCountedThreadSafe<ExtensionsActivity>;
~ExtensionsActivity();
Records records_;
mutable base::Lock records_lock_;
};
} // namespace syncer
#endif // SYNC_UTIL_EXTENSIONS_ACTIVITY_H_