1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2010 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/sync/glue/extension_data.h"
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/logging.h"
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/sync/glue/extension_util.h"
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace browser_sync {
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochExtensionData ExtensionData::FromData(
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    Source source, const sync_pb::ExtensionSpecifics& data) {
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DcheckIsExtensionSpecificsValid(data);
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ExtensionData extension_data;
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  extension_data.merged_data_ = extension_data.source_data_[source] = data;
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DCHECK(AreExtensionSpecificsEqual(extension_data.merged_data(), data));
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DCHECK(!extension_data.NeedsUpdate(source));
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return extension_data;
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
22513209b27ff55e2841eac0e4120199c23acce758Ben MurdochExtensionData::~ExtensionData() {}
23513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst sync_pb::ExtensionSpecifics& ExtensionData::merged_data() const {
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DcheckIsExtensionSpecificsValid(merged_data_);
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return merged_data_;
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool ExtensionData::NeedsUpdate(Source source) const {
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  SourceDataMap::const_iterator it = source_data_.find(source);
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      (it == source_data_.end()) ||
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      !AreExtensionSpecificsEqual(it->second, merged_data_);
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid ExtensionData::SetData(
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    Source source, bool merge_user_properties,
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const sync_pb::ExtensionSpecifics& data) {
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DcheckIsExtensionSpecificsValid(data);
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  source_data_[source] = data;
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MergeExtensionSpecifics(data, merge_user_properties, &merged_data_);
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DcheckIsExtensionSpecificsValid(merged_data_);
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid ExtensionData::ResolveData(Source source) {
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  source_data_[source] = merged_data_;
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DCHECK(!NeedsUpdate(source));
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochExtensionData::ExtensionData() {}
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}  // namespace browser_sync
53