OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 #include "storage/browser/blob/blob_storage_registry.h" | 5 #include "storage/browser/blob/blob_storage_registry.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/callback.h" | 10 #include "base/callback.h" |
(...skipping 19 matching lines...) Expand all Loading... |
30 GURL ClearBlobUrlRef(const GURL& url) { | 30 GURL ClearBlobUrlRef(const GURL& url) { |
31 size_t hash_pos = url.spec().find('#'); | 31 size_t hash_pos = url.spec().find('#'); |
32 if (hash_pos == std::string::npos) | 32 if (hash_pos == std::string::npos) |
33 return url; | 33 return url; |
34 return GURL(url.spec().substr(0, hash_pos)); | 34 return GURL(url.spec().substr(0, hash_pos)); |
35 } | 35 } |
36 | 36 |
37 } // namespace | 37 } // namespace |
38 | 38 |
39 BlobStorageRegistry::Entry::Entry(int refcount, BlobState state) | 39 BlobStorageRegistry::Entry::Entry(int refcount, BlobState state) |
40 : refcount(refcount), state(state), exceeded_memory(false) {} | 40 : refcount(refcount), state(state) {} |
41 | 41 |
42 BlobStorageRegistry::Entry::~Entry() {} | 42 BlobStorageRegistry::Entry::~Entry() {} |
43 | 43 |
44 bool BlobStorageRegistry::Entry::TestAndSetState(BlobState expected, | 44 bool BlobStorageRegistry::Entry::TestAndSetState(BlobState expected, |
45 BlobState set) { | 45 BlobState set) { |
46 if (state != expected) | 46 if (state != expected) |
47 return false; | 47 return false; |
48 state = set; | 48 state = set; |
49 return true; | 49 return true; |
50 } | 50 } |
51 | 51 |
52 BlobStorageRegistry::BlobStorageRegistry() {} | 52 BlobStorageRegistry::BlobStorageRegistry() {} |
53 | 53 |
54 BlobStorageRegistry::~BlobStorageRegistry() { | 54 BlobStorageRegistry::~BlobStorageRegistry() { |
55 // Note: We don't bother calling the construction complete callbacks, as we | 55 // Note: We don't bother calling the construction complete callbacks, as we |
56 // are only being destructed at the end of the life of the browser process. | 56 // are only being destructed at the end of the life of the browser process. |
57 // So it shouldn't matter. | 57 // So it shouldn't matter. |
58 } | 58 } |
59 | 59 |
60 BlobStorageRegistry::Entry* BlobStorageRegistry::CreateEntry( | 60 BlobStorageRegistry::Entry* BlobStorageRegistry::CreateEntry( |
61 const std::string& uuid) { | 61 const std::string& uuid, |
| 62 const std::string& content_type, |
| 63 const std::string& content_disposition) { |
62 DCHECK(!ContainsKey(blob_map_, uuid)); | 64 DCHECK(!ContainsKey(blob_map_, uuid)); |
63 Entry* entry = new Entry(1, BlobState::RESERVED); | 65 scoped_ptr<Entry> entry(new Entry(1, BlobState::PENDING)); |
64 blob_map_.add(uuid, make_scoped_ptr(entry)); | 66 entry->content_type = content_type; |
65 return entry; | 67 entry->content_disposition = content_disposition; |
| 68 Entry* entry_ptr = entry.get(); |
| 69 blob_map_.add(uuid, std::move(entry)); |
| 70 return entry_ptr; |
66 } | 71 } |
67 | 72 |
68 bool BlobStorageRegistry::DeleteEntry(const std::string& uuid) { | 73 bool BlobStorageRegistry::DeleteEntry(const std::string& uuid) { |
69 return blob_map_.erase(uuid) == 1; | 74 return blob_map_.erase(uuid) == 1; |
70 } | 75 } |
71 | 76 |
| 77 bool BlobStorageRegistry::HasEntry(const std::string& uuid) const { |
| 78 return blob_map_.find(uuid) != blob_map_.end(); |
| 79 } |
| 80 |
72 BlobStorageRegistry::Entry* BlobStorageRegistry::GetEntry( | 81 BlobStorageRegistry::Entry* BlobStorageRegistry::GetEntry( |
73 const std::string& uuid) { | 82 const std::string& uuid) { |
74 BlobMap::iterator found = blob_map_.find(uuid); | 83 BlobMap::iterator found = blob_map_.find(uuid); |
75 if (found == blob_map_.end()) | 84 if (found == blob_map_.end()) |
76 return nullptr; | 85 return nullptr; |
77 return found->second; | 86 return found->second; |
78 } | 87 } |
79 | 88 |
| 89 const BlobStorageRegistry::Entry* BlobStorageRegistry::GetEntry( |
| 90 const std::string& uuid) const { |
| 91 return const_cast<BlobStorageRegistry*>(this)->GetEntry(uuid); |
| 92 } |
| 93 |
80 bool BlobStorageRegistry::CreateUrlMapping(const GURL& blob_url, | 94 bool BlobStorageRegistry::CreateUrlMapping(const GURL& blob_url, |
81 const std::string& uuid) { | 95 const std::string& uuid) { |
82 DCHECK(!BlobUrlHasRef(blob_url)); | 96 DCHECK(!BlobUrlHasRef(blob_url)); |
83 if (blob_map_.find(uuid) == blob_map_.end() || IsURLMapped(blob_url)) | 97 if (blob_map_.find(uuid) == blob_map_.end() || IsURLMapped(blob_url)) |
84 return false; | 98 return false; |
85 url_to_uuid_[blob_url] = uuid; | 99 url_to_uuid_[blob_url] = uuid; |
86 return true; | 100 return true; |
87 } | 101 } |
88 | 102 |
89 bool BlobStorageRegistry::DeleteURLMapping(const GURL& blob_url, | 103 bool BlobStorageRegistry::DeleteURLMapping(const GURL& blob_url, |
(...skipping 19 matching lines...) Expand all Loading... |
109 url_to_uuid_.find(BlobUrlHasRef(url) ? ClearBlobUrlRef(url) : url); | 123 url_to_uuid_.find(BlobUrlHasRef(url) ? ClearBlobUrlRef(url) : url); |
110 if (found == url_to_uuid_.end()) | 124 if (found == url_to_uuid_.end()) |
111 return nullptr; | 125 return nullptr; |
112 Entry* entry = GetEntry(found->second); | 126 Entry* entry = GetEntry(found->second); |
113 if (entry && uuid) | 127 if (entry && uuid) |
114 uuid->assign(found->second); | 128 uuid->assign(found->second); |
115 return entry; | 129 return entry; |
116 } | 130 } |
117 | 131 |
118 } // namespace storage | 132 } // namespace storage |
OLD | NEW |