summaryrefslogtreecommitdiffstats
path: root/chrome/browser/extensions/syncable_extension_settings_storage.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/extensions/syncable_extension_settings_storage.cc')
-rw-r--r--chrome/browser/extensions/syncable_extension_settings_storage.cc184
1 files changed, 85 insertions, 99 deletions
diff --git a/chrome/browser/extensions/syncable_extension_settings_storage.cc b/chrome/browser/extensions/syncable_extension_settings_storage.cc
index 42152cc..772a99e 100644
--- a/chrome/browser/extensions/syncable_extension_settings_storage.cc
+++ b/chrome/browser/extensions/syncable_extension_settings_storage.cc
@@ -29,83 +29,84 @@ SyncableExtensionSettingsStorage::~SyncableExtensionSettingsStorage() {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
}
-ExtensionSettingsStorage::Result SyncableExtensionSettingsStorage::Get(
+ExtensionSettingsStorage::ReadResult SyncableExtensionSettingsStorage::Get(
const std::string& key) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
return delegate_->Get(key);
}
-ExtensionSettingsStorage::Result SyncableExtensionSettingsStorage::Get(
+ExtensionSettingsStorage::ReadResult SyncableExtensionSettingsStorage::Get(
const std::vector<std::string>& keys) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
return delegate_->Get(keys);
}
-ExtensionSettingsStorage::Result SyncableExtensionSettingsStorage::Get() {
+ExtensionSettingsStorage::ReadResult SyncableExtensionSettingsStorage::Get() {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
return delegate_->Get();
}
-ExtensionSettingsStorage::Result SyncableExtensionSettingsStorage::Set(
+ExtensionSettingsStorage::WriteResult SyncableExtensionSettingsStorage::Set(
const std::string& key, const Value& value) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
- Result result = delegate_->Set(key, value);
+ WriteResult result = delegate_->Set(key, value);
if (result.HasError()) {
return result;
}
- if (sync_processor_ && !result.GetChangedKeys()->empty()) {
- SendAddsOrUpdatesToSync(*result.GetChangedKeys(), *result.GetSettings());
+ if (sync_processor_ && !result.changes().empty()) {
+ SendChangesToSync(result.changes());
}
return result;
}
-ExtensionSettingsStorage::Result SyncableExtensionSettingsStorage::Set(
+ExtensionSettingsStorage::WriteResult SyncableExtensionSettingsStorage::Set(
const DictionaryValue& values) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
- Result result = delegate_->Set(values);
+ WriteResult result = delegate_->Set(values);
if (result.HasError()) {
return result;
}
- if (sync_processor_ && !result.GetChangedKeys()->empty()) {
- SendAddsOrUpdatesToSync(*result.GetChangedKeys(), *result.GetSettings());
+ if (sync_processor_ && !result.changes().empty()) {
+ SendChangesToSync(result.changes());
}
return result;
}
-ExtensionSettingsStorage::Result SyncableExtensionSettingsStorage::Remove(
+ExtensionSettingsStorage::WriteResult SyncableExtensionSettingsStorage::Remove(
const std::string& key) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
- Result result = delegate_->Remove(key);
+ WriteResult result = delegate_->Remove(key);
if (result.HasError()) {
return result;
}
- if (sync_processor_ && !result.GetChangedKeys()->empty()) {
- SendDeletesToSync(*result.GetChangedKeys());
+ if (sync_processor_ && !result.changes().empty()) {
+ SendChangesToSync(result.changes());
}
return result;
}
-ExtensionSettingsStorage::Result SyncableExtensionSettingsStorage::Remove(
+ExtensionSettingsStorage::WriteResult SyncableExtensionSettingsStorage::Remove(
const std::vector<std::string>& keys) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
- Result result = delegate_->Remove(keys);
+ WriteResult result = delegate_->Remove(keys);
if (result.HasError()) {
return result;
}
- if (sync_processor_ && !result.GetChangedKeys()->empty()) {
- SendDeletesToSync(*result.GetChangedKeys());
+ if (sync_processor_ && !result.changes().empty()) {
+ SendChangesToSync(result.changes());
}
return result;
}
-ExtensionSettingsStorage::Result SyncableExtensionSettingsStorage::Clear() {
+ExtensionSettingsStorage::WriteResult
+SyncableExtensionSettingsStorage::Clear() {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
- Result result = delegate_->Clear();
+ WriteResult result = delegate_->Clear();
if (result.HasError()) {
return result;
}
- if (sync_processor_ && !result.GetChangedKeys()->empty()) {
- SendDeletesToSync(*result.GetChangedKeys());
+ if (sync_processor_ && !result.changes().empty()) {
+ SendChangesToSync(result.changes());
}
return result;
}
@@ -126,19 +127,18 @@ SyncError SyncableExtensionSettingsStorage::StartSyncing(
sync_type_ = type;
sync_processor_ = sync_processor;
- Result maybe_settings = delegate_->Get();
+ ReadResult maybe_settings = delegate_->Get();
if (maybe_settings.HasError()) {
return SyncError(
FROM_HERE,
- std::string("Failed to get settings: ") + maybe_settings.GetError(),
+ std::string("Failed to get settings: ") + maybe_settings.error(),
type);
}
- const DictionaryValue* settings = maybe_settings.GetSettings();
if (sync_state.empty()) {
- return SendLocalSettingsToSync(*settings);
+ return SendLocalSettingsToSync(maybe_settings.settings());
}
- return OverwriteLocalSettingsWithSync(sync_state, *settings);
+ return OverwriteLocalSettingsWithSync(sync_state, maybe_settings.settings());
}
SyncError SyncableExtensionSettingsStorage::SendLocalSettingsToSync(
@@ -247,7 +247,7 @@ std::vector<SyncError> SyncableExtensionSettingsStorage::ProcessSyncChanges(
DCHECK(!sync_changes.empty()) << "No sync changes for " << extension_id_;
std::vector<SyncError> errors;
- ExtensionSettingChanges::Builder changes;
+ ExtensionSettingChangeList changes;
for (ExtensionSettingSyncDataList::const_iterator it = sync_changes.begin();
it != sync_changes.end(); ++it) {
@@ -258,21 +258,18 @@ std::vector<SyncError> SyncableExtensionSettingsStorage::ProcessSyncChanges(
scoped_ptr<Value> current_value;
{
- Result maybe_settings = Get(it->key());
+ ReadResult maybe_settings = Get(it->key());
if (maybe_settings.HasError()) {
errors.push_back(SyncError(
FROM_HERE,
std::string("Error getting current sync state for ") +
- extension_id_ + "/" + key + ": " + maybe_settings.GetError(),
+ extension_id_ + "/" + key + ": " + maybe_settings.error(),
sync_type_));
continue;
}
- const DictionaryValue* settings = maybe_settings.GetSettings();
- if (settings) {
- Value* value = NULL;
- if (settings->GetWithoutPathExpansion(key, &value)) {
- current_value.reset(value->DeepCopy());
- }
+ Value* value = NULL;
+ if (maybe_settings.settings().GetWithoutPathExpansion(key, &value)) {
+ current_value.reset(value->DeepCopy());
}
}
@@ -325,76 +322,65 @@ std::vector<SyncError> SyncableExtensionSettingsStorage::ProcessSyncChanges(
observers_->Notify(
&ExtensionSettingsObserver::OnSettingsChanged,
- static_cast<Profile*>(NULL),
extension_id_,
- changes.Build());
+ ExtensionSettingChange::GetEventJson(changes));
return errors;
}
-void SyncableExtensionSettingsStorage::SendAddsOrUpdatesToSync(
- const std::set<std::string>& changed_keys,
- const DictionaryValue& settings) {
+void SyncableExtensionSettingsStorage::SendChangesToSync(
+ const ExtensionSettingChangeList& changes) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
DCHECK(sync_processor_);
- DCHECK(!changed_keys.empty());
-
- SyncChangeList changes;
- for (std::set<std::string>::const_iterator it = changed_keys.begin();
- it != changed_keys.end(); ++it) {
- Value* value = NULL;
- settings.GetWithoutPathExpansion(*it, &value);
- DCHECK(value);
- if (synced_keys_.count(*it)) {
- // Key is synced, send ACTION_UPDATE to sync.
- changes.push_back(
- extension_settings_sync_util::CreateUpdate(
- extension_id_, *it, *value));
- } else {
- // Key is not synced, send ACTION_ADD to sync.
- changes.push_back(
- extension_settings_sync_util::CreateAdd(extension_id_, *it, *value));
- }
- }
+ DCHECK(!changes.empty());
- SyncError error = sync_processor_->ProcessSyncChanges(FROM_HERE, changes);
- if (error.IsSet()) {
- LOG(WARNING) << "Failed to send changes to sync: " << error.message();
- return;
- }
+ SyncChangeList sync_changes;
+ std::set<std::string> added_keys;
+ std::set<std::string> deleted_keys;
- synced_keys_.insert(changed_keys.begin(), changed_keys.end());
-}
-
-void SyncableExtensionSettingsStorage::SendDeletesToSync(
- const std::set<std::string>& keys) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
- DCHECK(sync_processor_);
- DCHECK(!keys.empty());
-
- SyncChangeList changes;
- for (std::set<std::string>::const_iterator it = keys.begin();
- it != keys.end(); ++it) {
- if (!synced_keys_.count(*it)) {
- LOG(WARNING) << "Deleted " << *it << " but no entry in synced_keys";
- continue;
+ for (ExtensionSettingChangeList::const_iterator it = changes.begin();
+ it != changes.end(); ++it) {
+ const std::string& key = it->key();
+ const Value* value = it->new_value();
+ if (value) {
+ if (synced_keys_.count(key)) {
+ // New value, key is synced; send ACTION_UPDATE.
+ sync_changes.push_back(
+ extension_settings_sync_util::CreateUpdate(
+ extension_id_, key, *value));
+ } else {
+ // New value, key is not synced; send ACTION_ADD.
+ sync_changes.push_back(
+ extension_settings_sync_util::CreateAdd(
+ extension_id_, key, *value));
+ added_keys.insert(key);
+ }
+ } else {
+ if (synced_keys_.count(key)) {
+ // Clearing value, key is synced; send ACTION_DELETE.
+ sync_changes.push_back(
+ extension_settings_sync_util::CreateDelete(extension_id_, key));
+ deleted_keys.insert(key);
+ } else {
+ LOG(WARNING) << "Deleted " << key << " but not in synced_keys_";
+ }
}
- changes.push_back(
- extension_settings_sync_util::CreateDelete(extension_id_, *it));
}
- if (changes.empty()) {
+ if (sync_changes.empty()) {
return;
}
- SyncError error = sync_processor_->ProcessSyncChanges(FROM_HERE, changes);
+ SyncError error =
+ sync_processor_->ProcessSyncChanges(FROM_HERE, sync_changes);
if (error.IsSet()) {
LOG(WARNING) << "Failed to send changes to sync: " << error.message();
return;
}
- for (std::set<std::string>::const_iterator it = keys.begin();
- it != keys.end(); ++it) {
+ synced_keys_.insert(added_keys.begin(), added_keys.end());
+ for (std::set<std::string>::iterator it = deleted_keys.begin();
+ it != deleted_keys.end(); ++it) {
synced_keys_.erase(*it);
}
}
@@ -402,18 +388,18 @@ void SyncableExtensionSettingsStorage::SendDeletesToSync(
SyncError SyncableExtensionSettingsStorage::OnSyncAdd(
const std::string& key,
Value* new_value,
- ExtensionSettingChanges::Builder* changes) {
+ ExtensionSettingChangeList* changes) {
DCHECK(new_value);
synced_keys_.insert(key);
- Result result = delegate_->Set(key, *new_value);
+ WriteResult result = delegate_->Set(key, *new_value);
if (result.HasError()) {
return SyncError(
FROM_HERE,
std::string("Error pushing sync add to local settings: ") +
- result.GetError(),
+ result.error(),
sync_type_);
}
- changes->AppendChange(key, NULL, new_value);
+ changes->push_back(ExtensionSettingChange(key, NULL, new_value));
return SyncError();
}
@@ -421,35 +407,35 @@ SyncError SyncableExtensionSettingsStorage::OnSyncUpdate(
const std::string& key,
Value* old_value,
Value* new_value,
- ExtensionSettingChanges::Builder* changes) {
+ ExtensionSettingChangeList* changes) {
DCHECK(old_value);
DCHECK(new_value);
- Result result = delegate_->Set(key, *new_value);
+ WriteResult result = delegate_->Set(key, *new_value);
if (result.HasError()) {
return SyncError(
FROM_HERE,
std::string("Error pushing sync update to local settings: ") +
- result.GetError(),
+ result.error(),
sync_type_);
}
- changes->AppendChange(key, old_value, new_value);
+ changes->push_back(ExtensionSettingChange(key, old_value, new_value));
return SyncError();
}
SyncError SyncableExtensionSettingsStorage::OnSyncDelete(
const std::string& key,
Value* old_value,
- ExtensionSettingChanges::Builder* changes) {
+ ExtensionSettingChangeList* changes) {
DCHECK(old_value);
synced_keys_.erase(key);
- Result result = delegate_->Remove(key);
+ WriteResult result = delegate_->Remove(key);
if (result.HasError()) {
return SyncError(
FROM_HERE,
std::string("Error pushing sync remove to local settings: ") +
- result.GetError(),
+ result.error(),
sync_type_);
}
- changes->AppendChange(key, old_value, NULL);
+ changes->push_back(ExtensionSettingChange(key, old_value, NULL));
return SyncError();
}