1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// found in the LICENSE file.
4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "storage/browser/fileapi/quota/open_file_handle.h"
6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "storage/browser/fileapi/quota/open_file_handle_context.h"
81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "storage/browser/fileapi/quota/quota_reservation.h"
9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)namespace storage {
11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)OpenFileHandle::~OpenFileHandle() {
13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  DCHECK(sequence_checker_.CalledOnValidSequencedThread());
14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void OpenFileHandle::UpdateMaxWrittenOffset(int64 offset) {
17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  DCHECK(sequence_checker_.CalledOnValidSequencedThread());
18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  int64 growth = context_->UpdateMaxWrittenOffset(offset);
20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  if (growth > 0)
21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    reservation_->ConsumeReservation(growth);
225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void OpenFileHandle::AddAppendModeWriteAmount(int64 amount) {
255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  DCHECK(sequence_checker_.CalledOnValidSequencedThread());
265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (amount <= 0)
275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return;
28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  context_->AddAppendModeWriteAmount(amount);
305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  reservation_->ConsumeReservation(amount);
31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)int64 OpenFileHandle::GetEstimatedFileSize() const {
345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  DCHECK(sequence_checker_.CalledOnValidSequencedThread());
355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return context_->GetEstimatedFileSize();
365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)int64 OpenFileHandle::GetMaxWrittenOffset() const {
395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  DCHECK(sequence_checker_.CalledOnValidSequencedThread());
405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return context_->GetMaxWrittenOffset();
415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const base::FilePath& OpenFileHandle::platform_path() const {
445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  DCHECK(sequence_checker_.CalledOnValidSequencedThread());
455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return context_->platform_path();
46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)OpenFileHandle::OpenFileHandle(QuotaReservation* reservation,
49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                               OpenFileHandleContext* context)
50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    : reservation_(reservation),
51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      context_(context) {
52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  DCHECK(sequence_checker_.CalledOnValidSequencedThread());
53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
5503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}  // namespace storage
56