1// Copyright 2014 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 CHROME_BROWSER_CHROMEOS_FILE_SYSTEM_PROVIDER_OPERATIONS_CREATE_DIRECTORY_H_
6#define CHROME_BROWSER_CHROMEOS_FILE_SYSTEM_PROVIDER_OPERATIONS_CREATE_DIRECTORY_H_
7
8#include "base/files/file.h"
9#include "base/memory/scoped_ptr.h"
10#include "chrome/browser/chromeos/file_system_provider/operations/operation.h"
11#include "chrome/browser/chromeos/file_system_provider/provided_file_system_info.h"
12#include "chrome/browser/chromeos/file_system_provider/provided_file_system_interface.h"
13#include "chrome/browser/chromeos/file_system_provider/request_value.h"
14#include "storage/browser/fileapi/async_file_util.h"
15
16namespace base {
17class FilePath;
18}  // namespace base
19
20namespace extensions {
21class EventRouter;
22}  // namespace extensions
23
24namespace chromeos {
25namespace file_system_provider {
26namespace operations {
27
28// Creates a directory. If |recursive| is set to true, then creates also all
29// non-existing directories on the path. The operation will fail if the
30// directory already exists. Created per request.
31class CreateDirectory : public Operation {
32 public:
33  CreateDirectory(extensions::EventRouter* event_router,
34                  const ProvidedFileSystemInfo& file_system_info,
35                  const base::FilePath& directory_path,
36                  bool recursive,
37                  const storage::AsyncFileUtil::StatusCallback& callback);
38  virtual ~CreateDirectory();
39
40  // Operation overrides.
41  virtual bool Execute(int request_id) OVERRIDE;
42  virtual void OnSuccess(int request_id,
43                         scoped_ptr<RequestValue> result,
44                         bool has_more) OVERRIDE;
45  virtual void OnError(int request_id,
46                       scoped_ptr<RequestValue> result,
47                       base::File::Error error) OVERRIDE;
48
49 private:
50  base::FilePath directory_path_;
51  ProvidedFileSystemInterface::OpenFileMode mode_;
52  bool recursive_;
53  const storage::AsyncFileUtil::StatusCallback callback_;
54
55  DISALLOW_COPY_AND_ASSIGN(CreateDirectory);
56};
57
58}  // namespace operations
59}  // namespace file_system_provider
60}  // namespace chromeos
61
62#endif  // CHROME_BROWSER_CHROMEOS_FILE_SYSTEM_PROVIDER_OPERATIONS_CREATE_DIRECTORY_H_
63