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