Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(71)

Side by Side Diff: webkit/blob/blob_storage_controller.h

Issue 7974011: Break large blobs into multiple ipcs during creation. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef WEBKIT_BLOB_BLOB_STORAGE_CONTROLLER_H_ 5 #ifndef WEBKIT_BLOB_BLOB_STORAGE_CONTROLLER_H_
6 #define WEBKIT_BLOB_BLOB_STORAGE_CONTROLLER_H_ 6 #define WEBKIT_BLOB_BLOB_STORAGE_CONTROLLER_H_
7 7
8 #include <map>
9 #include <string>
10
8 #include "base/hash_tables.h" 11 #include "base/hash_tables.h"
9 #include "base/memory/ref_counted.h" 12 #include "base/memory/ref_counted.h"
10 #include "base/process.h" 13 #include "base/process.h"
14 #include "webkit/blob/blob_data.h"
11 15
12 class GURL; 16 class GURL;
13 class FilePath; 17 class FilePath;
14 18
15 namespace base { 19 namespace base {
16 class Time; 20 class Time;
17 } 21 }
18 namespace net { 22 namespace net {
19 class UploadData; 23 class UploadData;
20 } 24 }
21 25
22 namespace webkit_blob { 26 namespace webkit_blob {
23 27
24 class BlobData;
25
26 // This class handles the logistics of blob Storage within the browser process. 28 // This class handles the logistics of blob Storage within the browser process.
27 class BlobStorageController { 29 class BlobStorageController {
28 public: 30 public:
29 BlobStorageController(); 31 BlobStorageController();
30 ~BlobStorageController(); 32 ~BlobStorageController();
31 33
32 void RegisterBlobUrl(const GURL& url, const BlobData* blob_data); 34 void RegisterUnfinalizedBlobUrl(const GURL& url);
35 void AppendBlobDataItem(const GURL& url, const BlobData::Item& data_item);
36 void FinalizeBlob(const GURL& url, const std::string& content_type);
33 void RegisterBlobUrlFrom(const GURL& url, const GURL& src_url); 37 void RegisterBlobUrlFrom(const GURL& url, const GURL& src_url);
34 void UnregisterBlobUrl(const GURL& url); 38 void UnregisterBlobUrl(const GURL& url);
35 BlobData* GetBlobDataFromUrl(const GURL& url); 39 BlobData* GetBlobDataFromUrl(const GURL& url);
36 40
37 // If there is any blob reference in the upload data, it will get resolved 41 // If there is any blob reference in the upload data, it will get resolved
38 // and updated in place. 42 // and updated in place.
39 void ResolveBlobReferencesInUploadData(net::UploadData* upload_data); 43 void ResolveBlobReferencesInUploadData(net::UploadData* upload_data);
40 44
41 private: 45 private:
42 friend class ViewBlobInternalsJob; 46 friend class ViewBlobInternalsJob;
43 47
48 typedef base::hash_map<std::string, scoped_refptr<BlobData> > BlobMap;
49 typedef std::map<BlobData*, int> BlobDataUsageMap;
50
44 void AppendStorageItems(BlobData* target_blob_data, 51 void AppendStorageItems(BlobData* target_blob_data,
45 BlobData* src_blob_data, 52 BlobData* src_blob_data,
46 uint64 offset, 53 uint64 offset,
47 uint64 length); 54 uint64 length);
48 void AppendFileItem(BlobData* target_blob_data, 55 void AppendFileItem(BlobData* target_blob_data,
49 const FilePath& file_path, uint64 offset, uint64 length, 56 const FilePath& file_path, uint64 offset, uint64 length,
50 const base::Time& expected_modification_time); 57 const base::Time& expected_modification_time);
51 58
52 typedef base::hash_map<std::string, scoped_refptr<BlobData> > BlobMap; 59 bool RemoveFromMapHelper(BlobMap* map, const GURL& url);
60
61 void IncrementBlobDataUsage(BlobData* blob_data);
62 // Returns true if no longer is use.
63 bool DecrementBlobDataUsage(BlobData* blob_data);
64
53 BlobMap blob_map_; 65 BlobMap blob_map_;
66 BlobMap unfinalized_blob_map_;
67
68 // Used to keep track of how much memory is being utitlized for blob data.
69 // Multiple urls can refer to the same blob data, the map keeps track of
70 // how many urls refer to a BlobData.
71 BlobDataUsageMap blob_data_usage_count_;
72 int64 memory_usage_;
54 73
55 DISALLOW_COPY_AND_ASSIGN(BlobStorageController); 74 DISALLOW_COPY_AND_ASSIGN(BlobStorageController);
56 }; 75 };
57 76
58 } // namespace webkit_blob 77 } // namespace webkit_blob
59 78
60 #endif // WEBKIT_BLOB_BLOB_STORAGE_CONTROLLER_H_ 79 #endif // WEBKIT_BLOB_BLOB_STORAGE_CONTROLLER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698