summaryrefslogtreecommitdiffstats
path: root/chrome/browser/extensions/extension_settings_api.cc
diff options
context:
space:
mode:
authorkalman@chromium.org <kalman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-22 03:32:07 +0000
committerkalman@chromium.org <kalman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-22 03:32:07 +0000
commitbe80eae925e1bb08b0584e55cd47accceba09390 (patch)
tree2209732664ad91da73883747415c1bddb60ab25c /chrome/browser/extensions/extension_settings_api.cc
parent15245b8b5298a41363183deba5f5e156c6d0ac74 (diff)
downloadchromium_src-be80eae925e1bb08b0584e55cd47accceba09390.zip
chromium_src-be80eae925e1bb08b0584e55cd47accceba09390.tar.gz
chromium_src-be80eae925e1bb08b0584e55cd47accceba09390.tar.bz2
Re-commit 106660 with the crashing test disabled. Reverted in 106671.
Add onChanged events to the extension settings API, both from sync and between split mode background pages. BUG=97545 TEST=ExtensionSettingsStorageUnittest, ExtensionSettingsSyncUnittest, ExtensionSettingsApitest Review URL: http://codereview.chromium.org/8177022 TBR=rsleevi@chromium.org Review URL: http://codereview.chromium.org/8361027 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@106848 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/extensions/extension_settings_api.cc')
-rw-r--r--chrome/browser/extensions/extension_settings_api.cc56
1 files changed, 44 insertions, 12 deletions
diff --git a/chrome/browser/extensions/extension_settings_api.cc b/chrome/browser/extensions/extension_settings_api.cc
index 5da832f..64526d7 100644
--- a/chrome/browser/extensions/extension_settings_api.cc
+++ b/chrome/browser/extensions/extension_settings_api.cc
@@ -25,7 +25,7 @@ bool SettingsFunction::RunImpl() {
void SettingsFunction::RunWithBackendOnFileThread(
ExtensionSettingsBackend* backend) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
- bool success = RunWithStorage(backend->GetStorage(extension_id()));
+ bool success = RunWithStorage(backend, backend->GetStorage(extension_id()));
BrowserThread::PostTask(
BrowserThread::UI,
FROM_HERE,
@@ -33,13 +33,35 @@ void SettingsFunction::RunWithBackendOnFileThread(
}
bool SettingsFunction::UseResult(
+ ExtensionSettingsBackend* backend,
const ExtensionSettingsStorage::Result& storage_result) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
if (storage_result.HasError()) {
error_ = storage_result.GetError();
return false;
}
- DictionaryValue* settings = storage_result.GetSettings();
- result_.reset(settings == NULL ? NULL : settings->DeepCopy());
+
+ const DictionaryValue* settings = storage_result.GetSettings();
+ if (settings) {
+ result_.reset(settings->DeepCopy());
+ }
+
+ const std::set<std::string>* changed_keys = storage_result.GetChangedKeys();
+ if (changed_keys && !changed_keys->empty()) {
+ ExtensionSettingChanges::Builder changes;
+ for (std::set<std::string>::const_iterator it = changed_keys->begin();
+ it != changed_keys->end(); ++it) {
+ const Value* old_value = storage_result.GetOldValue(*it);
+ const Value* new_value = storage_result.GetNewValue(*it);
+ changes.AppendChange(
+ *it,
+ old_value ? old_value->DeepCopy() : NULL,
+ new_value ? new_value->DeepCopy() : NULL);
+ }
+ backend->TriggerOnSettingsChanged(
+ profile(), extension_id(), changes.Build());
+ }
+
return true;
}
@@ -58,47 +80,57 @@ static void AddAllStringValues(
}
bool GetSettingsFunction::RunWithStorage(
+ ExtensionSettingsBackend* backend,
ExtensionSettingsStorage* storage) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
Value *input;
EXTENSION_FUNCTION_VALIDATE(args_->Get(0, &input));
std::string as_string;
ListValue* as_list;
if (input->IsType(Value::TYPE_NULL)) {
- return UseResult(storage->Get());
+ return UseResult(backend, storage->Get());
} else if (input->GetAsString(&as_string)) {
- return UseResult(storage->Get(as_string));
+ return UseResult(backend, storage->Get(as_string));
} else if (input->GetAsList(&as_list)) {
std::vector<std::string> string_list;
AddAllStringValues(*as_list, &string_list);
- return UseResult(storage->Get(string_list));
+ return UseResult(backend, storage->Get(string_list));
}
- return UseResult(ExtensionSettingsStorage::Result(kUnsupportedArgumentType));
+ return UseResult(
+ backend, ExtensionSettingsStorage::Result(kUnsupportedArgumentType));
}
bool SetSettingsFunction::RunWithStorage(
+ ExtensionSettingsBackend* backend,
ExtensionSettingsStorage* storage) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
DictionaryValue *input;
EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &input));
- return UseResult(storage->Set(*input));
+ return UseResult(backend, storage->Set(*input));
}
bool RemoveSettingsFunction::RunWithStorage(
+ ExtensionSettingsBackend* backend,
ExtensionSettingsStorage* storage) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
Value *input;
EXTENSION_FUNCTION_VALIDATE(args_->Get(0, &input));
std::string as_string;
ListValue* as_list;
if (input->GetAsString(&as_string)) {
- return UseResult(storage->Remove(as_string));
+ return UseResult(backend, storage->Remove(as_string));
} else if (input->GetAsList(&as_list)) {
std::vector<std::string> string_list;
AddAllStringValues(*as_list, &string_list);
- return UseResult(storage->Remove(string_list));
+ return UseResult(backend, storage->Remove(string_list));
}
- return UseResult(ExtensionSettingsStorage::Result(kUnsupportedArgumentType));
+ return UseResult(
+ backend, ExtensionSettingsStorage::Result(kUnsupportedArgumentType));
}
bool ClearSettingsFunction::RunWithStorage(
+ ExtensionSettingsBackend* backend,
ExtensionSettingsStorage* storage) {
- return UseResult(storage->Clear());
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
+ return UseResult(backend, storage->Clear());
}