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_
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"
19 class ScopedClosureRunner
;
20 class SequencedTaskRunner
;
29 class ResourceMetadata
;
31 } // namespace internal
33 namespace file_system
{
35 class CreateFileOperation
;
36 class DownloadOperation
;
37 class OperationDelegate
;
39 class OpenFileOperation
{
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
);
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
,
59 const std::string
& mime_type
,
60 const OpenFileCallback
& callback
);
63 // Part of OpenFile(). Called after file creation is completed.
64 void OpenFileAfterCreateFile(const base::FilePath
& file_path
,
65 const OpenFileCallback
& callback
,
68 // Part of OpenFile(). Called after file downloading is completed.
69 void OpenFileAfterFileDownloaded(const OpenFileCallback
& callback
,
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
,
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
106 #endif // CHROME_BROWSER_CHROMEOS_DRIVE_FILE_SYSTEM_OPEN_FILE_OPERATION_H_