Chromium Code Reviews| Index: chrome/browser/extensions/extension_settings_ui_wrapper.h |
| diff --git a/chrome/browser/extensions/extension_settings_ui_wrapper.h b/chrome/browser/extensions/extension_settings_ui_wrapper.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..8c7edb68e51e702f1742b325558e5b4e1f110b62 |
| --- /dev/null |
| +++ b/chrome/browser/extensions/extension_settings_ui_wrapper.h |
| @@ -0,0 +1,87 @@ |
| +// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_SETTINGS_UI_WRAPPER_H_ |
| +#define CHROME_BROWSER_EXTENSIONS_EXTENSION_SETTINGS_UI_WRAPPER_H_ |
| +#pragma once |
| + |
| +#include "base/compiler_specific.h" |
| +#include "base/memory/ref_counted.h" |
| +#include "base/callback.h" |
| +#include "chrome/browser/sync/api/syncable_service.h" |
| + |
| +class FilePath; |
| +class ExtensionSettings; |
| +class ExtensionSettingsStorage; |
| + |
| +// Wrapper for an ExtensionSettings object for dealing with thread ownership. |
| +// This class lives on the UI thread while ExtensionSettings object live on |
| +// the FILE thread. |
| +class ExtensionSettingsUIWrapper { |
| + public: |
| + explicit ExtensionSettingsUIWrapper(const FilePath& base_path); |
| + |
| + typedef base::Callback<void(ExtensionSettingsStorage*)> StorageCallback; |
| + |
| + // Runs |callback| on the FILE thread with the storage area for the extension |
| + // with ID |extension_id|. |
| + void RunWithStorage( |
| + const std::string& extension_id, const StorageCallback& callback); |
| + |
| + // Gets the SyncableService component of the ExtensionSettings. The service |
|
akalin
2011/09/21 01:58:41
remove this, and instead have:
void RunWithExtens
not at google - send to devlin
2011/09/21 03:55:18
This should make RunWithStorage unnecessary, right
akalin
2011/09/21 05:41:53
Yeah, that's true. Cool.
|
| + // itself lives on the FILE thread. Needed for ProfileSyncFactory. |
| + SyncableService* GetSyncableService(); |
| + |
| + ~ExtensionSettingsUIWrapper(); |
| + |
| + private: |
| + // Ref-counted container for the ExtensionSettings object. Delegates |
| + // SyncableService calls. |
| + class Core : public base::RefCountedThreadSafe<Core>, public SyncableService { |
|
akalin
2011/09/21 01:58:41
no need to have this be a syncableservice anymore
not at google - send to devlin
2011/09/21 03:55:18
Done.
|
| + public: |
| + // Constructed on UI thread. |
| + explicit Core(const FilePath& base_path); |
| + |
| + // Runs |callback| with the storage area for the extension with ID |
| + // |extension_id|. Must be run on the FILE thread. |
| + void RunWithStorageOnFileThread( |
| + const std::string& extension_id, const StorageCallback& callback); |
| + |
| + // SyncableService implementation (just delegates to |extension_settings_|). |
| + // All run on the FILE thread. |
| + // Note that when any of these methods are called, |extension_settings_| is |
| + // guaranteed to have already been created, since |extension_settings_| is |
| + // constructed on the FILE thread. |
| + virtual SyncDataList GetAllSyncData( |
| + syncable::ModelType type) const OVERRIDE; |
| + virtual SyncError MergeDataAndStartSyncing( |
| + syncable::ModelType type, |
| + const SyncDataList& initial_sync_data, |
| + SyncChangeProcessor* sync_processor) OVERRIDE; |
| + virtual SyncError ProcessSyncChanges( |
| + const tracked_objects::Location& from_here, |
| + const SyncChangeList& change_list) OVERRIDE; |
| + virtual void StopSyncing(syncable::ModelType type) OVERRIDE; |
| + |
| + private: |
| + // Can be destroyed on either the UI or FILE thread. |
| + virtual ~Core(); |
| + friend class base::RefCountedThreadSafe<Core>; |
| + |
| + // Does any FILE thread specific initialization, such as construction of |
| + // |extension_settings_|. |
| + void InitOnFileThread(const FilePath& base_path); |
| + |
| + // Lives on the FILE thread. |
| + ExtensionSettings* extension_settings_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(Core); |
| + }; |
| + |
| + scoped_refptr<Core> core_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(ExtensionSettingsUIWrapper); |
| +}; |
| + |
| +#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_SETTINGS_UI_WRAPPER_H_ |