|  | // Copyright 2013 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #ifndef STORAGE_BROWSER_FILEAPI_QUOTA_OPEN_FILE_HANDLE_H_ | 
|  | #define STORAGE_BROWSER_FILEAPI_QUOTA_OPEN_FILE_HANDLE_H_ | 
|  |  | 
|  | #include <stdint.h> | 
|  |  | 
|  | #include "base/macros.h" | 
|  | #include "base/memory/ref_counted.h" | 
|  | #include "base/memory/weak_ptr.h" | 
|  | #include "storage/browser/storage_browser_export.h" | 
|  |  | 
|  | namespace base { | 
|  | class FilePath; | 
|  | } | 
|  |  | 
|  | namespace storage { | 
|  |  | 
|  | class QuotaReservation; | 
|  | class OpenFileHandleContext; | 
|  | class QuotaReservationBuffer; | 
|  |  | 
|  | // Represents an open file like a file descriptor. | 
|  | // This should be alive while a consumer keeps a file opened and should be | 
|  | // deleted when the plugin closes the file. | 
|  | class STORAGE_EXPORT OpenFileHandle { | 
|  | public: | 
|  | ~OpenFileHandle(); | 
|  |  | 
|  | // Updates cached file size and consumes quota for that. | 
|  | // Both this and AddAppendModeWriteAmount should be called for each modified | 
|  | // file before calling QuotaReservation::RefreshQuota and before closing the | 
|  | // file. | 
|  | void UpdateMaxWrittenOffset(int64_t offset); | 
|  |  | 
|  | // Notifies that |amount| of data is written to the file in append mode, and | 
|  | // consumes quota for that. | 
|  | // Both this and UpdateMaxWrittenOffset should be called for each modified | 
|  | // file before calling QuotaReservation::RefreshQuota and before closing the | 
|  | // file. | 
|  | void AddAppendModeWriteAmount(int64_t amount); | 
|  |  | 
|  | // Returns the estimated file size for the quota consumption calculation. | 
|  | // The client must consume its reserved quota when it writes data to the file | 
|  | // beyond the estimated file size. | 
|  | // The estimated file size is greater than or equal to actual file size after | 
|  | // all clients report their file usage,  and is monotonically increasing over | 
|  | // OpenFileHandle object life cycle, so that client may cache the value. | 
|  | int64_t GetEstimatedFileSize() const; | 
|  |  | 
|  | int64_t GetMaxWrittenOffset() const; | 
|  | const base::FilePath& platform_path() const; | 
|  |  | 
|  | private: | 
|  | friend class QuotaReservationBuffer; | 
|  |  | 
|  | OpenFileHandle(QuotaReservation* reservation, | 
|  | OpenFileHandleContext* context); | 
|  |  | 
|  | scoped_refptr<QuotaReservation> reservation_; | 
|  | scoped_refptr<OpenFileHandleContext> context_; | 
|  |  | 
|  | base::SequenceChecker sequence_checker_; | 
|  |  | 
|  | DISALLOW_COPY_AND_ASSIGN(OpenFileHandle); | 
|  | }; | 
|  |  | 
|  | }  // namespace storage | 
|  |  | 
|  | #endif  // STORAGE_BROWSER_FILEAPI_QUOTA_OPEN_FILE_HANDLE_H_ |