Home | History | Annotate | Download | only in shared_impl
      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 
     10 namespace ppapi {
     11 
     12 FileIOStateManager::FileIOStateManager()
     13     : num_pending_ops_(0),
     14       pending_op_(OPERATION_NONE),
     15       file_open_(false) {
     16 }
     17 
     18 FileIOStateManager::~FileIOStateManager() {
     19 }
     20 
     21 void FileIOStateManager::SetOpenSucceed() {
     22   file_open_ = true;
     23 }
     24 
     25 int32_t FileIOStateManager::CheckOperationState(OperationType new_op,
     26                                                 bool should_be_open) {
     27   if (should_be_open) {
     28     if (!file_open_)
     29       return PP_ERROR_FAILED;
     30   } else {
     31     if (file_open_)
     32       return PP_ERROR_FAILED;
     33   }
     34 
     35   if (pending_op_ != OPERATION_NONE &&
     36       (pending_op_ != new_op || pending_op_ == OPERATION_EXCLUSIVE))
     37     return PP_ERROR_INPROGRESS;
     38 
     39   return PP_OK;
     40 }
     41 
     42 void FileIOStateManager::SetPendingOperation(OperationType new_op) {
     43   DCHECK(pending_op_ == OPERATION_NONE ||
     44          (pending_op_ != OPERATION_EXCLUSIVE && pending_op_ == new_op));
     45   pending_op_ = new_op;
     46   num_pending_ops_++;
     47 }
     48 
     49 void FileIOStateManager::SetOperationFinished() {
     50   DCHECK_GT(num_pending_ops_, 0);
     51   if (--num_pending_ops_ == 0)
     52     pending_op_ = OPERATION_NONE;
     53 }
     54 
     55 }  // namespace ppapi
     56 
     57