| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 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/fileapi/fileapi_worker.h" | 5 #include "chrome/browser/chromeos/drive/fileapi/fileapi_worker.h" |
| 6 | 6 |
| 7 #include "base/files/file_path.h" | 7 #include "base/files/file_path.h" |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #include "base/task_runner_util.h" | 9 #include "base/task_runner_util.h" |
| 10 #include "base/threading/sequenced_worker_pool.h" | 10 #include "base/threading/sequenced_worker_pool.h" |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 64 ConvertResourceEntryToFileInfo(*entry, &file_info); | 64 ConvertResourceEntryToFileInfo(*entry, &file_info); |
| 65 callback.Run(base::File::FILE_OK, file_info); | 65 callback.Run(base::File::FILE_OK, file_info); |
| 66 } | 66 } |
| 67 | 67 |
| 68 // Runs |callback| with entries. | 68 // Runs |callback| with entries. |
| 69 void RunReadDirectoryCallbackWithEntries( | 69 void RunReadDirectoryCallbackWithEntries( |
| 70 const ReadDirectoryCallback& callback, | 70 const ReadDirectoryCallback& callback, |
| 71 scoped_ptr<ResourceEntryVector> resource_entries) { | 71 scoped_ptr<ResourceEntryVector> resource_entries) { |
| 72 DCHECK(resource_entries); | 72 DCHECK(resource_entries); |
| 73 | 73 |
| 74 std::vector<fileapi::DirectoryEntry> entries; | 74 std::vector<storage::DirectoryEntry> entries; |
| 75 // Convert drive files to File API's directory entry. | 75 // Convert drive files to File API's directory entry. |
| 76 entries.reserve(resource_entries->size()); | 76 entries.reserve(resource_entries->size()); |
| 77 for (size_t i = 0; i < resource_entries->size(); ++i) { | 77 for (size_t i = 0; i < resource_entries->size(); ++i) { |
| 78 const ResourceEntry& resource_entry = (*resource_entries)[i]; | 78 const ResourceEntry& resource_entry = (*resource_entries)[i]; |
| 79 fileapi::DirectoryEntry entry; | 79 storage::DirectoryEntry entry; |
| 80 entry.name = resource_entry.base_name(); | 80 entry.name = resource_entry.base_name(); |
| 81 | 81 |
| 82 const PlatformFileInfoProto& file_info = resource_entry.file_info(); | 82 const PlatformFileInfoProto& file_info = resource_entry.file_info(); |
| 83 entry.is_directory = file_info.is_directory(); | 83 entry.is_directory = file_info.is_directory(); |
| 84 entry.size = file_info.size(); | 84 entry.size = file_info.size(); |
| 85 entry.last_modified_time = | 85 entry.last_modified_time = |
| 86 base::Time::FromInternalValue(file_info.last_modified()); | 86 base::Time::FromInternalValue(file_info.last_modified()); |
| 87 entries.push_back(entry); | 87 entries.push_back(entry); |
| 88 } | 88 } |
| 89 | 89 |
| 90 callback.Run(base::File::FILE_OK, entries, true /*has_more*/); | 90 callback.Run(base::File::FILE_OK, entries, true /*has_more*/); |
| 91 } | 91 } |
| 92 | 92 |
| 93 // Runs |callback| with |error|. | 93 // Runs |callback| with |error|. |
| 94 void RunReadDirectoryCallbackOnCompletion(const ReadDirectoryCallback& callback, | 94 void RunReadDirectoryCallbackOnCompletion(const ReadDirectoryCallback& callback, |
| 95 FileError error) { | 95 FileError error) { |
| 96 callback.Run(FileErrorToBaseFileError(error), | 96 callback.Run(FileErrorToBaseFileError(error), |
| 97 std::vector<fileapi::DirectoryEntry>(), false /*has_more*/); | 97 std::vector<storage::DirectoryEntry>(), |
| 98 false /*has_more*/); |
| 98 } | 99 } |
| 99 | 100 |
| 100 // Runs |callback| with arguments based on |error|, |local_path| and |entry|. | 101 // Runs |callback| with arguments based on |error|, |local_path| and |entry|. |
| 101 void RunCreateSnapshotFileCallback(const CreateSnapshotFileCallback& callback, | 102 void RunCreateSnapshotFileCallback(const CreateSnapshotFileCallback& callback, |
| 102 FileError error, | 103 FileError error, |
| 103 const base::FilePath& local_path, | 104 const base::FilePath& local_path, |
| 104 scoped_ptr<ResourceEntry> entry) { | 105 scoped_ptr<ResourceEntry> entry) { |
| 105 if (error != FILE_ERROR_OK) { | 106 if (error != FILE_ERROR_OK) { |
| 106 callback.Run( | 107 callback.Run(FileErrorToBaseFileError(error), |
| 107 FileErrorToBaseFileError(error), | 108 base::File::Info(), |
| 108 base::File::Info(), base::FilePath(), | 109 base::FilePath(), |
| 109 webkit_blob::ScopedFile::ScopeOutPolicy()); | 110 storage::ScopedFile::ScopeOutPolicy()); |
| 110 return; | 111 return; |
| 111 } | 112 } |
| 112 | 113 |
| 113 DCHECK(entry); | 114 DCHECK(entry); |
| 114 | 115 |
| 115 // When reading file, last modified time specified in file info will be | 116 // When reading file, last modified time specified in file info will be |
| 116 // compared to the last modified time of the local version of the drive file. | 117 // compared to the last modified time of the local version of the drive file. |
| 117 // Since those two values don't generally match (last modification time on the | 118 // Since those two values don't generally match (last modification time on the |
| 118 // drive server vs. last modification time of the local, downloaded file), so | 119 // drive server vs. last modification time of the local, downloaded file), so |
| 119 // we have to opt out from this check. We do this by unsetting last_modified | 120 // we have to opt out from this check. We do this by unsetting last_modified |
| 120 // value in the file info passed to the CreateSnapshot caller. | 121 // value in the file info passed to the CreateSnapshot caller. |
| 121 base::File::Info file_info; | 122 base::File::Info file_info; |
| 122 ConvertResourceEntryToFileInfo(*entry, &file_info); | 123 ConvertResourceEntryToFileInfo(*entry, &file_info); |
| 123 file_info.last_modified = base::Time(); | 124 file_info.last_modified = base::Time(); |
| 124 | 125 |
| 125 // If the file is a hosted document, a temporary JSON file is created to | 126 // If the file is a hosted document, a temporary JSON file is created to |
| 126 // represent the document. The JSON file is not cached and its lifetime | 127 // represent the document. The JSON file is not cached and its lifetime |
| 127 // is managed by ShareableFileReference. | 128 // is managed by ShareableFileReference. |
| 128 webkit_blob::ScopedFile::ScopeOutPolicy scope_out_policy = | 129 storage::ScopedFile::ScopeOutPolicy scope_out_policy = |
| 129 entry->file_specific_info().is_hosted_document() ? | 130 entry->file_specific_info().is_hosted_document() |
| 130 webkit_blob::ScopedFile::DELETE_ON_SCOPE_OUT : | 131 ? storage::ScopedFile::DELETE_ON_SCOPE_OUT |
| 131 webkit_blob::ScopedFile::DONT_DELETE_ON_SCOPE_OUT; | 132 : storage::ScopedFile::DONT_DELETE_ON_SCOPE_OUT; |
| 132 | 133 |
| 133 callback.Run(base::File::FILE_OK, file_info, local_path, scope_out_policy); | 134 callback.Run(base::File::FILE_OK, file_info, local_path, scope_out_policy); |
| 134 } | 135 } |
| 135 | 136 |
| 136 // Runs |callback| with arguments converted from |error| and |local_path|. | 137 // Runs |callback| with arguments converted from |error| and |local_path|. |
| 137 void RunCreateWritableSnapshotFileCallback( | 138 void RunCreateWritableSnapshotFileCallback( |
| 138 const CreateWritableSnapshotFileCallback& callback, | 139 const CreateWritableSnapshotFileCallback& callback, |
| 139 FileError error, | 140 FileError error, |
| 140 const base::FilePath& local_path, | 141 const base::FilePath& local_path, |
| 141 const base::Closure& close_callback) { | 142 const base::Closure& close_callback) { |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 185 // Cache file prepared for modification is available. Open it locally. | 186 // Cache file prepared for modification is available. Open it locally. |
| 186 bool posted = base::PostTaskAndReplyWithResult( | 187 bool posted = base::PostTaskAndReplyWithResult( |
| 187 BrowserThread::GetBlockingPool(), FROM_HERE, | 188 BrowserThread::GetBlockingPool(), FROM_HERE, |
| 188 base::Bind(&OpenFile, local_path, file_flags), | 189 base::Bind(&OpenFile, local_path, file_flags), |
| 189 base::Bind(&RunOpenFileCallback, callback, close_callback)); | 190 base::Bind(&RunOpenFileCallback, callback, close_callback)); |
| 190 DCHECK(posted); | 191 DCHECK(posted); |
| 191 } | 192 } |
| 192 | 193 |
| 193 } // namespace | 194 } // namespace |
| 194 | 195 |
| 195 FileSystemInterface* GetFileSystemFromUrl(const fileapi::FileSystemURL& url) { | 196 FileSystemInterface* GetFileSystemFromUrl(const storage::FileSystemURL& url) { |
| 196 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 197 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 197 | 198 |
| 198 Profile* profile = util::ExtractProfileFromPath(url.path()); | 199 Profile* profile = util::ExtractProfileFromPath(url.path()); |
| 199 return profile ? util::GetFileSystemByProfile(profile) : NULL; | 200 return profile ? util::GetFileSystemByProfile(profile) : NULL; |
| 200 } | 201 } |
| 201 | 202 |
| 202 void RunFileSystemCallback( | 203 void RunFileSystemCallback( |
| 203 const FileSystemGetter& file_system_getter, | 204 const FileSystemGetter& file_system_getter, |
| 204 const base::Callback<void(FileSystemInterface*)>& callback, | 205 const base::Callback<void(FileSystemInterface*)>& callback, |
| 205 const base::Closure& on_error_callback) { | 206 const base::Closure& on_error_callback) { |
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 359 const StatusCallback& callback, | 360 const StatusCallback& callback, |
| 360 FileSystemInterface* file_system) { | 361 FileSystemInterface* file_system) { |
| 361 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 362 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 362 file_system->TouchFile(file_path, last_access_time, last_modified_time, | 363 file_system->TouchFile(file_path, last_access_time, last_modified_time, |
| 363 base::Bind(&RunStatusCallbackByFileError, callback)); | 364 base::Bind(&RunStatusCallbackByFileError, callback)); |
| 364 | 365 |
| 365 } | 366 } |
| 366 | 367 |
| 367 } // namespace fileapi_internal | 368 } // namespace fileapi_internal |
| 368 } // namespace drive | 369 } // namespace drive |
| OLD | NEW |