// Copyright 2013 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.

// From private/ppb_isolated_file_system_private.idl,
//   modified Mon Nov 25 11:17:07 2013.

#include "ppapi/c/pp_completion_callback.h"
#include "ppapi/c/pp_errors.h"
#include "ppapi/c/private/ppb_isolated_file_system_private.h"
#include "ppapi/shared_impl/tracked_callback.h"
#include "ppapi/thunk/enter.h"
#include "ppapi/thunk/ppapi_thunk_export.h"
#include "ppapi/thunk/ppb_isolated_file_system_private_api.h"

namespace ppapi {
namespace thunk {

namespace {

int32_t Open(PP_Instance instance,
             PP_IsolatedFileSystemType_Private type,
             PP_Resource* file_system,
             struct PP_CompletionCallback callback) {
  VLOG(4) << "PPB_IsolatedFileSystem_Private::Open()";
  EnterInstanceAPI<PPB_IsolatedFileSystem_Private_API> enter(instance,
                                                             callback);
  if (enter.failed())
    return enter.retval();
  return enter.SetResult(enter.functions()->Open(instance,
                                                 type,
                                                 file_system,
                                                 enter.callback()));
}

const PPB_IsolatedFileSystem_Private_0_2
    g_ppb_isolatedfilesystem_private_thunk_0_2 = {
  &Open
};

}  // namespace

PPAPI_THUNK_EXPORT const PPB_IsolatedFileSystem_Private_0_2*
    GetPPB_IsolatedFileSystem_Private_0_2_Thunk() {
  return &g_ppb_isolatedfilesystem_private_thunk_0_2;
}

}  // namespace thunk
}  // namespace ppapi
