Index: chrome/browser/extensions/extension_service.cc |
diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc |
index dc4d403fdcc1b66339a973c7eeefc9a547942a91..3fcd6f1196ac0c4b427fc30a11dbd69a9dea677f 100644 |
--- a/chrome/browser/extensions/extension_service.cc |
+++ b/chrome/browser/extensions/extension_service.cc |
@@ -579,14 +579,12 @@ ExtensionService::ExtensionService(Profile* profile, |
const CommandLine* command_line, |
const FilePath& install_directory, |
ExtensionPrefs* extension_prefs, |
- ExtensionSettings* extension_settings, |
bool autoupdate_enabled, |
bool extensions_enabled) |
: weak_ptr_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)), |
method_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)), |
profile_(profile), |
extension_prefs_(extension_prefs), |
- extension_settings_(extension_settings), |
pending_extension_manager_(*ALLOW_THIS_IN_INITIALIZER_LIST(this)), |
install_directory_(install_directory), |
extensions_enabled_(extensions_enabled), |
@@ -634,6 +632,12 @@ ExtensionService::ExtensionService(Profile* profile, |
new ExtensionServiceBackend(weak_ptr_factory_.GetWeakPtr(), |
install_directory_); |
+ // Construct the settings on the UI thread, but all further interaction |
+ // (including destruction) must be done on the FILE thread. |
+ extension_settings_ = |
+ new ExtensionSettings( |
+ profile_->GetPath().AppendASCII(kSettingsDirectoryName)); |
+ |
if (extensions_enabled_) { |
ExternalExtensionProviderImpl::CreateExternalProviders( |
this, profile_, &external_extension_providers_); |
@@ -688,6 +692,9 @@ ExtensionService::~ExtensionService() { |
ExternalExtensionProviderInterface* provider = i->get(); |
provider->ServiceShutdown(); |
} |
+ |
+ BrowserThread::DeleteSoon( |
+ BrowserThread::FILE, FROM_HERE, extension_settings_); |
} |
void ExtensionService::InitEventRoutersAfterImport() { |