OLD | NEW |
| (Empty) |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #ifndef NET_DISK_CACHE_SIMPLE_SIMPLE_ENTRY_OPERATION_H_ | |
6 #define NET_DISK_CACHE_SIMPLE_SIMPLE_ENTRY_OPERATION_H_ | |
7 | |
8 #include "base/memory/ref_counted.h" | |
9 #include "net/base/completion_callback.h" | |
10 #include "net/base/net_log.h" | |
11 | |
12 namespace net { | |
13 class IOBuffer; | |
14 } | |
15 | |
16 namespace disk_cache { | |
17 | |
18 class Entry; | |
19 class SimpleEntryImpl; | |
20 | |
21 // SimpleEntryOperation stores the information regarding operations in | |
22 // SimpleEntryImpl, between the moment they are issued by users of the backend, | |
23 // and the moment when they are executed. | |
24 class SimpleEntryOperation { | |
25 public: | |
26 typedef net::CompletionCallback CompletionCallback; | |
27 | |
28 enum EntryOperationType { | |
29 TYPE_OPEN = 0, | |
30 TYPE_CREATE = 1, | |
31 TYPE_CLOSE = 2, | |
32 TYPE_READ = 3, | |
33 TYPE_WRITE = 4, | |
34 TYPE_READ_SPARSE = 5, | |
35 TYPE_WRITE_SPARSE = 6, | |
36 TYPE_GET_AVAILABLE_RANGE = 7, | |
37 TYPE_DOOM = 8, | |
38 }; | |
39 | |
40 SimpleEntryOperation(const SimpleEntryOperation& other); | |
41 ~SimpleEntryOperation(); | |
42 | |
43 static SimpleEntryOperation OpenOperation(SimpleEntryImpl* entry, | |
44 bool have_index, | |
45 const CompletionCallback& callback, | |
46 Entry** out_entry); | |
47 static SimpleEntryOperation CreateOperation( | |
48 SimpleEntryImpl* entry, | |
49 bool have_index, | |
50 const CompletionCallback& callback, | |
51 Entry** out_entry); | |
52 static SimpleEntryOperation CloseOperation(SimpleEntryImpl* entry); | |
53 static SimpleEntryOperation ReadOperation(SimpleEntryImpl* entry, | |
54 int index, | |
55 int offset, | |
56 int length, | |
57 net::IOBuffer* buf, | |
58 const CompletionCallback& callback, | |
59 bool alone_in_queue); | |
60 static SimpleEntryOperation WriteOperation( | |
61 SimpleEntryImpl* entry, | |
62 int index, | |
63 int offset, | |
64 int length, | |
65 net::IOBuffer* buf, | |
66 bool truncate, | |
67 bool optimistic, | |
68 const CompletionCallback& callback); | |
69 static SimpleEntryOperation ReadSparseOperation( | |
70 SimpleEntryImpl* entry, | |
71 int64 sparse_offset, | |
72 int length, | |
73 net::IOBuffer* buf, | |
74 const CompletionCallback& callback); | |
75 static SimpleEntryOperation WriteSparseOperation( | |
76 SimpleEntryImpl* entry, | |
77 int64 sparse_offset, | |
78 int length, | |
79 net::IOBuffer* buf, | |
80 const CompletionCallback& callback); | |
81 static SimpleEntryOperation GetAvailableRangeOperation( | |
82 SimpleEntryImpl* entry, | |
83 int64 sparse_offset, | |
84 int length, | |
85 int64* out_start, | |
86 const CompletionCallback& callback); | |
87 static SimpleEntryOperation DoomOperation( | |
88 SimpleEntryImpl* entry, | |
89 const CompletionCallback& callback); | |
90 | |
91 bool ConflictsWith(const SimpleEntryOperation& other_op) const; | |
92 // Releases all references. After calling this operation, SimpleEntryOperation | |
93 // will only hold POD members. | |
94 void ReleaseReferences(); | |
95 | |
96 EntryOperationType type() const { | |
97 return static_cast<EntryOperationType>(type_); | |
98 } | |
99 const CompletionCallback& callback() const { return callback_; } | |
100 Entry** out_entry() { return out_entry_; } | |
101 bool have_index() const { return have_index_; } | |
102 int index() const { return index_; } | |
103 int offset() const { return offset_; } | |
104 int64 sparse_offset() const { return sparse_offset_; } | |
105 int length() const { return length_; } | |
106 int64* out_start() { return out_start_; } | |
107 net::IOBuffer* buf() { return buf_.get(); } | |
108 bool truncate() const { return truncate_; } | |
109 bool optimistic() const { return optimistic_; } | |
110 bool alone_in_queue() const { return alone_in_queue_; } | |
111 | |
112 private: | |
113 SimpleEntryOperation(SimpleEntryImpl* entry, | |
114 net::IOBuffer* buf, | |
115 const CompletionCallback& callback, | |
116 Entry** out_entry, | |
117 int offset, | |
118 int64 sparse_offset, | |
119 int length, | |
120 int64* out_start, | |
121 EntryOperationType type, | |
122 bool have_index, | |
123 int index, | |
124 bool truncate, | |
125 bool optimistic, | |
126 bool alone_in_queue); | |
127 | |
128 // This ensures entry will not be deleted until the operation has ran. | |
129 scoped_refptr<SimpleEntryImpl> entry_; | |
130 scoped_refptr<net::IOBuffer> buf_; | |
131 CompletionCallback callback_; | |
132 | |
133 // Used in open and create operations. | |
134 Entry** out_entry_; | |
135 | |
136 // Used in write and read operations. | |
137 const int offset_; | |
138 const int64 sparse_offset_; | |
139 const int length_; | |
140 | |
141 // Used in get available range operations. | |
142 int64* const out_start_; | |
143 | |
144 const EntryOperationType type_; | |
145 // Used in open and create operations. | |
146 const bool have_index_; | |
147 // Used in write and read operations. | |
148 const unsigned int index_; | |
149 // Used only in write operations. | |
150 const bool truncate_; | |
151 const bool optimistic_; | |
152 // Used only in SimpleCache.ReadIsParallelizable histogram. | |
153 const bool alone_in_queue_; | |
154 }; | |
155 | |
156 } // namespace disk_cache | |
157 | |
158 #endif // NET_DISK_CACHE_SIMPLE_SIMPLE_ENTRY_OPERATION_H_ | |
OLD | NEW |