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( |
Matt Perry
2011/10/07 22:39:52
It seems weird to leave it up to the consumer of E
not at google - send to devlin
2011/10/10 01:00:16
I figured it wasn't so bad since there's only 2 so
Matt Perry
2011/10/10 20:37:15
After thinking about it more, having the notificat
|
+ 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()); |
} |