OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/chromeos/drive/sync/entry_revert_performer.h" | 5 #include "chrome/browser/chromeos/drive/sync/entry_revert_performer.h" |
6 | 6 |
7 #include "chrome/browser/chromeos/drive/change_list_processor.h" | 7 #include "chrome/browser/chromeos/drive/change_list_processor.h" |
8 #include "chrome/browser/chromeos/drive/drive.pb.h" | 8 #include "chrome/browser/chromeos/drive/drive.pb.h" |
| 9 #include "chrome/browser/chromeos/drive/file_change.h" |
9 #include "chrome/browser/chromeos/drive/file_system/operation_observer.h" | 10 #include "chrome/browser/chromeos/drive/file_system/operation_observer.h" |
10 #include "chrome/browser/chromeos/drive/job_scheduler.h" | 11 #include "chrome/browser/chromeos/drive/job_scheduler.h" |
11 #include "chrome/browser/chromeos/drive/resource_entry_conversion.h" | 12 #include "chrome/browser/chromeos/drive/resource_entry_conversion.h" |
12 #include "chrome/browser/chromeos/drive/resource_metadata.h" | 13 #include "chrome/browser/chromeos/drive/resource_metadata.h" |
13 #include "chrome/browser/drive/drive_api_util.h" | 14 #include "chrome/browser/drive/drive_api_util.h" |
14 #include "content/public/browser/browser_thread.h" | 15 #include "content/public/browser/browser_thread.h" |
15 #include "google_apis/drive/drive_api_parser.h" | 16 #include "google_apis/drive/drive_api_parser.h" |
16 | 17 |
17 using content::BrowserThread; | 18 using content::BrowserThread; |
18 | 19 |
19 namespace drive { | 20 namespace drive { |
20 namespace internal { | 21 namespace internal { |
21 namespace { | 22 namespace { |
22 | 23 |
23 FileError FinishRevert(ResourceMetadata* metadata, | 24 FileError FinishRevert(ResourceMetadata* metadata, |
24 const std::string& local_id, | 25 const std::string& local_id, |
25 google_apis::GDataErrorCode status, | 26 google_apis::GDataErrorCode status, |
26 scoped_ptr<google_apis::FileResource> file_resource, | 27 scoped_ptr<google_apis::FileResource> file_resource, |
27 std::set<base::FilePath>* changed_directories) { | 28 FileChange* changed_files) { |
28 ResourceEntry entry; | 29 ResourceEntry entry; |
29 std::string parent_resource_id; | 30 std::string parent_resource_id; |
30 FileError error = GDataToFileError(status); | 31 FileError error = GDataToFileError(status); |
31 switch (error) { | 32 switch (error) { |
32 case FILE_ERROR_OK: | 33 case FILE_ERROR_OK: |
33 if (!ConvertFileResourceToResourceEntry(*file_resource, &entry, | 34 if (!ConvertFileResourceToResourceEntry(*file_resource, &entry, |
34 &parent_resource_id)) | 35 &parent_resource_id)) |
35 return FILE_ERROR_NOT_A_FILE; | 36 return FILE_ERROR_NOT_A_FILE; |
36 break; | 37 break; |
37 | 38 |
38 case FILE_ERROR_NOT_FOUND: | 39 case FILE_ERROR_NOT_FOUND: |
39 entry.set_deleted(true); | 40 entry.set_deleted(true); |
40 break; | 41 break; |
41 | 42 |
42 default: | 43 default: |
43 return error; | 44 return error; |
44 } | 45 } |
45 | 46 |
46 base::FilePath original_path; | 47 base::FilePath original_path; |
47 error = metadata->GetFilePath(local_id, &original_path); | 48 error = metadata->GetFilePath(local_id, &original_path); |
48 if (error != FILE_ERROR_OK) | 49 if (error != FILE_ERROR_OK) |
49 return error; | 50 return error; |
50 | 51 |
51 if (entry.deleted()) { | 52 if (entry.deleted()) { |
52 error = metadata->RemoveEntry(local_id); | 53 error = metadata->RemoveEntry(local_id); |
53 if (error != FILE_ERROR_OK) | 54 if (error != FILE_ERROR_OK) |
54 return error; | 55 return error; |
55 | 56 |
56 changed_directories->insert(original_path.DirName()); | 57 changed_files->Update( |
| 58 original_path, |
| 59 FileChange::FILE_TYPE_UNKNOWN, // Undetermined type for deleted file. |
| 60 FileChange::DELETE); |
57 } else { | 61 } else { |
| 62 changed_files->Update(original_path, entry, FileChange::DELETE); |
| 63 |
58 error = ChangeListProcessor::SetParentLocalIdOfEntry(metadata, &entry, | 64 error = ChangeListProcessor::SetParentLocalIdOfEntry(metadata, &entry, |
59 parent_resource_id); | 65 parent_resource_id); |
60 if (error != FILE_ERROR_OK) | 66 if (error != FILE_ERROR_OK) |
61 return error; | 67 return error; |
62 | 68 |
63 entry.set_local_id(local_id); | 69 entry.set_local_id(local_id); |
64 error = metadata->RefreshEntry(entry); | 70 error = metadata->RefreshEntry(entry); |
65 if (error != FILE_ERROR_OK) | 71 if (error != FILE_ERROR_OK) |
66 return error; | 72 return error; |
67 | 73 |
68 base::FilePath new_parent_path; | 74 base::FilePath new_path; |
69 error = metadata->GetFilePath(entry.parent_local_id(), &new_parent_path); | 75 error = metadata->GetFilePath(local_id, &new_path); |
70 if (error != FILE_ERROR_OK) | 76 if (error != FILE_ERROR_OK) |
71 return error; | 77 return error; |
72 changed_directories->insert(new_parent_path); | 78 |
73 changed_directories->insert(original_path.DirName()); | 79 changed_files->Update(new_path, entry, FileChange::ADD_OR_UPDATE); |
74 } | 80 } |
75 return FILE_ERROR_OK; | 81 return FILE_ERROR_OK; |
76 } | 82 } |
77 | 83 |
78 } // namespace | 84 } // namespace |
79 | 85 |
80 EntryRevertPerformer::EntryRevertPerformer( | 86 EntryRevertPerformer::EntryRevertPerformer( |
81 base::SequencedTaskRunner* blocking_task_runner, | 87 base::SequencedTaskRunner* blocking_task_runner, |
82 file_system::OperationObserver* observer, | 88 file_system::OperationObserver* observer, |
83 JobScheduler* scheduler, | 89 JobScheduler* scheduler, |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
136 } | 142 } |
137 | 143 |
138 void EntryRevertPerformer::RevertEntryAfterGetFileResource( | 144 void EntryRevertPerformer::RevertEntryAfterGetFileResource( |
139 const FileOperationCallback& callback, | 145 const FileOperationCallback& callback, |
140 const std::string& local_id, | 146 const std::string& local_id, |
141 google_apis::GDataErrorCode status, | 147 google_apis::GDataErrorCode status, |
142 scoped_ptr<google_apis::FileResource> entry) { | 148 scoped_ptr<google_apis::FileResource> entry) { |
143 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 149 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
144 DCHECK(!callback.is_null()); | 150 DCHECK(!callback.is_null()); |
145 | 151 |
146 std::set<base::FilePath>* changed_directories = new std::set<base::FilePath>; | 152 FileChange* changed_files = new FileChange; |
147 base::PostTaskAndReplyWithResult( | 153 base::PostTaskAndReplyWithResult( |
148 blocking_task_runner_.get(), | 154 blocking_task_runner_.get(), |
149 FROM_HERE, | 155 FROM_HERE, |
150 base::Bind(&FinishRevert, metadata_, local_id, status, | 156 base::Bind(&FinishRevert, |
151 base::Passed(&entry), changed_directories), | 157 metadata_, |
| 158 local_id, |
| 159 status, |
| 160 base::Passed(&entry), |
| 161 changed_files), |
152 base::Bind(&EntryRevertPerformer::RevertEntryAfterFinishRevert, | 162 base::Bind(&EntryRevertPerformer::RevertEntryAfterFinishRevert, |
153 weak_ptr_factory_.GetWeakPtr(), callback, | 163 weak_ptr_factory_.GetWeakPtr(), |
154 base::Owned(changed_directories))); | 164 callback, |
| 165 base::Owned(changed_files))); |
155 } | 166 } |
156 | 167 |
157 void EntryRevertPerformer::RevertEntryAfterFinishRevert( | 168 void EntryRevertPerformer::RevertEntryAfterFinishRevert( |
158 const FileOperationCallback& callback, | 169 const FileOperationCallback& callback, |
159 const std::set<base::FilePath>* changed_directories, | 170 const FileChange* changed_files, |
160 FileError error) { | 171 FileError error) { |
161 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 172 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
162 DCHECK(!callback.is_null()); | 173 DCHECK(!callback.is_null()); |
163 | 174 |
164 for (std::set<base::FilePath>::const_iterator it = | 175 observer_->OnFileChangedByOperation(*changed_files); |
165 changed_directories->begin(); it != changed_directories->end(); ++it) | |
166 observer_->OnDirectoryChangedByOperation(*it); | |
167 | 176 |
168 callback.Run(error); | 177 callback.Run(error); |
169 } | 178 } |
170 | 179 |
171 } // namespace internal | 180 } // namespace internal |
172 } // namespace drive | 181 } // namespace drive |
OLD | NEW |