// 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/logging.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