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

#include "sync/util/extensions_activity.h"

namespace syncer {

ExtensionsActivity::Record::Record()
    : bookmark_write_count(0U) {}

ExtensionsActivity::Record::~Record() {}

ExtensionsActivity::ExtensionsActivity() {}

ExtensionsActivity::~ExtensionsActivity() {}

void ExtensionsActivity::GetAndClearRecords(Records* buffer) {
  base::AutoLock lock(records_lock_);
  buffer->clear();
  buffer->swap(records_);
}

void ExtensionsActivity::PutRecords(const Records& records) {
  base::AutoLock lock(records_lock_);
  for (Records::const_iterator i = records.begin(); i != records.end(); ++i) {
    records_[i->first].extension_id = i->second.extension_id;
    records_[i->first].bookmark_write_count += i->second.bookmark_write_count;
  }
}

void ExtensionsActivity::UpdateRecord(const std::string& extension_id) {
  base::AutoLock lock(records_lock_);
  Record& record = records_[extension_id];
  record.extension_id = extension_id;
  record.bookmark_write_count++;
}

}  // namespace syncer
