1 // Copyright (c) 2012 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_COPY_OPERATION_H_
6 #define CHROME_BROWSER_CHROMEOS_DRIVE_FILE_SYSTEM_COPY_OPERATION_H_
11 #include "base/basictypes.h"
12 #include "base/memory/ref_counted.h"
13 #include "base/memory/scoped_ptr.h"
14 #include "base/memory/weak_ptr.h"
15 #include "chrome/browser/chromeos/drive/file_errors.h"
16 #include "google_apis/drive/drive_api_error_codes.h"
20 class SequencedTaskRunner
;
24 namespace google_apis
{
26 } // namespace google_apis
35 class ResourceMetadata
;
36 } // namespace internal
38 namespace file_system
{
40 class CreateFileOperation
;
41 class OperationDelegate
;
43 // This class encapsulates the drive Copy function. It is responsible for
44 // sending the request to the drive API, then updating the local state and
45 // metadata to reflect the new state.
48 CopyOperation(base::SequencedTaskRunner
* blocking_task_runner
,
49 OperationDelegate
* delegate
,
50 JobScheduler
* scheduler
,
51 internal::ResourceMetadata
* metadata
,
52 internal::FileCache
* cache
);
55 // Performs the copy operation on the file at drive path |src_file_path|
56 // with a target of |dest_file_path|.
57 // If |preserve_last_modified| is set to true, this tries to preserve
58 // last modified time stamp. This is supported only on Drive API v2.
59 // Invokes |callback| when finished with the result of the operation.
60 // |callback| must not be null.
61 void Copy(const base::FilePath
& src_file_path
,
62 const base::FilePath
& dest_file_path
,
63 bool preserve_last_modified
,
64 const FileOperationCallback
& callback
);
66 // Initiates transfer of |local_src_file_path| to |remote_dest_file_path|.
67 // |local_src_file_path| must be a file from the local file system.
68 // |remote_dest_file_path| is the virtual destination path within Drive file
71 // |callback| must not be null.
72 void TransferFileFromLocalToRemote(
73 const base::FilePath
& local_src_file_path
,
74 const base::FilePath
& remote_dest_file_path
,
75 const FileOperationCallback
& callback
);
80 // Params for TransferJsonGdocFileAfterLocalWork.
81 struct TransferJsonGdocParams
;
84 // Part of Copy(). Called after trying to copy locally.
85 void CopyAfterTryToCopyLocally(
86 const CopyParams
* params
,
87 const std::vector
<std::string
>* updated_local_ids
,
88 const bool* directory_changed
,
89 const bool* should_copy_on_server
,
92 // Part of Copy(). Called after the parent entry gets synced.
93 void CopyAfterParentSync(const CopyParams
& params
, FileError error
);
95 // Part of Copy(). Called after the parent resource ID is resolved.
96 void CopyAfterGetParentResourceId(const CopyParams
& params
,
97 const ResourceEntry
* parent
,
100 // Part of TransferFileFromLocalToRemote(). Called after preparation is done.
101 // |gdoc_resource_id| and |parent_resource_id| is available only if the file
102 // is JSON GDoc file.
103 void TransferFileFromLocalToRemoteAfterPrepare(
104 const base::FilePath
& local_src_path
,
105 const base::FilePath
& remote_dest_path
,
106 const FileOperationCallback
& callback
,
107 std::string
* gdoc_resource_id
,
108 ResourceEntry
* parent_entry
,
111 // Part of TransferFileFromLocalToRemote().
112 void TransferJsonGdocFileAfterLocalWork(TransferJsonGdocParams
* params
,
115 // Copies resource with |resource_id| into the directory |parent_resource_id|
116 // with renaming it to |new_title|.
117 void CopyResourceOnServer(const std::string
& resource_id
,
118 const std::string
& parent_resource_id
,
119 const std::string
& new_title
,
120 const base::Time
& last_modified
,
121 const FileOperationCallback
& callback
);
123 // Part of CopyResourceOnServer and TransferFileFromLocalToRemote.
124 // Called after server side operation is done.
125 void UpdateAfterServerSideOperation(
126 const FileOperationCallback
& callback
,
127 google_apis::DriveApiErrorCode status
,
128 scoped_ptr
<google_apis::FileResource
> entry
);
130 // Part of CopyResourceOnServer and TransferFileFromLocalToRemote.
131 // Called after local state update is done.
132 void UpdateAfterLocalStateUpdate(const FileOperationCallback
& callback
,
133 base::FilePath
* file_path
,
134 const ResourceEntry
* entry
,
137 // Creates an empty file on the server at |remote_dest_path| to ensure
138 // the location, stores a file at |local_file_path| in cache and marks it
139 // dirty, so that SyncClient will upload the data later.
140 void ScheduleTransferRegularFile(const base::FilePath
& local_src_path
,
141 const base::FilePath
& remote_dest_path
,
142 const FileOperationCallback
& callback
);
144 // Part of ScheduleTransferRegularFile(). Called after file creation.
145 void ScheduleTransferRegularFileAfterCreate(
146 const base::FilePath
& local_src_path
,
147 const base::FilePath
& remote_dest_path
,
148 const FileOperationCallback
& callback
,
151 // Part of ScheduleTransferRegularFile(). Called after updating local state
153 void ScheduleTransferRegularFileAfterUpdateLocalState(
154 const FileOperationCallback
& callback
,
155 const base::FilePath
& remote_dest_path
,
156 const ResourceEntry
* entry
,
157 std::string
* local_id
,
160 scoped_refptr
<base::SequencedTaskRunner
> blocking_task_runner_
;
161 OperationDelegate
* delegate_
;
162 JobScheduler
* scheduler_
;
163 internal::ResourceMetadata
* metadata_
;
164 internal::FileCache
* cache_
;
166 // Uploading a new file is internally implemented by creating a dirty file.
167 scoped_ptr
<CreateFileOperation
> create_file_operation_
;
169 // Note: This should remain the last member so it'll be destroyed and
170 // invalidate the weak pointers before any other members are destroyed.
171 base::WeakPtrFactory
<CopyOperation
> weak_ptr_factory_
;
172 DISALLOW_COPY_AND_ASSIGN(CopyOperation
);
175 } // namespace file_system
178 #endif // CHROME_BROWSER_CHROMEOS_DRIVE_FILE_SYSTEM_COPY_OPERATION_H_