Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(98)

Side by Side Diff: chrome/browser/chromeos/drive/fileapi_worker.cc

Issue 145303002: Convert Media Galleries to use base::File (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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/fileapi_worker.h" 5 #include "chrome/browser/chromeos/drive/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 26 matching lines...) Expand all
37 return OPEN_FILE; 37 return OPEN_FILE;
38 38
39 if (file_flag & base::PLATFORM_FILE_CREATE) 39 if (file_flag & base::PLATFORM_FILE_CREATE)
40 return CREATE_FILE; 40 return CREATE_FILE;
41 41
42 DCHECK(file_flag & (base::PLATFORM_FILE_OPEN_ALWAYS | 42 DCHECK(file_flag & (base::PLATFORM_FILE_OPEN_ALWAYS |
43 base::PLATFORM_FILE_CREATE_ALWAYS)); 43 base::PLATFORM_FILE_CREATE_ALWAYS));
44 return OPEN_OR_CREATE_FILE; 44 return OPEN_OR_CREATE_FILE;
45 } 45 }
46 46
47 // Runs |callback| with the PlatformFileError converted from |error|. 47 // Runs |callback| with the File::Error converted from |error|.
48 void RunStatusCallbackByFileError(const StatusCallback& callback, 48 void RunStatusCallbackByFileError(const StatusCallback& callback,
49 FileError error) { 49 FileError error) {
50 callback.Run(FileErrorToPlatformError(error)); 50 callback.Run(FileErrorToBaseFileError(error));
51 } 51 }
52 52
53 // Runs |callback| with arguments converted from |error| and |entry|. 53 // Runs |callback| with arguments converted from |error| and |entry|.
54 void RunGetFileInfoCallback(const GetFileInfoCallback& callback, 54 void RunGetFileInfoCallback(const GetFileInfoCallback& callback,
55 FileError error, 55 FileError error,
56 scoped_ptr<ResourceEntry> entry) { 56 scoped_ptr<ResourceEntry> entry) {
57 if (error != FILE_ERROR_OK) { 57 if (error != FILE_ERROR_OK) {
58 callback.Run(FileErrorToPlatformError(error), base::PlatformFileInfo()); 58 callback.Run(FileErrorToBaseFileError(error), base::File::Info());
59 return; 59 return;
60 } 60 }
61 61
62 DCHECK(entry); 62 DCHECK(entry);
63 base::PlatformFileInfo file_info; 63 base::File::Info file_info;
64 ConvertResourceEntryToPlatformFileInfo(*entry, &file_info); 64 ConvertResourceEntryToFileInfo(*entry, &file_info);
65 callback.Run(base::PLATFORM_FILE_OK, file_info); 65 callback.Run(base::File::FILE_OK, file_info);
66 } 66 }
67 67
68 // Runs |callback| with arguments converted from |error| and |resource_entries|. 68 // Runs |callback| with arguments converted from |error| and |resource_entries|.
69 void RunReadDirectoryCallback( 69 void RunReadDirectoryCallback(
70 const ReadDirectoryCallback& callback, 70 const ReadDirectoryCallback& callback,
71 FileError error, 71 FileError error,
72 scoped_ptr<ResourceEntryVector> resource_entries) { 72 scoped_ptr<ResourceEntryVector> resource_entries) {
73 if (error != FILE_ERROR_OK) { 73 if (error != FILE_ERROR_OK) {
74 callback.Run(FileErrorToPlatformError(error), 74 callback.Run(FileErrorToBaseFileError(error),
75 std::vector<fileapi::DirectoryEntry>(), false); 75 std::vector<fileapi::DirectoryEntry>(), false);
76 return; 76 return;
77 } 77 }
78 78
79 DCHECK(resource_entries); 79 DCHECK(resource_entries);
80 80
81 std::vector<fileapi::DirectoryEntry> entries; 81 std::vector<fileapi::DirectoryEntry> entries;
82 // Convert drive files to File API's directory entry. 82 // Convert drive files to File API's directory entry.
83 entries.reserve(resource_entries->size()); 83 entries.reserve(resource_entries->size());
84 for (size_t i = 0; i < resource_entries->size(); ++i) { 84 for (size_t i = 0; i < resource_entries->size(); ++i) {
85 const ResourceEntry& resource_entry = (*resource_entries)[i]; 85 const ResourceEntry& resource_entry = (*resource_entries)[i];
86 fileapi::DirectoryEntry entry; 86 fileapi::DirectoryEntry entry;
87 entry.name = resource_entry.base_name(); 87 entry.name = resource_entry.base_name();
88 88
89 const PlatformFileInfoProto& file_info = resource_entry.file_info(); 89 const PlatformFileInfoProto& file_info = resource_entry.file_info();
90 entry.is_directory = file_info.is_directory(); 90 entry.is_directory = file_info.is_directory();
91 entry.size = file_info.size(); 91 entry.size = file_info.size();
92 entry.last_modified_time = 92 entry.last_modified_time =
93 base::Time::FromInternalValue(file_info.last_modified()); 93 base::Time::FromInternalValue(file_info.last_modified());
94 entries.push_back(entry); 94 entries.push_back(entry);
95 } 95 }
96 96
97 callback.Run(base::PLATFORM_FILE_OK, entries, false); 97 callback.Run(base::File::FILE_OK, entries, false);
98 } 98 }
99 99
100 // Runs |callback| with arguments based on |error|, |local_path| and |entry|. 100 // Runs |callback| with arguments based on |error|, |local_path| and |entry|.
101 void RunCreateSnapshotFileCallback(const CreateSnapshotFileCallback& callback, 101 void RunCreateSnapshotFileCallback(const CreateSnapshotFileCallback& callback,
102 FileError error, 102 FileError error,
103 const base::FilePath& local_path, 103 const base::FilePath& local_path,
104 scoped_ptr<ResourceEntry> entry) { 104 scoped_ptr<ResourceEntry> entry) {
105 if (error != FILE_ERROR_OK) { 105 if (error != FILE_ERROR_OK) {
106 callback.Run( 106 callback.Run(
107 FileErrorToPlatformError(error), 107 FileErrorToBaseFileError(error),
108 base::PlatformFileInfo(), base::FilePath(), 108 base::File::Info(), base::FilePath(),
109 webkit_blob::ScopedFile::ScopeOutPolicy()); 109 webkit_blob::ScopedFile::ScopeOutPolicy());
110 return; 110 return;
111 } 111 }
112 112
113 DCHECK(entry); 113 DCHECK(entry);
114 114
115 // When reading file, last modified time specified in file info will be 115 // 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. 116 // 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 117 // 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 118 // 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 119 // 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. 120 // value in the file info passed to the CreateSnapshot caller.
121 base::PlatformFileInfo file_info; 121 base::File::Info file_info;
122 ConvertResourceEntryToPlatformFileInfo(*entry, &file_info); 122 ConvertResourceEntryToFileInfo(*entry, &file_info);
123 file_info.last_modified = base::Time(); 123 file_info.last_modified = base::Time();
124 124
125 // If the file is a hosted document, a temporary JSON file is created to 125 // 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 126 // represent the document. The JSON file is not cached and its lifetime
127 // is managed by ShareableFileReference. 127 // is managed by ShareableFileReference.
128 webkit_blob::ScopedFile::ScopeOutPolicy scope_out_policy = 128 webkit_blob::ScopedFile::ScopeOutPolicy scope_out_policy =
129 entry->file_specific_info().is_hosted_document() ? 129 entry->file_specific_info().is_hosted_document() ?
130 webkit_blob::ScopedFile::DELETE_ON_SCOPE_OUT : 130 webkit_blob::ScopedFile::DELETE_ON_SCOPE_OUT :
131 webkit_blob::ScopedFile::DONT_DELETE_ON_SCOPE_OUT; 131 webkit_blob::ScopedFile::DONT_DELETE_ON_SCOPE_OUT;
132 132
133 callback.Run(base::PLATFORM_FILE_OK, file_info, local_path, scope_out_policy); 133 callback.Run(base::File::FILE_OK, file_info, local_path, scope_out_policy);
134 } 134 }
135 135
136 // Runs |callback| with arguments converted from |error| and |local_path|. 136 // Runs |callback| with arguments converted from |error| and |local_path|.
137 void RunCreateWritableSnapshotFileCallback( 137 void RunCreateWritableSnapshotFileCallback(
138 const CreateWritableSnapshotFileCallback& callback, 138 const CreateWritableSnapshotFileCallback& callback,
139 FileError error, 139 FileError error,
140 const base::FilePath& local_path, 140 const base::FilePath& local_path,
141 const base::Closure& close_callback) { 141 const base::Closure& close_callback) {
142 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 142 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
143 callback.Run(FileErrorToPlatformError(error), local_path, close_callback); 143 callback.Run(FileErrorToBaseFileError(error), local_path, close_callback);
144 } 144 }
145 145
146 // Runs |callback| with |error| and |platform_file|. 146 // Runs |callback| with |error| and |platform_file|.
147 void RunOpenFileCallback(const OpenFileCallback& callback, 147 void RunOpenFileCallback(const OpenFileCallback& callback,
148 const base::Closure& close_callback, 148 const base::Closure& close_callback,
149 base::PlatformFileError* error, 149 base::File::Error* error,
150 base::PlatformFile platform_file) { 150 base::PlatformFile platform_file) {
151 callback.Run(*error, platform_file, close_callback); 151 callback.Run(*error, platform_file, close_callback);
152 } 152 }
153 153
154 // Part of OpenFile(). Called after FileSystem::OpenFile(). 154 // Part of OpenFile(). Called after FileSystem::OpenFile().
155 void OpenFileAfterFileSystemOpenFile(int file_flags, 155 void OpenFileAfterFileSystemOpenFile(int file_flags,
156 const OpenFileCallback& callback, 156 const OpenFileCallback& callback,
157 FileError error, 157 FileError error,
158 const base::FilePath& local_path, 158 const base::FilePath& local_path,
159 const base::Closure& close_callback) { 159 const base::Closure& close_callback) {
160 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 160 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
161 161
162 if (error != FILE_ERROR_OK) { 162 if (error != FILE_ERROR_OK) {
163 callback.Run(FileErrorToPlatformError(error), 163 callback.Run(FileErrorToBaseFileError(error),
164 base::kInvalidPlatformFileValue, 164 base::kInvalidPlatformFileValue,
165 base::Closure()); 165 base::Closure());
166 return; 166 return;
167 } 167 }
168 168
169 // Here, the file should be at |local_path|, but there may be timing issue. 169 // Here, the file should be at |local_path|, but there may be timing issue.
170 // Because the file is managed by Drive file system, so, in order to avoid 170 // Because the file is managed by Drive file system, so, in order to avoid
171 // unexpected file creation, CREATE, OPEN_ALWAYS and CREATE_ALWAYS are 171 // unexpected file creation, CREATE, OPEN_ALWAYS and CREATE_ALWAYS are
172 // translated into OPEN or OPEN_TRUNCATED, here. Keep OPEN and OPEN_TRUNCATED 172 // translated into OPEN or OPEN_TRUNCATED, here. Keep OPEN and OPEN_TRUNCATED
173 // as is. 173 // as is.
174 if (file_flags & (base::PLATFORM_FILE_CREATE | 174 if (file_flags & (base::PLATFORM_FILE_CREATE |
175 base::PLATFORM_FILE_OPEN_ALWAYS)) { 175 base::PLATFORM_FILE_OPEN_ALWAYS)) {
176 file_flags &= ~(base::PLATFORM_FILE_CREATE | 176 file_flags &= ~(base::PLATFORM_FILE_CREATE |
177 base::PLATFORM_FILE_OPEN_ALWAYS); 177 base::PLATFORM_FILE_OPEN_ALWAYS);
178 file_flags |= base::PLATFORM_FILE_OPEN; 178 file_flags |= base::PLATFORM_FILE_OPEN;
179 } else if (file_flags & base::PLATFORM_FILE_CREATE_ALWAYS) { 179 } else if (file_flags & base::PLATFORM_FILE_CREATE_ALWAYS) {
180 file_flags &= ~base::PLATFORM_FILE_CREATE_ALWAYS; 180 file_flags &= ~base::PLATFORM_FILE_CREATE_ALWAYS;
181 file_flags |= base::PLATFORM_FILE_OPEN_TRUNCATED; 181 file_flags |= base::PLATFORM_FILE_OPEN_TRUNCATED;
182 } 182 }
183 183
184 // Cache file prepared for modification is available. Open it locally. 184 // Cache file prepared for modification is available. Open it locally.
185 base::PlatformFileError* result = 185 // TODO(rvargas): Convert this to base::File.
186 new base::PlatformFileError(base::PLATFORM_FILE_ERROR_FAILED); 186 base::File::Error* result =
187 new base::File::Error(base::File::FILE_ERROR_FAILED);
187 bool posted = base::PostTaskAndReplyWithResult( 188 bool posted = base::PostTaskAndReplyWithResult(
188 BrowserThread::GetBlockingPool(), FROM_HERE, 189 BrowserThread::GetBlockingPool(), FROM_HERE,
189 base::Bind(&base::CreatePlatformFile, 190 base::Bind(&base::CreatePlatformFile,
190 local_path, file_flags, static_cast<bool*>(NULL), result), 191 local_path, file_flags, static_cast<bool*>(NULL),
192 reinterpret_cast<base::PlatformFileError*>(result)),
191 base::Bind(&RunOpenFileCallback, 193 base::Bind(&RunOpenFileCallback,
192 callback, close_callback, base::Owned(result))); 194 callback, close_callback, base::Owned(result)));
193 DCHECK(posted); 195 DCHECK(posted);
194 } 196 }
195 197
196 } // namespace 198 } // namespace
197 199
198 void RunFileSystemCallback( 200 void RunFileSystemCallback(
199 const FileSystemGetter& file_system_getter, 201 const FileSystemGetter& file_system_getter,
200 const base::Callback<void(FileSystemInterface*)>& callback, 202 const base::Callback<void(FileSystemInterface*)>& callback,
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
330 base::PLATFORM_FILE_OPEN_ALWAYS | 332 base::PLATFORM_FILE_OPEN_ALWAYS |
331 base::PLATFORM_FILE_CREATE_ALWAYS | 333 base::PLATFORM_FILE_CREATE_ALWAYS |
332 base::PLATFORM_FILE_OPEN_TRUNCATED | 334 base::PLATFORM_FILE_OPEN_TRUNCATED |
333 base::PLATFORM_FILE_READ | 335 base::PLATFORM_FILE_READ |
334 base::PLATFORM_FILE_WRITE | 336 base::PLATFORM_FILE_WRITE |
335 base::PLATFORM_FILE_WRITE_ATTRIBUTES | 337 base::PLATFORM_FILE_WRITE_ATTRIBUTES |
336 base::PLATFORM_FILE_APPEND)) { 338 base::PLATFORM_FILE_APPEND)) {
337 base::MessageLoopProxy::current()->PostTask( 339 base::MessageLoopProxy::current()->PostTask(
338 FROM_HERE, 340 FROM_HERE,
339 base::Bind(callback, 341 base::Bind(callback,
340 base::PLATFORM_FILE_ERROR_FAILED, 342 base::File::FILE_ERROR_FAILED,
341 base::kInvalidPlatformFileValue, 343 base::kInvalidPlatformFileValue,
342 base::Closure())); 344 base::Closure()));
343 return; 345 return;
344 } 346 }
345 347
346 file_system->OpenFile( 348 file_system->OpenFile(
347 file_path, GetOpenMode(file_flags), 349 file_path, GetOpenMode(file_flags),
348 std::string(), // no mime type; guess from file_path 350 std::string(), // no mime type; guess from file_path
349 base::Bind(&OpenFileAfterFileSystemOpenFile, file_flags, callback)); 351 base::Bind(&OpenFileAfterFileSystemOpenFile, file_flags, callback));
350 } 352 }
351 353
352 void TouchFile(const base::FilePath& file_path, 354 void TouchFile(const base::FilePath& file_path,
353 const base::Time& last_access_time, 355 const base::Time& last_access_time,
354 const base::Time& last_modified_time, 356 const base::Time& last_modified_time,
355 const StatusCallback& callback, 357 const StatusCallback& callback,
356 FileSystemInterface* file_system) { 358 FileSystemInterface* file_system) {
357 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 359 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
358 file_system->TouchFile(file_path, last_access_time, last_modified_time, 360 file_system->TouchFile(file_path, last_access_time, last_modified_time,
359 base::Bind(&RunStatusCallbackByFileError, callback)); 361 base::Bind(&RunStatusCallbackByFileError, callback));
360 362
361 } 363 }
362 364
363 } // namespace fileapi_internal 365 } // namespace fileapi_internal
364 } // namespace drive 366 } // namespace drive
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/drive/fileapi_worker.h ('k') | chrome/browser/chromeos/drive/fileapi_worker_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698