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

#ifndef SERVICES_FILES_DIRECTORY_IMPL_H_
#define SERVICES_FILES_DIRECTORY_IMPL_H_

#include "base/files/scoped_file.h"
#include "base/macros.h"
#include "base/memory/scoped_ptr.h"
#include "mojo/public/cpp/bindings/interface_request.h"
#include "mojo/public/cpp/bindings/strong_binding.h"
#include "mojo/services/files/interfaces/directory.mojom.h"

namespace base {
class ScopedTempDir;
}  // namespace base

namespace mojo {
namespace files {

class DirectoryImpl : public Directory {
 public:
  // Set |temp_dir| only if there's a temporary directory that should be deleted
  // when this object is destroyed.
  DirectoryImpl(InterfaceRequest<Directory> request,
                base::ScopedFD dir_fd,
                scoped_ptr<base::ScopedTempDir> temp_dir);
  ~DirectoryImpl() override;

  // |Directory| implementation:
  void Read(const ReadCallback& callback) override;
  void Stat(const StatCallback& callback) override;
  void Touch(TimespecOrNowPtr atime,
             TimespecOrNowPtr mtime,
             const TouchCallback& callback) override;
  void OpenFile(const String& path,
                InterfaceRequest<File> file,
                uint32_t open_flags,
                const OpenFileCallback& callback) override;
  void OpenDirectory(const String& path,
                     InterfaceRequest<Directory> directory,
                     uint32_t open_flags,
                     const OpenDirectoryCallback& callback) override;
  void Rename(const String& path,
              const String& new_path,
              const RenameCallback& callback) override;
  void Delete(const String& path,
              uint32_t delete_flags,
              const DeleteCallback& callback) override;

 private:
  StrongBinding<Directory> binding_;
  base::ScopedFD dir_fd_;
  scoped_ptr<base::ScopedTempDir> temp_dir_;

  DISALLOW_COPY_AND_ASSIGN(DirectoryImpl);
};

}  // namespace files
}  // namespace mojo

#endif  // SERVICES_FILES_DIRECTORY_IMPL_H_
