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