| Index: chrome/browser/extensions/extension_settings_api.cc
|
| diff --git a/chrome/browser/extensions/extension_settings_api.cc b/chrome/browser/extensions/extension_settings_api.cc
|
| index 5da832fa3a359593364aae9814d008e68bf765d0..c779b4a665044daa2d6a13445ce47ab5608e7d07 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,36 @@ 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());
|
| +
|
| + std::set<std::string>* changed_keys = storage_result.GetChangedKeys();
|
| + if (changed_keys && !changed_keys->empty()) {
|
| + ExtensionSettingsObserver::ChangeList change_event;
|
| + for (std::set<std::string>::iterator it = changed_keys->begin();
|
| + it != changed_keys->end(); ++it) {
|
| + Value* old_value = NULL;
|
| + if (storage_result.GetOldValue(*it, &old_value) && old_value) {
|
| + old_value = old_value->DeepCopy();
|
| + }
|
| + Value* new_value = NULL;
|
| + if (storage_result.GetNewValue(*it, &new_value) && new_value) {
|
| + new_value = new_value->DeepCopy();
|
| + }
|
| + change_event.AppendChange(*it, old_value, new_value);
|
| + }
|
| + backend->TriggerOnSettingsChanged(
|
| + profile(), extension_id(), change_event.GetEventJson());
|
| + }
|
| +
|
| return true;
|
| }
|
|
|
| @@ -58,47 +81,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());
|
| }
|
|
|