// Copyright (c) 2012 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.

#include "ppapi/shared_impl/file_io_state_manager.h"

#include "base/check_op.h"
#include "ppapi/c/pp_errors.h"

namespace ppapi {

FileIOStateManager::FileIOStateManager()
    : num_pending_ops_(0), pending_op_(OPERATION_NONE), file_open_(false) {}

FileIOStateManager::~FileIOStateManager() {}

void FileIOStateManager::SetOpenSucceed() { file_open_ = true; }

int32_t FileIOStateManager::CheckOperationState(OperationType new_op,
                                                bool should_be_open) {
  if (should_be_open) {
    if (!file_open_)
      return PP_ERROR_FAILED;
  } else {
    if (file_open_)
      return PP_ERROR_FAILED;
  }

  if (pending_op_ != OPERATION_NONE &&
      (pending_op_ != new_op || pending_op_ == OPERATION_EXCLUSIVE))
    return PP_ERROR_INPROGRESS;

  return PP_OK;
}

void FileIOStateManager::SetPendingOperation(OperationType new_op) {
  DCHECK(pending_op_ == OPERATION_NONE ||
         (pending_op_ != OPERATION_EXCLUSIVE && pending_op_ == new_op));
  pending_op_ = new_op;
  num_pending_ops_++;
}

void FileIOStateManager::SetOperationFinished() {
  DCHECK_GT(num_pending_ops_, 0);
  if (--num_pending_ops_ == 0)
    pending_op_ = OPERATION_NONE;
}

}  // namespace ppapi
