Check USB device path access when prompting users to select a device.
[chromium-blink-merge.git] / chrome / browser / chromeos / drive / file_system / open_file_operation.h
blob953130b65521b9a28f070c725903805f29c83949
1 // Copyright 2013 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.
5 #ifndef CHROME_BROWSER_CHROMEOS_DRIVE_FILE_SYSTEM_OPEN_FILE_OPERATION_H_
6 #define CHROME_BROWSER_CHROMEOS_DRIVE_FILE_SYSTEM_OPEN_FILE_OPERATION_H_
8 #include <map>
10 #include "base/basictypes.h"
11 #include "base/memory/ref_counted.h"
12 #include "base/memory/scoped_ptr.h"
13 #include "base/memory/weak_ptr.h"
14 #include "chrome/browser/chromeos/drive/file_errors.h"
15 #include "chrome/browser/chromeos/drive/file_system_interface.h"
17 namespace base {
18 class FilePath;
19 class ScopedClosureRunner;
20 class SequencedTaskRunner;
21 } // namespace base
23 namespace drive {
25 class JobScheduler;
26 class ResourceEntry;
28 namespace internal {
29 class ResourceMetadata;
30 class FileCache;
31 } // namespace internal
33 namespace file_system {
35 class CreateFileOperation;
36 class DownloadOperation;
37 class OperationDelegate;
39 class OpenFileOperation {
40 public:
41 OpenFileOperation(base::SequencedTaskRunner* blocking_task_runner,
42 OperationDelegate* delegate,
43 JobScheduler* scheduler,
44 internal::ResourceMetadata* metadata,
45 internal::FileCache* cache,
46 const base::FilePath& temporary_file_directory);
47 ~OpenFileOperation();
49 // Opens the file at |file_path|.
50 // If the file is not actually downloaded, this method starts
51 // to download it to the cache, and then runs |callback| upon the
52 // completion with the path to the local cache file.
53 // See also the definition of OpenMode for its meaning.
54 // If |mime_type| is non empty and the file is created by this OpenFile()
55 // call, the mime type is used as the file's property.
56 // |callback| must not be null.
57 void OpenFile(const base::FilePath& file_path,
58 OpenMode open_mode,
59 const std::string& mime_type,
60 const OpenFileCallback& callback);
62 private:
63 // Part of OpenFile(). Called after file creation is completed.
64 void OpenFileAfterCreateFile(const base::FilePath& file_path,
65 const OpenFileCallback& callback,
66 FileError error);
68 // Part of OpenFile(). Called after file downloading is completed.
69 void OpenFileAfterFileDownloaded(const OpenFileCallback& callback,
70 FileError error,
71 const base::FilePath& local_file_path,
72 scoped_ptr<ResourceEntry> entry);
74 // Part of OpenFile(). Called after opening the cache file.
75 void OpenFileAfterOpenForWrite(
76 const base::FilePath& local_file_path,
77 const std::string& local_id,
78 const OpenFileCallback& callback,
79 scoped_ptr<base::ScopedClosureRunner>* file_closer,
80 FileError error);
82 // Closes the file with |local_id|.
83 void CloseFile(const std::string& local_id,
84 scoped_ptr<base::ScopedClosureRunner> file_closer);
86 scoped_refptr<base::SequencedTaskRunner> blocking_task_runner_;
87 OperationDelegate* delegate_;
88 internal::FileCache* cache_;
90 scoped_ptr<CreateFileOperation> create_file_operation_;
91 scoped_ptr<DownloadOperation> download_operation_;
93 // The map from local id for an opened file to the number how many times
94 // the file is opened.
95 std::map<std::string, int> open_files_;
97 // Note: This should remain the last member so it'll be destroyed and
98 // invalidate its weak pointers before any other members are destroyed.
99 base::WeakPtrFactory<OpenFileOperation> weak_ptr_factory_;
100 DISALLOW_COPY_AND_ASSIGN(OpenFileOperation);
103 } // namespace file_system
104 } // namespace drive
106 #endif // CHROME_BROWSER_CHROMEOS_DRIVE_FILE_SYSTEM_OPEN_FILE_OPERATION_H_