| Index: ppapi/shared_impl/file_io_state_manager.cc
|
| diff --git a/ppapi/shared_impl/file_io_state_manager.cc b/ppapi/shared_impl/file_io_state_manager.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..61bd09260eed884386e7daf071ba6e657579cbe6
|
| --- /dev/null
|
| +++ b/ppapi/shared_impl/file_io_state_manager.cc
|
| @@ -0,0 +1,55 @@
|
| +// 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::OperationFinished() {
|
| + DCHECK(num_pending_ops_ > 0);
|
| + if (--num_pending_ops_ == 0)
|
| + pending_op_ = OPERATION_NONE;
|
| +}
|
| +
|
| +} // namespace ppapi
|
|
|