OLD | NEW |
| (Empty) |
1 // Copyright (c) 2012 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 #include "base/location.h" | |
6 #include "base/message_loop/message_loop_proxy.h" | |
7 #include "base/task_runner_util.h" | |
8 #include "net/base/io_buffer.h" | |
9 #include "net/base/net_errors.h" | |
10 #include "net/disk_cache/flash/flash_entry_impl.h" | |
11 #include "net/disk_cache/flash/internal_entry.h" | |
12 | |
13 namespace disk_cache { | |
14 | |
15 FlashEntryImpl::FlashEntryImpl(const std::string& key, | |
16 LogStore* store, | |
17 base::MessageLoopProxy* cache_thread) | |
18 : init_(false), | |
19 key_(key), | |
20 new_internal_entry_(new InternalEntry(key, store)), | |
21 cache_thread_(cache_thread) { | |
22 memset(stream_sizes_, 0, sizeof(stream_sizes_)); | |
23 } | |
24 | |
25 FlashEntryImpl::FlashEntryImpl(int32 id, | |
26 LogStore* store, | |
27 base::MessageLoopProxy* cache_thread) | |
28 : init_(false), | |
29 old_internal_entry_(new InternalEntry(id, store)), | |
30 cache_thread_(cache_thread) { | |
31 } | |
32 | |
33 int FlashEntryImpl::Init(const CompletionCallback& callback) { | |
34 if (new_internal_entry_.get()) { | |
35 DCHECK(callback.is_null()); | |
36 init_ = true; | |
37 return net::OK; | |
38 } | |
39 DCHECK(!callback.is_null() && old_internal_entry_.get()); | |
40 callback_ = callback; | |
41 PostTaskAndReplyWithResult(cache_thread_.get(), | |
42 FROM_HERE, | |
43 Bind(&InternalEntry::Init, old_internal_entry_), | |
44 Bind(&FlashEntryImpl::OnInitComplete, this)); | |
45 return net::ERR_IO_PENDING; | |
46 } | |
47 | |
48 void FlashEntryImpl::Doom() { | |
49 DCHECK(init_); | |
50 NOTREACHED(); | |
51 } | |
52 | |
53 void FlashEntryImpl::Close() { | |
54 DCHECK(init_); | |
55 Release(); | |
56 } | |
57 | |
58 std::string FlashEntryImpl::GetKey() const { | |
59 DCHECK(init_); | |
60 return key_; | |
61 } | |
62 | |
63 base::Time FlashEntryImpl::GetLastUsed() const { | |
64 DCHECK(init_); | |
65 NOTREACHED(); | |
66 return base::Time::Now(); | |
67 } | |
68 | |
69 base::Time FlashEntryImpl::GetLastModified() const { | |
70 DCHECK(init_); | |
71 NOTREACHED(); | |
72 return base::Time::Now(); | |
73 } | |
74 | |
75 int32 FlashEntryImpl::GetDataSize(int index) const { | |
76 DCHECK(init_); | |
77 return new_internal_entry_->GetDataSize(index); | |
78 } | |
79 | |
80 int FlashEntryImpl::ReadData(int index, int offset, IOBuffer* buf, int buf_len, | |
81 const CompletionCallback& callback) { | |
82 DCHECK(init_); | |
83 return new_internal_entry_->ReadData(index, offset, buf, buf_len, callback); | |
84 } | |
85 | |
86 int FlashEntryImpl::WriteData(int index, int offset, IOBuffer* buf, int buf_len, | |
87 const CompletionCallback& callback, | |
88 bool truncate) { | |
89 DCHECK(init_); | |
90 return new_internal_entry_->WriteData(index, offset, buf, buf_len, callback); | |
91 } | |
92 | |
93 int FlashEntryImpl::ReadSparseData(int64 offset, IOBuffer* buf, int buf_len, | |
94 const CompletionCallback& callback) { | |
95 DCHECK(init_); | |
96 NOTREACHED(); | |
97 return net::ERR_FAILED; | |
98 } | |
99 | |
100 int FlashEntryImpl::WriteSparseData(int64 offset, IOBuffer* buf, int buf_len, | |
101 const CompletionCallback& callback) { | |
102 DCHECK(init_); | |
103 NOTREACHED(); | |
104 return net::ERR_FAILED; | |
105 } | |
106 | |
107 int FlashEntryImpl::GetAvailableRange(int64 offset, int len, int64* start, | |
108 const CompletionCallback& callback) { | |
109 DCHECK(init_); | |
110 NOTREACHED(); | |
111 return net::ERR_FAILED; | |
112 } | |
113 | |
114 bool FlashEntryImpl::CouldBeSparse() const { | |
115 DCHECK(init_); | |
116 NOTREACHED(); | |
117 return false; | |
118 } | |
119 | |
120 void FlashEntryImpl::CancelSparseIO() { | |
121 DCHECK(init_); | |
122 NOTREACHED(); | |
123 } | |
124 | |
125 int FlashEntryImpl::ReadyForSparseIO(const CompletionCallback& callback) { | |
126 DCHECK(init_); | |
127 NOTREACHED(); | |
128 return net::ERR_FAILED; | |
129 } | |
130 | |
131 void FlashEntryImpl::OnInitComplete( | |
132 scoped_ptr<KeyAndStreamSizes> key_and_stream_sizes) { | |
133 DCHECK(!callback_.is_null()); | |
134 if (!key_and_stream_sizes) { | |
135 callback_.Run(net::ERR_FAILED); | |
136 } else { | |
137 key_ = key_and_stream_sizes->key; | |
138 memcpy(stream_sizes_, key_and_stream_sizes->stream_sizes, | |
139 sizeof(stream_sizes_)); | |
140 init_ = true; | |
141 callback_.Run(net::OK); | |
142 } | |
143 } | |
144 | |
145 FlashEntryImpl::~FlashEntryImpl() { | |
146 cache_thread_->PostTask(FROM_HERE, | |
147 Bind(&InternalEntry::Close, new_internal_entry_)); | |
148 } | |
149 | |
150 } // namespace disk_cache | |
OLD | NEW |