Index: ppapi/shared_impl/file_io_state_manager.cc |
=================================================================== |
--- ppapi/shared_impl/file_io_state_manager.cc (revision 0) |
+++ ppapi/shared_impl/file_io_state_manager.cc (revision 0) |
@@ -0,0 +1,56 @@ |
+// 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 |
+ |