diff options
Diffstat (limited to 'webkit/blob/blob_storage_controller.h')
-rw-r--r-- | webkit/blob/blob_storage_controller.h | 35 |
1 files changed, 29 insertions, 6 deletions
diff --git a/webkit/blob/blob_storage_controller.h b/webkit/blob/blob_storage_controller.h index 7f8d45c..7dbb6f7 100644 --- a/webkit/blob/blob_storage_controller.h +++ b/webkit/blob/blob_storage_controller.h @@ -5,9 +5,13 @@ #ifndef WEBKIT_BLOB_BLOB_STORAGE_CONTROLLER_H_ #define WEBKIT_BLOB_BLOB_STORAGE_CONTROLLER_H_ +#include <map> +#include <string> + #include "base/hash_tables.h" #include "base/memory/ref_counted.h" #include "base/process.h" +#include "webkit/blob/blob_data.h" class GURL; class FilePath; @@ -21,17 +25,18 @@ class UploadData; namespace webkit_blob { -class BlobData; - // This class handles the logistics of blob Storage within the browser process. class BlobStorageController { public: BlobStorageController(); ~BlobStorageController(); - void RegisterBlobUrl(const GURL& url, const BlobData* blob_data); - void RegisterBlobUrlFrom(const GURL& url, const GURL& src_url); - void UnregisterBlobUrl(const GURL& url); + void StartBuildingBlob(const GURL& url); + void AppendBlobDataItem(const GURL& url, const BlobData::Item& data_item); + void FinishBuildingBlob(const GURL& url, const std::string& content_type); + void AddFinishedBlob(const GURL& url, const BlobData* blob_data); + void CloneBlob(const GURL& url, const GURL& src_url); + void RemoveBlob(const GURL& url); BlobData* GetBlobDataFromUrl(const GURL& url); // If there is any blob reference in the upload data, it will get resolved @@ -41,6 +46,9 @@ class BlobStorageController { private: friend class ViewBlobInternalsJob; + typedef base::hash_map<std::string, scoped_refptr<BlobData> > BlobMap; + typedef std::map<BlobData*, int> BlobDataUsageMap; + void AppendStorageItems(BlobData* target_blob_data, BlobData* src_blob_data, uint64 offset, @@ -49,8 +57,23 @@ class BlobStorageController { const FilePath& file_path, uint64 offset, uint64 length, const base::Time& expected_modification_time); - typedef base::hash_map<std::string, scoped_refptr<BlobData> > BlobMap; + bool RemoveFromMapHelper(BlobMap* map, const GURL& url); + + void IncrementBlobDataUsage(BlobData* blob_data); + // Returns true if no longer in use. + bool DecrementBlobDataUsage(BlobData* blob_data); + BlobMap blob_map_; + BlobMap unfinalized_blob_map_; + + // Used to keep track of how much memory is being utitlized for blob data, + // we count only the items of TYPE_DATA which are held in memory and not + // items of TYPE_FILE. + int64 memory_usage_; + + // Multiple urls can refer to the same blob data, this map keeps track of + // how many urls refer to a BlobData. + BlobDataUsageMap blob_data_usage_count_; DISALLOW_COPY_AND_ASSIGN(BlobStorageController); }; |