1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "ppapi/shared_impl/file_io_state_manager.h" 6 7#include "base/logging.h" 8#include "ppapi/c/pp_errors.h" 9 10namespace ppapi { 11 12FileIOStateManager::FileIOStateManager() 13 : num_pending_ops_(0), pending_op_(OPERATION_NONE), file_open_(false) {} 14 15FileIOStateManager::~FileIOStateManager() {} 16 17void FileIOStateManager::SetOpenSucceed() { file_open_ = true; } 18 19int32_t FileIOStateManager::CheckOperationState(OperationType new_op, 20 bool should_be_open) { 21 if (should_be_open) { 22 if (!file_open_) 23 return PP_ERROR_FAILED; 24 } else { 25 if (file_open_) 26 return PP_ERROR_FAILED; 27 } 28 29 if (pending_op_ != OPERATION_NONE && 30 (pending_op_ != new_op || pending_op_ == OPERATION_EXCLUSIVE)) 31 return PP_ERROR_INPROGRESS; 32 33 return PP_OK; 34} 35 36void FileIOStateManager::SetPendingOperation(OperationType new_op) { 37 DCHECK(pending_op_ == OPERATION_NONE || 38 (pending_op_ != OPERATION_EXCLUSIVE && pending_op_ == new_op)); 39 pending_op_ = new_op; 40 num_pending_ops_++; 41} 42 43void FileIOStateManager::SetOperationFinished() { 44 DCHECK_GT(num_pending_ops_, 0); 45 if (--num_pending_ops_ == 0) 46 pending_op_ = OPERATION_NONE; 47} 48 49} // namespace ppapi 50