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

Side by Side Diff: base/file_util_proxy.cc

Issue 7066067: Support creating temporary files for sync file operations. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: typo Created 9 years, 6 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 (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "base/file_util_proxy.h" 5 #include "base/file_util_proxy.h"
6 6
7 #include "base/message_loop_proxy.h" 7 #include "base/message_loop_proxy.h"
8 #include "base/platform_file.h"
8 9
9 // TODO(jianli): Move the code from anonymous namespace to base namespace so 10 // TODO(jianli): Move the code from anonymous namespace to base namespace so
10 // that all of the base:: prefixes would be unnecessary. 11 // that all of the base:: prefixes would be unnecessary.
11 namespace { 12 namespace {
12 13
13 namespace { 14 namespace {
14 15
15 // Performs common checks for move and copy. 16 // Performs common checks for move and copy.
16 // This also removes the destination directory if it's non-empty and all other 17 // This also removes the destination directory if it's non-empty and all other
17 // checks are passed (so that the copy/move correctly overwrites the 18 // checks are passed (so that the copy/move correctly overwrites the
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
160 int file_flags_; 161 int file_flags_;
161 base::FileUtilProxy::CreateOrOpenCallback* callback_; 162 base::FileUtilProxy::CreateOrOpenCallback* callback_;
162 base::PlatformFile file_handle_; 163 base::PlatformFile file_handle_;
163 bool created_; 164 bool created_;
164 }; 165 };
165 166
166 class RelayCreateTemporary : public MessageLoopRelay { 167 class RelayCreateTemporary : public MessageLoopRelay {
167 public: 168 public:
168 RelayCreateTemporary( 169 RelayCreateTemporary(
169 scoped_refptr<base::MessageLoopProxy> message_loop_proxy, 170 scoped_refptr<base::MessageLoopProxy> message_loop_proxy,
171 int file_flags,
170 base::FileUtilProxy::CreateTemporaryCallback* callback) 172 base::FileUtilProxy::CreateTemporaryCallback* callback)
171 : message_loop_proxy_(message_loop_proxy), 173 : message_loop_proxy_(message_loop_proxy),
174 file_flags_(file_flags),
172 callback_(callback), 175 callback_(callback),
173 file_handle_(base::kInvalidPlatformFileValue) { 176 file_handle_(base::kInvalidPlatformFileValue) {
174 DCHECK(callback); 177 DCHECK(callback);
175 } 178 }
176 179
177 protected: 180 protected:
178 virtual ~RelayCreateTemporary() { 181 virtual ~RelayCreateTemporary() {
179 if (file_handle_ != base::kInvalidPlatformFileValue) 182 if (file_handle_ != base::kInvalidPlatformFileValue)
180 base::FileUtilProxy::Close(message_loop_proxy_, file_handle_, NULL); 183 base::FileUtilProxy::Close(message_loop_proxy_, file_handle_, NULL);
181 } 184 }
182 185
183 virtual void RunWork() { 186 virtual void RunWork() {
184 // TODO(darin): file_util should have a variant of CreateTemporaryFile 187 // TODO(darin): file_util should have a variant of CreateTemporaryFile
185 // that returns a FilePath and a PlatformFile. 188 // that returns a FilePath and a PlatformFile.
186 file_util::CreateTemporaryFile(&file_path_); 189 file_util::CreateTemporaryFile(&file_path_);
187 190
188 // Use a fixed set of flags that are appropriate for writing to a temporary 191 if (!(file_flags_ & base::PLATFORM_FILE_WRITE) ||
189 // file from the IO thread using a net::FileStream. 192 !(file_flags_ & base::PLATFORM_FILE_TEMPORARY) ||
190 int file_flags = 193 (!(file_flags_ & base::PLATFORM_FILE_CREATE_ALWAYS) &&
191 base::PLATFORM_FILE_CREATE_ALWAYS | 194 !(file_flags_ & base::PLATFORM_FILE_CREATE) &&
192 base::PLATFORM_FILE_WRITE | 195 !(file_flags_ & base::PLATFORM_FILE_OPEN_ALWAYS))) {
193 base::PLATFORM_FILE_ASYNC | 196 LOG(DFATAL) << "Invalid file_flags for CreateTemporary: " << file_flags_;
194 base::PLATFORM_FILE_TEMPORARY; 197 set_error_code(base::PLATFORM_FILE_ERROR_FAILED);
198 return;
199 }
195 base::PlatformFileError error_code = base::PLATFORM_FILE_OK; 200 base::PlatformFileError error_code = base::PLATFORM_FILE_OK;
196 file_handle_ = base::CreatePlatformFile(file_path_, file_flags, 201 file_handle_ = base::CreatePlatformFile(file_path_, file_flags_,
197 NULL, &error_code); 202 NULL, &error_code);
198 set_error_code(error_code); 203 set_error_code(error_code);
199 } 204 }
200 205
201 virtual void RunCallback() { 206 virtual void RunCallback() {
202 callback_->Run(error_code(), base::PassPlatformFile(&file_handle_), 207 callback_->Run(error_code(), base::PassPlatformFile(&file_handle_),
203 file_path_); 208 file_path_);
204 delete callback_; 209 delete callback_;
205 } 210 }
206 211
207 private: 212 private:
208 scoped_refptr<base::MessageLoopProxy> message_loop_proxy_; 213 scoped_refptr<base::MessageLoopProxy> message_loop_proxy_;
214 int file_flags_;
209 base::FileUtilProxy::CreateTemporaryCallback* callback_; 215 base::FileUtilProxy::CreateTemporaryCallback* callback_;
210 base::PlatformFile file_handle_; 216 base::PlatformFile file_handle_;
211 FilePath file_path_; 217 FilePath file_path_;
212 }; 218 };
213 219
214 class RelayWithStatusCallback : public MessageLoopRelay { 220 class RelayWithStatusCallback : public MessageLoopRelay {
215 public: 221 public:
216 explicit RelayWithStatusCallback( 222 explicit RelayWithStatusCallback(
217 base::FileUtilProxy::StatusCallback* callback) 223 base::FileUtilProxy::StatusCallback* callback)
218 : callback_(callback) { 224 : callback_(callback) {
(...skipping 516 matching lines...) Expand 10 before | Expand all | Expand 10 after
735 scoped_refptr<MessageLoopProxy> message_loop_proxy, 741 scoped_refptr<MessageLoopProxy> message_loop_proxy,
736 const FilePath& file_path, int file_flags, 742 const FilePath& file_path, int file_flags,
737 CreateOrOpenCallback* callback) { 743 CreateOrOpenCallback* callback) {
738 return Start(FROM_HERE, message_loop_proxy, new RelayCreateOrOpen( 744 return Start(FROM_HERE, message_loop_proxy, new RelayCreateOrOpen(
739 message_loop_proxy, file_path, file_flags, callback)); 745 message_loop_proxy, file_path, file_flags, callback));
740 } 746 }
741 747
742 // static 748 // static
743 bool FileUtilProxy::CreateTemporary( 749 bool FileUtilProxy::CreateTemporary(
744 scoped_refptr<MessageLoopProxy> message_loop_proxy, 750 scoped_refptr<MessageLoopProxy> message_loop_proxy,
751 int file_flags,
745 CreateTemporaryCallback* callback) { 752 CreateTemporaryCallback* callback) {
746 return Start(FROM_HERE, message_loop_proxy, 753 return Start(FROM_HERE, message_loop_proxy,
747 new RelayCreateTemporary(message_loop_proxy, callback)); 754 new RelayCreateTemporary(message_loop_proxy,
755 file_flags,
756 callback));
748 } 757 }
749 758
750 // static 759 // static
751 bool FileUtilProxy::Close(scoped_refptr<MessageLoopProxy> message_loop_proxy, 760 bool FileUtilProxy::Close(scoped_refptr<MessageLoopProxy> message_loop_proxy,
752 base::PlatformFile file_handle, 761 base::PlatformFile file_handle,
753 StatusCallback* callback) { 762 StatusCallback* callback) {
754 return Start(FROM_HERE, message_loop_proxy, 763 return Start(FROM_HERE, message_loop_proxy,
755 new RelayClose(file_handle, callback)); 764 new RelayClose(file_handle, callback));
756 } 765 }
757 766
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
908 917
909 // static 918 // static
910 bool FileUtilProxy::Flush( 919 bool FileUtilProxy::Flush(
911 scoped_refptr<MessageLoopProxy> message_loop_proxy, 920 scoped_refptr<MessageLoopProxy> message_loop_proxy,
912 PlatformFile file, 921 PlatformFile file,
913 StatusCallback* callback) { 922 StatusCallback* callback) {
914 return Start(FROM_HERE, message_loop_proxy, new RelayFlush(file, callback)); 923 return Start(FROM_HERE, message_loop_proxy, new RelayFlush(file, callback));
915 } 924 }
916 925
917 } // namespace base 926 } // namespace base
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698