diff options
author | kalman@chromium.org <kalman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-22 03:32:07 +0000 |
---|---|---|
committer | kalman@chromium.org <kalman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-22 03:32:07 +0000 |
commit | be80eae925e1bb08b0584e55cd47accceba09390 (patch) | |
tree | 2209732664ad91da73883747415c1bddb60ab25c /chrome/browser/extensions/extension_settings_api.cc | |
parent | 15245b8b5298a41363183deba5f5e156c6d0ac74 (diff) | |
download | chromium_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.cc | 56 |
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()); } |