OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 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 | 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 "webkit/browser/fileapi/quota/quota_reservation_manager.h" | 5 #include "webkit/browser/fileapi/quota/quota_reservation_manager.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
9 #include "base/file_util.h" | 9 #include "base/file_util.h" |
10 #include "base/files/scoped_temp_dir.h" | 10 #include "base/files/scoped_temp_dir.h" |
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
172 // For each open file for write, the client should create OpenFileHandle | 172 // For each open file for write, the client should create OpenFileHandle |
173 // object. | 173 // object. |
174 // It's OK to create multiple OpenFileHandle for single file. | 174 // It's OK to create multiple OpenFileHandle for single file. |
175 scoped_ptr<OpenFileHandle> open_file = | 175 scoped_ptr<OpenFileHandle> open_file = |
176 reservation->GetOpenFileHandle(file_path()); | 176 reservation->GetOpenFileHandle(file_path()); |
177 | 177 |
178 // Before reserved quota ran out, the client can perform any number of | 178 // Before reserved quota ran out, the client can perform any number of |
179 // operation for the file. | 179 // operation for the file. |
180 // The client should calculate how much quota is consumed by itself. | 180 // The client should calculate how much quota is consumed by itself. |
181 int64 remaining_quota = reservation->remaining_quota(); | 181 int64 remaining_quota = reservation->remaining_quota(); |
182 int64 base_file_size = open_file->base_file_size(); | 182 int64 base_file_size = open_file->GetEstimatedFileSize(); |
183 int64 max_written_offset = base_file_size; | 183 int64 max_written_offset = base_file_size; |
184 ExtendFileTo(90); | 184 ExtendFileTo(90); |
185 max_written_offset = 90; | 185 max_written_offset = 90; |
186 remaining_quota -= max_written_offset - base_file_size; | 186 remaining_quota -= max_written_offset - base_file_size; |
187 | 187 |
188 // When the reserved quota ran out, the client can request quota refresh | 188 // When the reserved quota ran out, the client can request quota refresh |
189 // through Reservation. Before requesting another portion of quota, the | 189 // through Reservation. Before requesting another portion of quota, the |
190 // client should report maximum written offset for each modified files. | 190 // client should report maximum written offset for each modified files. |
191 open_file->UpdateMaxWrittenOffset(max_written_offset); | 191 open_file->UpdateMaxWrittenOffset(max_written_offset); |
192 EXPECT_EQ(remaining_quota, reservation->remaining_quota()); | 192 EXPECT_EQ(remaining_quota, reservation->remaining_quota()); |
(...skipping 25 matching lines...) Expand all Loading... |
218 EXPECT_EQ(100, reservation->remaining_quota()); | 218 EXPECT_EQ(100, reservation->remaining_quota()); |
219 | 219 |
220 { | 220 { |
221 scoped_ptr<OpenFileHandle> open_file1 = | 221 scoped_ptr<OpenFileHandle> open_file1 = |
222 reservation->GetOpenFileHandle(file_path()); | 222 reservation->GetOpenFileHandle(file_path()); |
223 scoped_ptr<OpenFileHandle> open_file2 = | 223 scoped_ptr<OpenFileHandle> open_file2 = |
224 reservation->GetOpenFileHandle(file_path()); | 224 reservation->GetOpenFileHandle(file_path()); |
225 | 225 |
226 int64 remaining_quota = reservation->remaining_quota(); | 226 int64 remaining_quota = reservation->remaining_quota(); |
227 | 227 |
228 int64 base_file_size_for_file1 = open_file1->base_file_size(); | 228 int64 base_file_size_for_file1 = open_file1->GetEstimatedFileSize(); |
229 int64 max_written_offset_for_file1 = base_file_size_for_file1; | 229 int64 max_written_offset_for_file1 = base_file_size_for_file1; |
230 | 230 |
231 int64 base_file_size_for_file2 = open_file2->base_file_size(); | 231 int64 base_file_size_for_file2 = open_file2->GetEstimatedFileSize(); |
232 int64 max_written_offset_for_file2 = base_file_size_for_file2; | 232 int64 max_written_offset_for_file2 = base_file_size_for_file2; |
233 | 233 |
234 // Each writer should maintain max_written_offset and base_file_size | 234 // Each writer should maintain max_written_offset and base_file_size |
235 // independently even if there are multiple writers for the same file. | 235 // independently even if there are multiple writers for the same file. |
236 max_written_offset_for_file1 = 50; | 236 max_written_offset_for_file1 = 50; |
237 ExtendFileTo(max_written_offset_for_file1); | 237 ExtendFileTo(max_written_offset_for_file1); |
238 remaining_quota -= max_written_offset_for_file1 - base_file_size_for_file1; | 238 remaining_quota -= max_written_offset_for_file1 - base_file_size_for_file1; |
239 base_file_size_for_file1 = max_written_offset_for_file1; | 239 base_file_size_for_file1 = max_written_offset_for_file1; |
240 | 240 |
241 max_written_offset_for_file2 = 90; | 241 max_written_offset_for_file2 = 90; |
242 ExtendFileTo(max_written_offset_for_file2); | 242 ExtendFileTo(max_written_offset_for_file2); |
243 remaining_quota -= max_written_offset_for_file2 - base_file_size_for_file2; | 243 remaining_quota -= max_written_offset_for_file2 - base_file_size_for_file2; |
244 base_file_size_for_file2 = max_written_offset_for_file2; | 244 base_file_size_for_file2 = max_written_offset_for_file2; |
245 | 245 |
246 // Before requesting quota refresh, each writer should report their | 246 // Before requesting quota refresh, each writer should report their |
247 // maximum_written_offset. UpdateMaxWrittenOffset returns updated | 247 // maximum_written_offset. UpdateMaxWrittenOffset returns updated |
248 // base_file_size that the writer should calculate quota consumption based | 248 // base_file_size that the writer should calculate quota consumption based |
249 // on that. | 249 // on that. |
250 base_file_size_for_file1 = | 250 open_file1->UpdateMaxWrittenOffset(max_written_offset_for_file1); |
251 open_file1->UpdateMaxWrittenOffset(max_written_offset_for_file1); | 251 base_file_size_for_file1 = open_file1->GetEstimatedFileSize(); |
252 max_written_offset_for_file1 = base_file_size_for_file1; | 252 max_written_offset_for_file1 = base_file_size_for_file1; |
253 EXPECT_EQ(100 - (50 - kInitialFileSize), reservation->remaining_quota()); | 253 EXPECT_EQ(100 - (50 - kInitialFileSize), reservation->remaining_quota()); |
254 | 254 |
255 base_file_size_for_file2 = | 255 open_file2->UpdateMaxWrittenOffset(max_written_offset_for_file2); |
256 open_file2->UpdateMaxWrittenOffset(max_written_offset_for_file2); | 256 base_file_size_for_file2 = open_file2->GetEstimatedFileSize(); |
257 max_written_offset_for_file2 = base_file_size_for_file2; | 257 max_written_offset_for_file2 = base_file_size_for_file2; |
258 EXPECT_EQ(100 - (50 - kInitialFileSize) - (90 - 50), | 258 EXPECT_EQ(100 - (50 - kInitialFileSize) - (90 - 50), |
259 reservation->remaining_quota()); | 259 reservation->remaining_quota()); |
260 | 260 |
261 RefreshQuota(reservation, 100); | 261 RefreshQuota(reservation, 100); |
262 EXPECT_EQ(100, reservation->remaining_quota()); | 262 EXPECT_EQ(100, reservation->remaining_quota()); |
263 } | 263 } |
264 | 264 |
265 EXPECT_EQ(90, GetFileSize()); | 265 EXPECT_EQ(90, GetFileSize()); |
266 EXPECT_EQ(100, fake_backend()->on_memory_usage()); | 266 EXPECT_EQ(100, fake_backend()->on_memory_usage()); |
(...skipping 23 matching lines...) Expand all Loading... |
290 EXPECT_EQ(500, reservation2->remaining_quota()); | 290 EXPECT_EQ(500, reservation2->remaining_quota()); |
291 | 291 |
292 // Attach a file to both of two reservations. | 292 // Attach a file to both of two reservations. |
293 scoped_ptr<OpenFileHandle> open_file1 = | 293 scoped_ptr<OpenFileHandle> open_file1 = |
294 reservation1->GetOpenFileHandle(file_path()); | 294 reservation1->GetOpenFileHandle(file_path()); |
295 scoped_ptr<OpenFileHandle> open_file2 = | 295 scoped_ptr<OpenFileHandle> open_file2 = |
296 reservation2->GetOpenFileHandle(file_path()); | 296 reservation2->GetOpenFileHandle(file_path()); |
297 | 297 |
298 // Each client should manage reserved quota and its consumption separately. | 298 // Each client should manage reserved quota and its consumption separately. |
299 int64 remaining_quota1 = reservation1->remaining_quota(); | 299 int64 remaining_quota1 = reservation1->remaining_quota(); |
300 int64 base_file_size1 = open_file1->base_file_size(); | 300 int64 base_file_size1 = open_file1->GetEstimatedFileSize(); |
301 int64 max_written_offset1 = base_file_size1; | 301 int64 max_written_offset1 = base_file_size1; |
302 | 302 |
303 int64 remaining_quota2 = reservation2->remaining_quota(); | 303 int64 remaining_quota2 = reservation2->remaining_quota(); |
304 int64 base_file_size2 = open_file2->base_file_size(); | 304 int64 base_file_size2 = open_file2->GetEstimatedFileSize(); |
305 int64 max_written_offset2 = base_file_size2; | 305 int64 max_written_offset2 = base_file_size2; |
306 | 306 |
307 max_written_offset1 = 50; | 307 max_written_offset1 = 50; |
308 remaining_quota1 -= max_written_offset1 - base_file_size1; | 308 remaining_quota1 -= max_written_offset1 - base_file_size1; |
309 base_file_size1 = max_written_offset1; | 309 base_file_size1 = max_written_offset1; |
310 ExtendFileTo(max_written_offset1); | 310 ExtendFileTo(max_written_offset1); |
311 | 311 |
312 max_written_offset2 = 400; | 312 max_written_offset2 = 400; |
313 remaining_quota2 -= max_written_offset2 - base_file_size2; | 313 remaining_quota2 -= max_written_offset2 - base_file_size2; |
314 base_file_size2 = max_written_offset2; | 314 base_file_size2 = max_written_offset2; |
315 ExtendFileTo(max_written_offset2); | 315 ExtendFileTo(max_written_offset2); |
316 | 316 |
317 // For multiple Reservation case, RefreshQuota needs usage report only from | 317 // For multiple Reservation case, RefreshQuota needs usage report only from |
318 // associated OpenFile's. | 318 // associated OpenFile's. |
319 base_file_size1 = | 319 open_file1->UpdateMaxWrittenOffset(max_written_offset1); |
320 open_file1->UpdateMaxWrittenOffset(max_written_offset1); | 320 base_file_size1 = open_file1->GetEstimatedFileSize(); |
321 max_written_offset1 = base_file_size1; | 321 max_written_offset1 = base_file_size1; |
322 EXPECT_EQ(100 - (50 - kInitialFileSize), reservation1->remaining_quota()); | 322 EXPECT_EQ(100 - (50 - kInitialFileSize), reservation1->remaining_quota()); |
323 | 323 |
324 RefreshQuota(reservation1, 200); | 324 RefreshQuota(reservation1, 200); |
325 EXPECT_EQ(200, reservation1->remaining_quota()); | 325 EXPECT_EQ(200, reservation1->remaining_quota()); |
326 | 326 |
327 base_file_size2 = | 327 open_file2->UpdateMaxWrittenOffset(max_written_offset2); |
328 open_file2->UpdateMaxWrittenOffset(max_written_offset2); | 328 base_file_size2 = open_file2->GetEstimatedFileSize(); |
329 max_written_offset2 = base_file_size2; | 329 max_written_offset2 = base_file_size2; |
330 EXPECT_EQ(500 - (400 - 50), reservation2->remaining_quota()); | 330 EXPECT_EQ(500 - (400 - 50), reservation2->remaining_quota()); |
331 | 331 |
332 RefreshQuota(reservation2, 150); | 332 RefreshQuota(reservation2, 150); |
333 EXPECT_EQ(150, reservation2->remaining_quota()); | 333 EXPECT_EQ(150, reservation2->remaining_quota()); |
334 | 334 |
335 open_file1.reset(); | 335 open_file1.reset(); |
336 open_file2.reset(); | 336 open_file2.reset(); |
337 | 337 |
338 EXPECT_EQ(400, GetFileSize()); | 338 EXPECT_EQ(400, GetFileSize()); |
(...skipping 10 matching lines...) Expand all Loading... |
349 | 349 |
350 EXPECT_EQ(400, GetFileSize()); | 350 EXPECT_EQ(400, GetFileSize()); |
351 EXPECT_EQ(0, fake_backend()->on_memory_usage()); | 351 EXPECT_EQ(0, fake_backend()->on_memory_usage()); |
352 EXPECT_EQ(400 - kInitialFileSize, fake_backend()->on_disk_usage()); | 352 EXPECT_EQ(400 - kInitialFileSize, fake_backend()->on_disk_usage()); |
353 } | 353 } |
354 | 354 |
355 // TODO(tzik): Add Truncate test. | 355 // TODO(tzik): Add Truncate test. |
356 // TODO(tzik): Add PluginCrash test and DropReservationManager test. | 356 // TODO(tzik): Add PluginCrash test and DropReservationManager test. |
357 | 357 |
358 } // namespace fileapi | 358 } // namespace fileapi |
OLD | NEW |