blob: 517df95f12e3d8f15b27f0b288987474c9a9173d [file] [log] [blame]
Viet-Trung Luu2a394492015-03-04 08:03:20 -08001// Copyright 2015 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#ifndef SERVICES_FILES_DIRECTORY_IMPL_H_
6#define SERVICES_FILES_DIRECTORY_IMPL_H_
7
8#include "base/files/scoped_file.h"
9#include "base/macros.h"
10#include "base/memory/scoped_ptr.h"
11#include "mojo/public/cpp/bindings/interface_request.h"
12#include "mojo/public/cpp/bindings/strong_binding.h"
Viet-Trung Luu08e339a2015-10-10 01:03:09 -070013#include "mojo/services/files/interfaces/directory.mojom.h"
Viet-Trung Luu2a394492015-03-04 08:03:20 -080014
15namespace base {
16class ScopedTempDir;
17} // namespace base
18
19namespace mojo {
20namespace files {
21
22class DirectoryImpl : public Directory {
23 public:
24 // Set |temp_dir| only if there's a temporary directory that should be deleted
25 // when this object is destroyed.
26 DirectoryImpl(InterfaceRequest<Directory> request,
27 base::ScopedFD dir_fd,
28 scoped_ptr<base::ScopedTempDir> temp_dir);
29 ~DirectoryImpl() override;
30
31 // |Directory| implementation:
Viet-Trung Luu05806242015-04-03 10:17:37 -070032 void Read(const ReadCallback& callback) override;
33 void Stat(const StatCallback& callback) override;
Viet-Trung Luu2a394492015-03-04 08:03:20 -080034 void Touch(TimespecOrNowPtr atime,
35 TimespecOrNowPtr mtime,
Viet-Trung Luu05806242015-04-03 10:17:37 -070036 const TouchCallback& callback) override;
Viet-Trung Luu2a394492015-03-04 08:03:20 -080037 void OpenFile(const String& path,
38 InterfaceRequest<File> file,
39 uint32_t open_flags,
Viet-Trung Luu05806242015-04-03 10:17:37 -070040 const OpenFileCallback& callback) override;
Viet-Trung Luu2a394492015-03-04 08:03:20 -080041 void OpenDirectory(const String& path,
42 InterfaceRequest<Directory> directory,
43 uint32_t open_flags,
Viet-Trung Luu05806242015-04-03 10:17:37 -070044 const OpenDirectoryCallback& callback) override;
Viet-Trung Luu2a394492015-03-04 08:03:20 -080045 void Rename(const String& path,
46 const String& new_path,
Viet-Trung Luu05806242015-04-03 10:17:37 -070047 const RenameCallback& callback) override;
Viet-Trung Luu2a394492015-03-04 08:03:20 -080048 void Delete(const String& path,
49 uint32_t delete_flags,
Viet-Trung Luu05806242015-04-03 10:17:37 -070050 const DeleteCallback& callback) override;
Viet-Trung Luu2a394492015-03-04 08:03:20 -080051
52 private:
53 StrongBinding<Directory> binding_;
54 base::ScopedFD dir_fd_;
55 scoped_ptr<base::ScopedTempDir> temp_dir_;
56
57 DISALLOW_COPY_AND_ASSIGN(DirectoryImpl);
58};
59
60} // namespace files
61} // namespace mojo
62
63#endif // SERVICES_FILES_DIRECTORY_IMPL_H_