Chromium Code Reviews| 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 64526d7a95397fddce19cf77f385ab45fa0ce666..2749e65fff7251b7be120d17c56ede6d89048b3d 100644 |
| --- a/chrome/browser/extensions/extension_settings_api.cc |
| +++ b/chrome/browser/extensions/extension_settings_api.cc |
| @@ -16,16 +16,25 @@ const char* kUnsupportedArgumentType = "Unsupported argument type"; |
| // SettingsFunction |
| bool SettingsFunction::RunImpl() { |
| - profile()->GetExtensionService()->extension_settings_frontend()-> |
| - RunWithBackend( |
| - base::Bind(&SettingsFunction::RunWithBackendOnFileThread, this)); |
| + ExtensionSettingsFrontend* frontend = |
| + profile()->GetExtensionService()->extension_settings_frontend(); |
| + frontend->RunWithStorage( |
| + extension_id(), |
| + base::Bind( |
| + &SettingsFunction::RunWithStorageOnFileThread, |
| + this, |
| + frontend->GetObservers())); |
| return true; |
| } |
| -void SettingsFunction::RunWithBackendOnFileThread( |
| - ExtensionSettingsBackend* backend) { |
| +void SettingsFunction::RunWithStorageOnFileThread( |
| + scoped_refptr<ExtensionSettingsObserverList> observers, |
| + ExtensionSettingsStorage* storage) { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
| - bool success = RunWithStorage(backend, backend->GetStorage(extension_id())); |
| + bool success = false; |
| + if (storage) { |
| + success = RunWithStorage(observers.get(), storage); |
| + } |
| BrowserThread::PostTask( |
| BrowserThread::UI, |
| FROM_HERE, |
| @@ -33,7 +42,7 @@ void SettingsFunction::RunWithBackendOnFileThread( |
| } |
| bool SettingsFunction::UseResult( |
| - ExtensionSettingsBackend* backend, |
| + ExtensionSettingsObserverList* observers, |
| const ExtensionSettingsStorage::Result& storage_result) { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
| if (storage_result.HasError()) { |
| @@ -58,8 +67,11 @@ bool SettingsFunction::UseResult( |
| old_value ? old_value->DeepCopy() : NULL, |
| new_value ? new_value->DeepCopy() : NULL); |
| } |
| - backend->TriggerOnSettingsChanged( |
| - profile(), extension_id(), changes.Build()); |
| + observers->Notify( |
|
Matt Perry
2011/10/31 22:04:07
are we assured that the observers list will live t
akalin
2011/10/31 22:05:56
Ah, yes, I missed this.
Please pass around ref-co
not at google - send to devlin
2011/11/01 00:40:20
Done.
|
| + &ExtensionSettingsObserver::OnSettingsChanged, |
| + profile(), |
| + extension_id(), |
| + changes.Build()); |
| } |
| return true; |
| @@ -80,7 +92,7 @@ static void AddAllStringValues( |
| } |
| bool GetSettingsFunction::RunWithStorage( |
| - ExtensionSettingsBackend* backend, |
| + ExtensionSettingsObserverList* observers, |
| ExtensionSettingsStorage* storage) { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
| Value *input; |
| @@ -88,29 +100,29 @@ bool GetSettingsFunction::RunWithStorage( |
| std::string as_string; |
| ListValue* as_list; |
| if (input->IsType(Value::TYPE_NULL)) { |
| - return UseResult(backend, storage->Get()); |
| + return UseResult(observers, storage->Get()); |
| } else if (input->GetAsString(&as_string)) { |
| - return UseResult(backend, storage->Get(as_string)); |
| + return UseResult(observers, storage->Get(as_string)); |
| } else if (input->GetAsList(&as_list)) { |
| std::vector<std::string> string_list; |
| AddAllStringValues(*as_list, &string_list); |
| - return UseResult(backend, storage->Get(string_list)); |
| + return UseResult(observers, storage->Get(string_list)); |
| } |
| return UseResult( |
| - backend, ExtensionSettingsStorage::Result(kUnsupportedArgumentType)); |
| + observers, ExtensionSettingsStorage::Result(kUnsupportedArgumentType)); |
| } |
| bool SetSettingsFunction::RunWithStorage( |
| - ExtensionSettingsBackend* backend, |
| + ExtensionSettingsObserverList* observers, |
| ExtensionSettingsStorage* storage) { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
| DictionaryValue *input; |
| EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &input)); |
| - return UseResult(backend, storage->Set(*input)); |
| + return UseResult(observers, storage->Set(*input)); |
| } |
| bool RemoveSettingsFunction::RunWithStorage( |
| - ExtensionSettingsBackend* backend, |
| + ExtensionSettingsObserverList* observers, |
| ExtensionSettingsStorage* storage) { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
| Value *input; |
| @@ -118,19 +130,19 @@ bool RemoveSettingsFunction::RunWithStorage( |
| std::string as_string; |
| ListValue* as_list; |
| if (input->GetAsString(&as_string)) { |
| - return UseResult(backend, storage->Remove(as_string)); |
| + return UseResult(observers, storage->Remove(as_string)); |
| } else if (input->GetAsList(&as_list)) { |
| std::vector<std::string> string_list; |
| AddAllStringValues(*as_list, &string_list); |
| - return UseResult(backend, storage->Remove(string_list)); |
| + return UseResult(observers, storage->Remove(string_list)); |
| } |
| return UseResult( |
| - backend, ExtensionSettingsStorage::Result(kUnsupportedArgumentType)); |
| + observers, ExtensionSettingsStorage::Result(kUnsupportedArgumentType)); |
| } |
| bool ClearSettingsFunction::RunWithStorage( |
| - ExtensionSettingsBackend* backend, |
| + ExtensionSettingsObserverList* observers, |
| ExtensionSettingsStorage* storage) { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
| - return UseResult(backend, storage->Clear()); |
| + return UseResult(observers, storage->Clear()); |
| } |