| Index: extensions/browser/api/lock_screen_data/data_item.h
|
| diff --git a/extensions/browser/api/lock_screen_data/data_item.h b/extensions/browser/api/lock_screen_data/data_item.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..fb0921b6c210d0faa89110d7349a9dad27917989
|
| --- /dev/null
|
| +++ b/extensions/browser/api/lock_screen_data/data_item.h
|
| @@ -0,0 +1,137 @@
|
| +// Copyright 2017 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 EXTENSIONS_BROWSER_API_LOCK_SCREEN_DATA_DATA_ITEM_H_
|
| +#define EXTENSIONS_BROWSER_API_LOCK_SCREEN_DATA_DATA_ITEM_H_
|
| +
|
| +#include <memory>
|
| +#include <string>
|
| +#include <vector>
|
| +
|
| +#include "base/callback.h"
|
| +#include "base/memory/ref_counted.h"
|
| +#include "base/memory/weak_ptr.h"
|
| +
|
| +namespace content {
|
| +class BrowserContext;
|
| +}
|
| +
|
| +namespace base {
|
| +class DictionaryValue;
|
| +class SequencedTaskRunner;
|
| +} // namespace base
|
| +
|
| +namespace extensions {
|
| +
|
| +class ValueStoreCache;
|
| +
|
| +namespace lock_screen_data {
|
| +
|
| +enum class OperationResult;
|
| +
|
| +// Wrapper around a file backed lock screen data item.
|
| +class DataItem {
|
| + public:
|
| + using WriteCallback = base::Callback<void(OperationResult result)>;
|
| + using ReadCallback =
|
| + base::Callback<void(OperationResult result,
|
| + std::unique_ptr<std::vector<char>> data)>;
|
| + using RegisteredValuesCallback =
|
| + base::Callback<void(OperationResult result,
|
| + std::unique_ptr<base::DictionaryValue> values)>;
|
| +
|
| + // Gets all registered data items for the extension with the provided
|
| + // extension ID - the items are returned as a DictionaryValue with keys set
|
| + // to data item IDs.
|
| + static void GetRegisteredValuesForExtension(
|
| + content::BrowserContext* context,
|
| + ValueStoreCache* value_store_cache,
|
| + base::SequencedTaskRunner* task_runner,
|
| + const std::string& extension_id,
|
| + const RegisteredValuesCallback& callback);
|
| +
|
| + // Clears data item value store for the extension with the provided extension
|
| + // ID.
|
| + static void DeleteAllItemsForExtension(content::BrowserContext* context,
|
| + ValueStoreCache* value_store_cache,
|
| + base::SequencedTaskRunner* task_runner,
|
| + const std::string& extension_id,
|
| + const base::Closure& callback);
|
| +
|
| + // |id| - Data item ID.
|
| + // |extension_id| - The extension that owns the item.
|
| + // |context| - The browser context to which the owning extension is attached.
|
| + // |value_store_cache| - Used to retrieve value store for the extension with
|
| + // |extension_id| ID. Not owned - the caller should ensure the value store
|
| + // cache outlives the data item.
|
| + // |task_runner| - The task runner on which value store should be used. Note
|
| + // that the Data item does not retain a reference to the task runner -
|
| + // the caller should ensure |task_runner| outlives the data item.
|
| + // |crypto_key| - Symmetric AES key for encrypting/decrypting data item
|
| + // content.
|
| + DataItem(const std::string& id,
|
| + const std::string& extension_id,
|
| + content::BrowserContext* context,
|
| + ValueStoreCache* value_store_cache,
|
| + base::SequencedTaskRunner* task_runner,
|
| + const std::string& crypto_key);
|
| + virtual ~DataItem();
|
| +
|
| + // Resisters the data item in the persistent data item storage.
|
| + virtual void Register(const WriteCallback& callback);
|
| +
|
| + // Sets the data item content, saving it to persistent data storage.
|
| + // This will fail if the data item is not registered.
|
| + virtual void Write(const std::vector<char>& data,
|
| + const WriteCallback& callback);
|
| +
|
| + // Gets the data item content from the persistent data storage.
|
| + // This will fail is the item is not registered.
|
| + virtual void Read(const ReadCallback& callback);
|
| +
|
| + // Unregisters the data item, and clears previously persisted data item
|
| + // content.
|
| + virtual void Delete(const WriteCallback& callback);
|
| +
|
| + const std::string& id() const { return id_; }
|
| +
|
| + const std::string& extension_id() const { return extension_id_; }
|
| +
|
| + private:
|
| + // Internal callback for write operations - wraps |callback| to ensure
|
| + // |callback| is not run after |this| has been destroyed.
|
| + void OnWriteDone(const WriteCallback& callback,
|
| + std::unique_ptr<OperationResult> result);
|
| +
|
| + // Internal callback for the read operation - wraps |callback| to ensure
|
| + // |callback| is not run after |this| has been destroyed.
|
| + void OnReadDone(const ReadCallback& callback,
|
| + std::unique_ptr<OperationResult> result,
|
| + std::unique_ptr<std::vector<char>> data);
|
| +
|
| + // The data item ID.
|
| + std::string id_;
|
| + // The ID of the extension that owns the data item.
|
| + std::string extension_id_;
|
| +
|
| + content::BrowserContext* context_;
|
| + // Cache used to retrieve the values store to which the data item should be
|
| + // saved - the value stores are mapped by the extension ID.
|
| + ValueStoreCache* value_store_cache_;
|
| + // Task runner on which value store should be accessed.
|
| + base::SequencedTaskRunner* task_runner_;
|
| + // They symmetric AES key that should be used to encrypt data item content
|
| + // when the content is written to the storage, and to decrypt item content
|
| + // when reading it from the storage.
|
| + const std::string crypto_key_;
|
| +
|
| + base::WeakPtrFactory<DataItem> weak_ptr_factory_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(DataItem);
|
| +};
|
| +
|
| +} // namespace lock_screen_data
|
| +} // namespace extensions
|
| +
|
| +#endif // EXTENSIONS_BROWSER_API_LOCK_SCREEN_DATA_DATA_ITEM_H_
|
|
|