OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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 NET_DISK_CACHE_SIMPLE_SIMPLE_ENTRY_IMPL_H_ | 5 #ifndef NET_DISK_CACHE_SIMPLE_SIMPLE_ENTRY_IMPL_H_ |
6 #define NET_DISK_CACHE_SIMPLE_SIMPLE_ENTRY_IMPL_H_ | 6 #define NET_DISK_CACHE_SIMPLE_SIMPLE_ENTRY_IMPL_H_ |
7 | 7 |
| 8 #include <queue> |
8 #include <string> | 9 #include <string> |
9 | 10 |
10 #include "base/files/file_path.h" | 11 #include "base/files/file_path.h" |
11 #include "base/memory/weak_ptr.h" | 12 #include "base/memory/weak_ptr.h" |
12 #include "base/threading/thread_checker.h" | 13 #include "base/threading/thread_checker.h" |
13 #include "net/disk_cache/disk_cache.h" | 14 #include "net/disk_cache/disk_cache.h" |
14 #include "net/disk_cache/simple/simple_entry_format.h" | 15 #include "net/disk_cache/simple/simple_entry_format.h" |
15 #include "net/disk_cache/simple/simple_index.h" | 16 #include "net/disk_cache/simple/simple_index.h" |
16 | 17 |
17 | 18 |
(...skipping 20 matching lines...) Expand all Loading... |
38 const base::FilePath& path, | 39 const base::FilePath& path, |
39 const std::string& key, | 40 const std::string& key, |
40 Entry** entry, | 41 Entry** entry, |
41 const CompletionCallback& callback); | 42 const CompletionCallback& callback); |
42 | 43 |
43 static int DoomEntry(base::WeakPtr<SimpleIndex> index, | 44 static int DoomEntry(base::WeakPtr<SimpleIndex> index, |
44 const base::FilePath& path, | 45 const base::FilePath& path, |
45 const std::string& key, | 46 const std::string& key, |
46 const CompletionCallback& callback); | 47 const CompletionCallback& callback); |
47 | 48 |
| 49 std::string key() const { return key_; } |
| 50 void RunNextOperationIfNeeded(); |
| 51 |
48 // From Entry: | 52 // From Entry: |
49 virtual void Doom() OVERRIDE; | 53 virtual void Doom() OVERRIDE; |
50 virtual void Close() OVERRIDE; | 54 virtual void Close() OVERRIDE; |
51 virtual std::string GetKey() const OVERRIDE; | 55 virtual std::string GetKey() const OVERRIDE; |
52 virtual base::Time GetLastUsed() const OVERRIDE; | 56 virtual base::Time GetLastUsed() const OVERRIDE; |
53 virtual base::Time GetLastModified() const OVERRIDE; | 57 virtual base::Time GetLastModified() const OVERRIDE; |
54 virtual int32 GetDataSize(int index) const OVERRIDE; | 58 virtual int32 GetDataSize(int index) const OVERRIDE; |
55 virtual int ReadData(int index, | 59 virtual int ReadData(int index, |
56 int offset, | 60 int offset, |
57 net::IOBuffer* buf, | 61 net::IOBuffer* buf, |
58 int buf_len, | 62 int buf_len, |
59 const CompletionCallback& callback) OVERRIDE; | 63 const CompletionCallback& callback) OVERRIDE; |
| 64 |
60 virtual int WriteData(int index, | 65 virtual int WriteData(int index, |
61 int offset, | 66 int offset, |
62 net::IOBuffer* buf, | 67 net::IOBuffer* buf, |
63 int buf_len, | 68 int buf_len, |
64 const CompletionCallback& callback, | 69 const CompletionCallback& callback, |
65 bool truncate) OVERRIDE; | 70 bool truncate) OVERRIDE; |
66 virtual int ReadSparseData(int64 offset, | 71 virtual int ReadSparseData(int64 offset, |
67 net::IOBuffer* buf, | 72 net::IOBuffer* buf, |
68 int buf_len, | 73 int buf_len, |
69 const CompletionCallback& callback) OVERRIDE; | 74 const CompletionCallback& callback) OVERRIDE; |
70 virtual int WriteSparseData(int64 offset, | 75 virtual int WriteSparseData(int64 offset, |
71 net::IOBuffer* buf, | 76 net::IOBuffer* buf, |
72 int buf_len, | 77 int buf_len, |
73 const CompletionCallback& callback) OVERRIDE; | 78 const CompletionCallback& callback) OVERRIDE; |
74 virtual int GetAvailableRange(int64 offset, | 79 virtual int GetAvailableRange(int64 offset, |
75 int len, | 80 int len, |
76 int64* start, | 81 int64* start, |
77 const CompletionCallback& callback) OVERRIDE; | 82 const CompletionCallback& callback) OVERRIDE; |
78 virtual bool CouldBeSparse() const OVERRIDE; | 83 virtual bool CouldBeSparse() const OVERRIDE; |
79 virtual void CancelSparseIO() OVERRIDE; | 84 virtual void CancelSparseIO() OVERRIDE; |
80 virtual int ReadyForSparseIO(const CompletionCallback& callback) OVERRIDE; | 85 virtual int ReadyForSparseIO(const CompletionCallback& callback) OVERRIDE; |
81 | 86 |
82 private: | 87 private: |
83 SimpleEntryImpl(SimpleSynchronousEntry* synchronous_entry, | 88 SimpleEntryImpl(SimpleSynchronousEntry* synchronous_entry, |
84 base::WeakPtr<SimpleIndex> index); | 89 base::WeakPtr<SimpleIndex> index); |
85 | 90 |
86 virtual ~SimpleEntryImpl(); | 91 virtual ~SimpleEntryImpl(); |
87 | 92 |
| 93 void DoomInternal(); |
| 94 |
| 95 void ReadDataInternal(int index, |
| 96 int offset, |
| 97 scoped_refptr<net::IOBuffer> buf, |
| 98 int buf_len, |
| 99 const CompletionCallback& callback); |
| 100 void WriteDataInternal(int index, |
| 101 int offset, |
| 102 scoped_refptr<net::IOBuffer> buf, |
| 103 int buf_len, |
| 104 const CompletionCallback& callback, |
| 105 bool truncate); |
| 106 |
| 107 |
| 108 |
88 // Called after a SimpleSynchronousEntry has completed CreateEntry() or | 109 // Called after a SimpleSynchronousEntry has completed CreateEntry() or |
89 // OpenEntry(). Constructs the new SimpleEntryImpl (if |result| is net::OK) | 110 // OpenEntry(). Constructs the new SimpleEntryImpl (if |result| is net::OK) |
90 // and passes it back to the caller via |out_entry|. Also runs | 111 // and passes it back to the caller via |out_entry|. Also runs |
91 // |completion_callback|. | 112 // |completion_callback|. |
92 static void CreationOperationComplete( | 113 static void CreationOperationComplete( |
93 base::WeakPtr<SimpleIndex> index, | 114 base::WeakPtr<SimpleIndex> index, |
94 const CompletionCallback& completion_callback, | 115 const CompletionCallback& completion_callback, |
95 const std::string& key, | 116 const std::string& key, |
96 Entry** out_entry, | 117 Entry** out_entry, |
97 SimpleSynchronousEntry* sync_entry); | 118 SimpleSynchronousEntry* sync_entry); |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
134 // |synchronous_entry_in_use_by_worker_| is false (i.e. when an operation | 155 // |synchronous_entry_in_use_by_worker_| is false (i.e. when an operation |
135 // is not pending on the worker pool). When an operation is pending on the | 156 // is not pending on the worker pool). When an operation is pending on the |
136 // worker pool, the |synchronous_entry_| is owned by itself. | 157 // worker pool, the |synchronous_entry_| is owned by itself. |
137 SimpleSynchronousEntry* synchronous_entry_; | 158 SimpleSynchronousEntry* synchronous_entry_; |
138 | 159 |
139 // Set to true when a worker operation is posted on the |synchronous_entry_|, | 160 // Set to true when a worker operation is posted on the |synchronous_entry_|, |
140 // and false after. Used to ensure thread safety by not allowing multiple | 161 // and false after. Used to ensure thread safety by not allowing multiple |
141 // threads to access the |synchronous_entry_| simultaneously. | 162 // threads to access the |synchronous_entry_| simultaneously. |
142 bool synchronous_entry_in_use_by_worker_; | 163 bool synchronous_entry_in_use_by_worker_; |
143 | 164 |
| 165 bool read_only_operation_; |
| 166 std::queue<base::Closure> operations_; |
| 167 |
| 168 |
144 base::WeakPtr<SimpleIndex> index_; | 169 base::WeakPtr<SimpleIndex> index_; |
145 }; | 170 }; |
146 | 171 |
147 } // namespace disk_cache | 172 } // namespace disk_cache |
148 | 173 |
149 #endif // NET_DISK_CACHE_SIMPLE_SIMPLE_ENTRY_IMPL_H_ | 174 #endif // NET_DISK_CACHE_SIMPLE_SIMPLE_ENTRY_IMPL_H_ |
OLD | NEW |