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 #include "webkit/browser/fileapi/quota/quota_reservation.h" | |
6 | |
7 #include "base/bind.h" | |
8 #include "webkit/browser/fileapi/quota/open_file_handle.h" | |
9 #include "webkit/browser/fileapi/quota/quota_reservation_buffer.h" | |
10 | |
11 namespace storage { | |
12 | |
13 void QuotaReservation::RefreshReservation( | |
14 int64 size, | |
15 const StatusCallback& callback) { | |
16 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); | |
17 DCHECK(!running_refresh_request_); | |
18 DCHECK(!client_crashed_); | |
19 if (!reservation_manager()) | |
20 return; | |
21 | |
22 running_refresh_request_ = true; | |
23 | |
24 reservation_manager()->ReserveQuota( | |
25 origin(), type(), size - remaining_quota_, | |
26 base::Bind(&QuotaReservation::AdaptDidUpdateReservedQuota, | |
27 weak_ptr_factory_.GetWeakPtr(), | |
28 remaining_quota_, callback)); | |
29 | |
30 if (running_refresh_request_) | |
31 remaining_quota_ = 0; | |
32 } | |
33 | |
34 scoped_ptr<OpenFileHandle> QuotaReservation::GetOpenFileHandle( | |
35 const base::FilePath& platform_path) { | |
36 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); | |
37 DCHECK(!client_crashed_); | |
38 return reservation_buffer_->GetOpenFileHandle(this, platform_path); | |
39 } | |
40 | |
41 void QuotaReservation::OnClientCrash() { | |
42 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); | |
43 client_crashed_ = true; | |
44 | |
45 if (remaining_quota_) { | |
46 reservation_buffer_->PutReservationToBuffer(remaining_quota_); | |
47 remaining_quota_ = 0; | |
48 } | |
49 } | |
50 | |
51 void QuotaReservation::ConsumeReservation(int64 size) { | |
52 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); | |
53 DCHECK_LT(0, size); | |
54 DCHECK_LE(size, remaining_quota_); | |
55 if (client_crashed_) | |
56 return; | |
57 | |
58 remaining_quota_ -= size; | |
59 reservation_buffer_->PutReservationToBuffer(size); | |
60 } | |
61 | |
62 QuotaReservationManager* QuotaReservation::reservation_manager() { | |
63 return reservation_buffer_->reservation_manager(); | |
64 } | |
65 | |
66 const GURL& QuotaReservation::origin() const { | |
67 return reservation_buffer_->origin(); | |
68 } | |
69 | |
70 FileSystemType QuotaReservation::type() const { | |
71 return reservation_buffer_->type(); | |
72 } | |
73 | |
74 QuotaReservation::QuotaReservation( | |
75 QuotaReservationBuffer* reservation_buffer) | |
76 : client_crashed_(false), | |
77 running_refresh_request_(false), | |
78 remaining_quota_(0), | |
79 reservation_buffer_(reservation_buffer), | |
80 weak_ptr_factory_(this) { | |
81 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); | |
82 } | |
83 | |
84 QuotaReservation::~QuotaReservation() { | |
85 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); | |
86 | |
87 if (remaining_quota_ && reservation_manager()) { | |
88 reservation_manager()->ReleaseReservedQuota( | |
89 origin(), type(), remaining_quota_); | |
90 } | |
91 } | |
92 | |
93 // static | |
94 bool QuotaReservation::AdaptDidUpdateReservedQuota( | |
95 const base::WeakPtr<QuotaReservation>& reservation, | |
96 int64 previous_size, | |
97 const StatusCallback& callback, | |
98 base::File::Error error, | |
99 int64 delta) { | |
100 if (!reservation) | |
101 return false; | |
102 | |
103 return reservation->DidUpdateReservedQuota( | |
104 previous_size, callback, error, delta); | |
105 } | |
106 | |
107 bool QuotaReservation::DidUpdateReservedQuota( | |
108 int64 previous_size, | |
109 const StatusCallback& callback, | |
110 base::File::Error error, | |
111 int64 delta) { | |
112 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); | |
113 DCHECK(running_refresh_request_); | |
114 running_refresh_request_ = false; | |
115 | |
116 if (client_crashed_) { | |
117 callback.Run(base::File::FILE_ERROR_ABORT); | |
118 return false; | |
119 } | |
120 | |
121 if (error == base::File::FILE_OK) | |
122 remaining_quota_ = previous_size + delta; | |
123 callback.Run(error); | |
124 return true; | |
125 } | |
126 | |
127 } // namespace storage | |
OLD | NEW |