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

Side by Side Diff: net/base/file_stream_context.cc

Issue 46303005: Fix chrome upload with content uri (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase again Created 7 years, 1 month 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
« no previous file with comments | « content/browser/child_process_security_policy_impl.cc ('k') | net/base/file_stream_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 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 "net/base/file_stream_context.h" 5 #include "net/base/file_stream_context.h"
6 6
7 #include "base/location.h" 7 #include "base/location.h"
8 #include "base/message_loop/message_loop_proxy.h" 8 #include "base/message_loop/message_loop_proxy.h"
9 #include "base/task_runner_util.h" 9 #include "base/task_runner_util.h"
10 #include "base/threading/thread_restrictions.h" 10 #include "base/threading/thread_restrictions.h"
11 #include "net/base/file_stream_net_log_parameters.h" 11 #include "net/base/file_stream_net_log_parameters.h"
12 #include "net/base/net_errors.h" 12 #include "net/base/net_errors.h"
13 13
14 #if defined(OS_ANDROID)
15 #include "base/android/content_uri_utils.h"
16 #endif
17
14 namespace { 18 namespace {
15 19
16 void CallInt64ToInt(const net::CompletionCallback& callback, int64 result) { 20 void CallInt64ToInt(const net::CompletionCallback& callback, int64 result) {
17 callback.Run(static_cast<int>(result)); 21 callback.Run(static_cast<int>(result));
18 } 22 }
19 23
20 } 24 }
21 25
22 namespace net { 26 namespace net {
23 27
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
186 } 190 }
187 191
188 void FileStream::Context::BeginOpenEvent(const base::FilePath& path) { 192 void FileStream::Context::BeginOpenEvent(const base::FilePath& path) {
189 std::string file_name = path.AsUTF8Unsafe(); 193 std::string file_name = path.AsUTF8Unsafe();
190 bound_net_log_.BeginEvent(NetLog::TYPE_FILE_STREAM_OPEN, 194 bound_net_log_.BeginEvent(NetLog::TYPE_FILE_STREAM_OPEN,
191 NetLog::StringCallback("file_name", &file_name)); 195 NetLog::StringCallback("file_name", &file_name));
192 } 196 }
193 197
194 FileStream::Context::OpenResult FileStream::Context::OpenFileImpl( 198 FileStream::Context::OpenResult FileStream::Context::OpenFileImpl(
195 const base::FilePath& path, int open_flags) { 199 const base::FilePath& path, int open_flags) {
196 // FileStream::Context actually closes the file asynchronously, independently 200 base::PlatformFile file;
197 // from FileStream's destructor. It can cause problems for users wanting to 201 #if defined(OS_ANDROID)
198 // delete the file right after FileStream deletion. Thus we are always 202 if (path.IsContentUri()) {
199 // adding SHARE_DELETE flag to accommodate such use case. 203 // Check that only Read flags are set.
200 open_flags |= base::PLATFORM_FILE_SHARE_DELETE; 204 DCHECK_EQ(open_flags & ~base::PLATFORM_FILE_ASYNC,
201 base::PlatformFile file = 205 base::PLATFORM_FILE_OPEN | base::PLATFORM_FILE_READ);
202 base::CreatePlatformFile(path, open_flags, NULL, NULL); 206 file = base::OpenContentUriForRead(path);
207 } else {
208 #endif // defined(OS_ANDROID)
209 // FileStream::Context actually closes the file asynchronously,
210 // independently from FileStream's destructor. It can cause problems for
211 // users wanting to delete the file right after FileStream deletion. Thus
212 // we are always adding SHARE_DELETE flag to accommodate such use case.
213 open_flags |= base::PLATFORM_FILE_SHARE_DELETE;
214 file = base::CreatePlatformFile(path, open_flags, NULL, NULL);
215 #if defined(OS_ANDROID)
216 }
217 #endif // defined(OS_ANDROID)
203 if (file == base::kInvalidPlatformFileValue) 218 if (file == base::kInvalidPlatformFileValue)
204 return OpenResult(file, IOResult::FromOSError(GetLastErrno())); 219 return OpenResult(file, IOResult::FromOSError(GetLastErrno()));
205 220
206 return OpenResult(file, IOResult(OK, 0)); 221 return OpenResult(file, IOResult(OK, 0));
207 } 222 }
208 223
209 void FileStream::Context::ProcessOpenError(const IOResult& error_code) { 224 void FileStream::Context::ProcessOpenError(const IOResult& error_code) {
210 bound_net_log_.EndEvent(NetLog::TYPE_FILE_STREAM_OPEN); 225 bound_net_log_.EndEvent(NetLog::TYPE_FILE_STREAM_OPEN);
211 RecordError(error_code, FILE_ERROR_SOURCE_OPEN); 226 RecordError(error_code, FILE_ERROR_SOURCE_OPEN);
212 } 227 }
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
261 // operation is in progress. 276 // operation is in progress.
262 async_in_progress_ = false; 277 async_in_progress_ = false;
263 if (orphaned_) 278 if (orphaned_)
264 CloseAndDelete(); 279 CloseAndDelete();
265 else 280 else
266 callback.Run(result); 281 callback.Run(result);
267 } 282 }
268 283
269 } // namespace net 284 } // namespace net
270 285
OLDNEW
« no previous file with comments | « content/browser/child_process_security_policy_impl.cc ('k') | net/base/file_stream_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698