Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(620)

Side by Side Diff: webkit/browser/fileapi/quota/quota_reservation.cc

Issue 139833006: [FileAPI] Ignore requests after QuotaReservation::OnClientCrash call. (2/6) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « webkit/browser/fileapi/quota/quota_reservation.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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.h" 5 #include "webkit/browser/fileapi/quota/quota_reservation.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "webkit/browser/fileapi/quota/open_file_handle.h" 8 #include "webkit/browser/fileapi/quota/open_file_handle.h"
9 #include "webkit/browser/fileapi/quota/quota_reservation_buffer.h" 9 #include "webkit/browser/fileapi/quota/quota_reservation_buffer.h"
10 10
11 namespace fileapi { 11 namespace fileapi {
12 12
13 void QuotaReservation::RefreshReservation( 13 void QuotaReservation::RefreshReservation(
14 int64 size, 14 int64 size,
15 const StatusCallback& callback) { 15 const StatusCallback& callback) {
16 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 16 DCHECK(sequence_checker_.CalledOnValidSequencedThread());
17 DCHECK(!running_refresh_request_); 17 DCHECK(!running_refresh_request_);
18 DCHECK(!client_crashed_);
18 if (!reservation_manager()) 19 if (!reservation_manager())
19 return; 20 return;
20 21
21 running_refresh_request_ = true; 22 running_refresh_request_ = true;
22 23
23 reservation_manager()->ReserveQuota( 24 reservation_manager()->ReserveQuota(
24 origin(), type(), size - remaining_quota_, 25 origin(), type(), size - remaining_quota_,
25 base::Bind(&QuotaReservation::AdaptDidUpdateReservedQuota, 26 base::Bind(&QuotaReservation::AdaptDidUpdateReservedQuota,
26 weak_ptr_factory_.GetWeakPtr(), 27 weak_ptr_factory_.GetWeakPtr(),
27 size, callback)); 28 size, callback));
28 29
29 if (running_refresh_request_) 30 if (running_refresh_request_)
30 remaining_quota_ = 0; 31 remaining_quota_ = 0;
31 } 32 }
32 33
33 scoped_ptr<OpenFileHandle> QuotaReservation::GetOpenFileHandle( 34 scoped_ptr<OpenFileHandle> QuotaReservation::GetOpenFileHandle(
34 const base::FilePath& platform_path) { 35 const base::FilePath& platform_path) {
35 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 36 DCHECK(sequence_checker_.CalledOnValidSequencedThread());
37 DCHECK(!client_crashed_);
36 return reservation_buffer_->GetOpenFileHandle(this, platform_path); 38 return reservation_buffer_->GetOpenFileHandle(this, platform_path);
37 } 39 }
38 40
39 void QuotaReservation::OnClientCrash() { 41 void QuotaReservation::OnClientCrash() {
40 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 42 DCHECK(sequence_checker_.CalledOnValidSequencedThread());
43 client_crashed_ = true;
41 44
42 if (remaining_quota_) { 45 if (remaining_quota_) {
43 reservation_buffer_->PutReservationToBuffer(remaining_quota_); 46 reservation_buffer_->PutReservationToBuffer(remaining_quota_);
44 remaining_quota_ = 0; 47 remaining_quota_ = 0;
45 } 48 }
46 } 49 }
47 50
48 void QuotaReservation::ConsumeReservation(int64 size) { 51 void QuotaReservation::ConsumeReservation(int64 size) {
49 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 52 DCHECK(sequence_checker_.CalledOnValidSequencedThread());
50 DCHECK_LT(0, size); 53 DCHECK_LT(0, size);
51 DCHECK_LT(size, remaining_quota_); 54 DCHECK_LE(size, remaining_quota_);
55 if (client_crashed_)
56 return;
52 57
53 remaining_quota_ -= size; 58 remaining_quota_ -= size;
54 reservation_buffer_->PutReservationToBuffer(size); 59 reservation_buffer_->PutReservationToBuffer(size);
55 } 60 }
56 61
57 QuotaReservationManager* QuotaReservation::reservation_manager() { 62 QuotaReservationManager* QuotaReservation::reservation_manager() {
58 return reservation_buffer_->reservation_manager(); 63 return reservation_buffer_->reservation_manager();
59 } 64 }
60 65
61 const GURL& QuotaReservation::origin() const { 66 const GURL& QuotaReservation::origin() const {
62 return reservation_buffer_->origin(); 67 return reservation_buffer_->origin();
63 } 68 }
64 69
65 FileSystemType QuotaReservation::type() const { 70 FileSystemType QuotaReservation::type() const {
66 return reservation_buffer_->type(); 71 return reservation_buffer_->type();
67 } 72 }
68 73
69 QuotaReservation::QuotaReservation( 74 QuotaReservation::QuotaReservation(
70 QuotaReservationBuffer* reservation_buffer) 75 QuotaReservationBuffer* reservation_buffer)
71 : running_refresh_request_(false), 76 : client_crashed_(false),
77 running_refresh_request_(false),
72 remaining_quota_(0), 78 remaining_quota_(0),
73 reservation_buffer_(reservation_buffer), 79 reservation_buffer_(reservation_buffer),
74 weak_ptr_factory_(this) { 80 weak_ptr_factory_(this) {
75 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 81 DCHECK(sequence_checker_.CalledOnValidSequencedThread());
76 } 82 }
77 83
78 QuotaReservation::~QuotaReservation() { 84 QuotaReservation::~QuotaReservation() {
79 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 85 DCHECK(sequence_checker_.CalledOnValidSequencedThread());
80 86
81 if (remaining_quota_ && reservation_manager()) { 87 if (remaining_quota_ && reservation_manager()) {
82 reservation_manager()->ReleaseReservedQuota( 88 reservation_manager()->ReleaseReservedQuota(
83 origin(), type(), remaining_quota_); 89 origin(), type(), remaining_quota_);
84 } 90 }
85 } 91 }
86 92
87 // static 93 // static
88 bool QuotaReservation::AdaptDidUpdateReservedQuota( 94 bool QuotaReservation::AdaptDidUpdateReservedQuota(
89 const base::WeakPtr<QuotaReservation>& reservation, 95 const base::WeakPtr<QuotaReservation>& reservation,
90 int64 new_reserved_size, 96 int64 new_reserved_size,
91 const StatusCallback& callback, 97 const StatusCallback& callback,
92 base::PlatformFileError error) { 98 base::PlatformFileError error) {
93 if (!reservation) 99 if (!reservation)
94 return false; 100 return false;
95 101
96 reservation->DidUpdateReservedQuota(new_reserved_size, callback, error); 102 return reservation->DidUpdateReservedQuota(
97 return true; 103 new_reserved_size, callback, error);
98 } 104 }
99 105
100 void QuotaReservation::DidUpdateReservedQuota( 106 bool QuotaReservation::DidUpdateReservedQuota(
101 int64 new_reserved_size, 107 int64 new_reserved_size,
102 const StatusCallback& callback, 108 const StatusCallback& callback,
103 base::PlatformFileError error) { 109 base::PlatformFileError error) {
104 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 110 DCHECK(sequence_checker_.CalledOnValidSequencedThread());
105 DCHECK(running_refresh_request_); 111 DCHECK(running_refresh_request_);
106 running_refresh_request_ = false; 112 running_refresh_request_ = false;
107 113
114 if (client_crashed_) {
115 callback.Run(base::PLATFORM_FILE_ERROR_ABORT);
116 return false;
117 }
118
108 if (error == base::PLATFORM_FILE_OK) 119 if (error == base::PLATFORM_FILE_OK)
109 remaining_quota_ = new_reserved_size; 120 remaining_quota_ = new_reserved_size;
110 callback.Run(error); 121 callback.Run(error);
122 return true;
111 } 123 }
112 124
113 } // namespace fileapi 125 } // namespace fileapi
OLDNEW
« no previous file with comments | « webkit/browser/fileapi/quota/quota_reservation.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698