blob: 9c9b6ea6676b3d2cbedfc5a9c068ed2549927f8e [file] [log] [blame]
// 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