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 STORAGE_BROWSER_FILEAPI_QUOTA_OPEN_FILE_HANDLE_H_ 6 #define STORAGE_BROWSER_FILEAPI_QUOTA_OPEN_FILE_HANDLE_H_ 7 8 #include "base/basictypes.h" 9 #include "base/memory/ref_counted.h" 10 #include "base/memory/weak_ptr.h" 11 #include "storage/browser/storage_browser_export.h" 12 13 namespace base { 14 class FilePath; 15 } 16 17 namespace storage { 18 19 class QuotaReservation; 20 class OpenFileHandleContext; 21 class QuotaReservationBuffer; 22 23 // Represents an open file like a file descriptor. 24 // This should be alive while a consumer keeps a file opened and should be 25 // deleted when the plugin closes the file. 26 class STORAGE_EXPORT OpenFileHandle { 27 public: 28 ~OpenFileHandle(); 29 30 // Updates cached file size and consumes quota for that. 31 // Both this and AddAppendModeWriteAmount should be called for each modified 32 // file before calling QuotaReservation::RefreshQuota and before closing the 33 // file. 34 void UpdateMaxWrittenOffset(int64 offset); 35 36 // Notifies that |amount| of data is written to the file in append mode, and 37 // consumes quota for that. 38 // Both this and UpdateMaxWrittenOffset should be called for each modified 39 // file before calling QuotaReservation::RefreshQuota and before closing the 40 // file. 41 void AddAppendModeWriteAmount(int64 amount); 42 43 // Returns the estimated file size for the quota consumption calculation. 44 // The client must consume its reserved quota when it writes data to the file 45 // beyond the estimated file size. 46 // The estimated file size is greater than or equal to actual file size after 47 // all clients report their file usage, and is monotonically increasing over 48 // OpenFileHandle object life cycle, so that client may cache the value. 49 int64 GetEstimatedFileSize() const; 50 51 int64 GetMaxWrittenOffset() const; 52 const base::FilePath& platform_path() const; 53 54 private: 55 friend class QuotaReservationBuffer; 56 57 OpenFileHandle(QuotaReservation* reservation, 58 OpenFileHandleContext* context); 59 60 scoped_refptr<QuotaReservation> reservation_; 61 scoped_refptr<OpenFileHandleContext> context_; 62 63 base::SequenceChecker sequence_checker_; 64 65 DISALLOW_COPY_AND_ASSIGN(OpenFileHandle); 66 }; 67 68 } // namespace storage 69 70 #endif // STORAGE_BROWSER_FILEAPI_QUOTA_OPEN_FILE_HANDLE_H_ 71