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#include "chrome/browser/chromeos/file_system_provider/operations/create_directory.h"
6
7#include <string>
8
9#include "chrome/common/extensions/api/file_system_provider.h"
10#include "chrome/common/extensions/api/file_system_provider_internal.h"
11
12namespace chromeos {
13namespace file_system_provider {
14namespace operations {
15
16CreateDirectory::CreateDirectory(
17    extensions::EventRouter* event_router,
18    const ProvidedFileSystemInfo& file_system_info,
19    const base::FilePath& directory_path,
20    bool recursive,
21    const storage::AsyncFileUtil::StatusCallback& callback)
22    : Operation(event_router, file_system_info),
23      directory_path_(directory_path),
24      recursive_(recursive),
25      callback_(callback) {
26}
27
28CreateDirectory::~CreateDirectory() {
29}
30
31bool CreateDirectory::Execute(int request_id) {
32  using extensions::api::file_system_provider::CreateDirectoryRequestedOptions;
33
34  if (!file_system_info_.writable())
35    return false;
36
37  CreateDirectoryRequestedOptions options;
38  options.file_system_id = file_system_info_.file_system_id();
39  options.request_id = request_id;
40  options.directory_path = directory_path_.AsUTF8Unsafe();
41  options.recursive = recursive_;
42
43  return SendEvent(
44      request_id,
45      extensions::api::file_system_provider::OnCreateDirectoryRequested::
46          kEventName,
47      extensions::api::file_system_provider::OnCreateDirectoryRequested::Create(
48          options));
49}
50
51void CreateDirectory::OnSuccess(int /* request_id */,
52                                scoped_ptr<RequestValue> /* result */,
53                                bool has_more) {
54  callback_.Run(base::File::FILE_OK);
55}
56
57void CreateDirectory::OnError(int /* request_id */,
58                              scoped_ptr<RequestValue> /* result */,
59                              base::File::Error error) {
60  callback_.Run(error);
61}
62
63}  // namespace operations
64}  // namespace file_system_provider
65}  // namespace chromeos
66