// 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.
//
// CRX filesystem is a filesystem that allows an extension to read its own
// package directory tree.  See ppapi/examples/crxfs for example.
//
// IMPLEMENTATION
//
// The implementation involves both browser and renderer.  In order to provide
// readonly access to CRX filesystem (i.e. extension directory), we create an
// "isolated filesystem" pointing to current extension directory in browser.
// Then browser grants read permission to renderer, and tells plugin the
// filesystem id, or fsid.
//
// Once the plugin receives the fsid, it creates a PPB_FileSystem and forwards
// the fsid to PepperFileSystemHost in order to construct root url.

#ifndef PPAPI_PROXY_ISOLATED_FILE_SYSTEM_PRIVATE_RESOURCE_H_
#define PPAPI_PROXY_ISOLATED_FILE_SYSTEM_PRIVATE_RESOURCE_H_

#include <stdint.h>

#include <string>

#include "base/macros.h"
#include "base/memory/ref_counted.h"
#include "ppapi/proxy/connection.h"
#include "ppapi/proxy/plugin_resource.h"
#include "ppapi/proxy/ppapi_proxy_export.h"
#include "ppapi/thunk/ppb_isolated_file_system_private_api.h"

namespace ppapi {

class TrackedCallback;

namespace proxy {

class ResourceMessageReplyParams;

class PPAPI_PROXY_EXPORT IsolatedFileSystemPrivateResource
    : public PluginResource,
      public thunk::PPB_IsolatedFileSystem_Private_API {
 public:
  IsolatedFileSystemPrivateResource(
      Connection connection, PP_Instance instance);
  ~IsolatedFileSystemPrivateResource() override;

  // Resource overrides.
  thunk::PPB_IsolatedFileSystem_Private_API*
      AsPPB_IsolatedFileSystem_Private_API() override;

  // PPB_IsolatedFileSystem_Private_API implementation.
  int32_t Open(PP_Instance instance,
               PP_IsolatedFileSystemType_Private type,
               PP_Resource* file_system_resource,
               scoped_refptr<TrackedCallback> callback) override;

 private:
  void OnBrowserOpenComplete(PP_IsolatedFileSystemType_Private type,
                             PP_Resource* file_system_resource,
                             scoped_refptr<TrackedCallback> callback,
                             const ResourceMessageReplyParams& params,
                             const std::string& fsid);

  DISALLOW_COPY_AND_ASSIGN(IsolatedFileSystemPrivateResource);
};

}  // namespace proxy
}  // namespace ppapi

#endif  // PPAPI_PROXY_ISOLATED_FILE_SYSTEM_PRIVATE_RESOURCE_H_
