blob: af5e93abdeb7a2011d04e0510777b8431e70ea60 [file] [log] [blame]
// Copyright 2015 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef STORAGE_BROWSER_BLOB_BLOB_STORAGE_REGISTRY_H_
#define STORAGE_BROWSER_BLOB_BLOB_STORAGE_REGISTRY_H_
#include <stddef.h>
#include <map>
#include <memory>
#include <string>
#include <unordered_map>
#include <vector>
#include "base/component_export.h"
#include "storage/browser/blob/blob_storage_constants.h"
namespace storage {
class BlobEntry;
// This class stores the blob data in the various states of construction.
// Implementation notes:
// * When removing a uuid registration, we do not check for URL mappings to that
// uuid. The user must keep track of these.
class COMPONENT_EXPORT(STORAGE_BROWSER) BlobStorageRegistry {
public:
BlobStorageRegistry();
BlobStorageRegistry(const BlobStorageRegistry&) = delete;
BlobStorageRegistry& operator=(const BlobStorageRegistry&) = delete;
~BlobStorageRegistry();
// Creates the blob entry with a refcount of 1 and a state of PENDING. If
// the blob is already in use, we return null.
BlobEntry* CreateEntry(const std::string& uuid,
const std::string& content_type,
const std::string& content_disposition);
// Removes the blob entry with the given uuid. This does not unmap any
// URLs that are pointing to this uuid. Returns if the entry existed.
bool DeleteEntry(const std::string& uuid);
bool HasEntry(const std::string& uuid) const;
// Gets the blob entry for the given uuid. Returns nullptr if the entry
// does not exist.
BlobEntry* GetEntry(const std::string& uuid);
const BlobEntry* GetEntry(const std::string& uuid) const;
size_t blob_count() const { return blob_map_.size(); }
private:
friend class ViewBlobInternalsJob;
std::unordered_map<std::string, std::unique_ptr<BlobEntry>> blob_map_;
};
} // namespace storage
#endif // STORAGE_BROWSER_BLOB_BLOB_STORAGE_REGISTRY_H_