summaryrefslogtreecommitdiffstats
path: root/base
diff options
context:
space:
mode:
authorrvargas@chromium.org <rvargas@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-21 00:41:15 +0000
committerrvargas@chromium.org <rvargas@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-21 00:41:15 +0000
commita0830591020c23ad911aa287390a4ae942c5dc41 (patch)
tree650128541ee17d686b45cb0b163db4e38522f015 /base
parentdd1dad31497696ef81234339e6e3cf6f5af26eea (diff)
downloadchromium_src-a0830591020c23ad911aa287390a4ae942c5dc41.zip
chromium_src-a0830591020c23ad911aa287390a4ae942c5dc41.tar.gz
chromium_src-a0830591020c23ad911aa287390a4ae942c5dc41.tar.bz2
net: Update FileStream to use base::File instead of PlatformFile.
As collateral damage, OpenContentUriForRead is now returning File instead of a plain file descriptor. BUG=322664 TEST=net_unittests R=willchan@chromium.org Review URL: https://codereview.chromium.org/189393002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@258472 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base')
-rw-r--r--base/android/content_uri_utils.cc7
-rw-r--r--base/android/content_uri_utils.h3
-rw-r--r--base/file_util_posix.cc17
-rw-r--r--base/file_util_unittest.cc10
-rw-r--r--base/files/file.h2
-rw-r--r--base/files/file_posix.cc17
-rw-r--r--base/files/file_unittest.cc38
7 files changed, 54 insertions, 40 deletions
diff --git a/base/android/content_uri_utils.cc b/base/android/content_uri_utils.cc
index 64d6ad2..0e0c0ea 100644
--- a/base/android/content_uri_utils.cc
+++ b/base/android/content_uri_utils.cc
@@ -6,7 +6,6 @@
#include "base/android/jni_android.h"
#include "base/android/jni_string.h"
-#include "base/platform_file.h"
#include "jni/ContentUriUtils_jni.h"
using base::android::ConvertUTF8ToJavaString;
@@ -25,15 +24,15 @@ bool ContentUriExists(const FilePath& content_uri) {
env, base::android::GetApplicationContext(), j_uri.obj());
}
-int OpenContentUriForRead(const FilePath& content_uri) {
+File OpenContentUriForRead(const FilePath& content_uri) {
JNIEnv* env = base::android::AttachCurrentThread();
ScopedJavaLocalRef<jstring> j_uri =
ConvertUTF8ToJavaString(env, content_uri.value());
jint fd = Java_ContentUriUtils_openContentUriForRead(
env, base::android::GetApplicationContext(), j_uri.obj());
if (fd < 0)
- return base::kInvalidPlatformFileValue;
- return fd;
+ return File();
+ return File(fd);
}
} // namespace base
diff --git a/base/android/content_uri_utils.h b/base/android/content_uri_utils.h
index ec820ef..827ec92 100644
--- a/base/android/content_uri_utils.h
+++ b/base/android/content_uri_utils.h
@@ -9,6 +9,7 @@
#include "base/base_export.h"
#include "base/basictypes.h"
+#include "base/files/file.h"
#include "base/files/file_path.h"
namespace base {
@@ -17,7 +18,7 @@ bool RegisterContentUriUtils(JNIEnv* env);
// Opens a content uri for read and returns the file descriptor to the caller.
// Returns -1 if the uri is invalid.
-BASE_EXPORT int OpenContentUriForRead(const FilePath& content_uri);
+BASE_EXPORT File OpenContentUriForRead(const FilePath& content_uri);
// Check whether a content uri exists.
BASE_EXPORT bool ContentUriExists(const FilePath& content_uri);
diff --git a/base/file_util_posix.cc b/base/file_util_posix.cc
index 2570172..03afea7 100644
--- a/base/file_util_posix.cc
+++ b/base/file_util_posix.cc
@@ -71,7 +71,7 @@ static int CallLstat(const char *path, stat_wrapper_t *sb) {
ThreadRestrictions::AssertIOAllowed();
return lstat(path, sb);
}
-#else
+#else // defined(OS_BSD) || defined(OS_MACOSX)
typedef struct stat64 stat_wrapper_t;
static int CallStat(const char *path, stat_wrapper_t *sb) {
ThreadRestrictions::AssertIOAllowed();
@@ -81,13 +81,7 @@ static int CallLstat(const char *path, stat_wrapper_t *sb) {
ThreadRestrictions::AssertIOAllowed();
return lstat64(path, sb);
}
-#if defined(OS_ANDROID)
-static int CallFstat(int fd, stat_wrapper_t *sb) {
- ThreadRestrictions::AssertIOAllowed();
- return fstat64(fd, sb);
-}
-#endif
-#endif
+#endif // !(defined(OS_BSD) || defined(OS_MACOSX))
// Helper for NormalizeFilePath(), defined below.
bool RealPath(const FilePath& path, FilePath* real_path) {
@@ -634,11 +628,10 @@ bool GetFileInfo(const FilePath& file_path, File::Info* results) {
stat_wrapper_t file_info;
#if defined(OS_ANDROID)
if (file_path.IsContentUri()) {
- ScopedFD fd(OpenContentUriForRead(file_path));
- if (!fd.is_valid())
- return false;
- if (CallFstat(fd.get(), &file_info) != 0)
+ File file = OpenContentUriForRead(file_path);
+ if (!file.IsValid())
return false;
+ return file.GetInfo(results);
} else {
#endif // defined(OS_ANDROID)
if (CallStat(file_path.value().c_str(), &file_info) != 0)
diff --git a/base/file_util_unittest.cc b/base/file_util_unittest.cc
index 4bdd90f..642c9d5 100644
--- a/base/file_util_unittest.cc
+++ b/base/file_util_unittest.cc
@@ -2451,9 +2451,9 @@ TEST_F(FileUtilTest, ValidContentUriTest) {
// We should be able to read the file.
char* buffer = new char[image_size];
- int fd = OpenContentUriForRead(path);
- EXPECT_LT(0, fd);
- EXPECT_TRUE(ReadFromFD(fd, buffer, image_size));
+ File file = OpenContentUriForRead(path);
+ EXPECT_TRUE(file.IsValid());
+ EXPECT_TRUE(file.ReadAtCurrentPos(buffer, image_size));
delete[] buffer;
}
@@ -2466,8 +2466,8 @@ TEST_F(FileUtilTest, NonExistentContentUriTest) {
EXPECT_FALSE(GetFileSize(path, &size));
// We should not be able to read the file.
- int fd = OpenContentUriForRead(path);
- EXPECT_EQ(-1, fd);
+ File file = OpenContentUriForRead(path);
+ EXPECT_FALSE(file.IsValid());
}
#endif
diff --git a/base/files/file.h b/base/files/file.h
index 9c2479d..dc7616bb 100644
--- a/base/files/file.h
+++ b/base/files/file.h
@@ -265,6 +265,8 @@ class BASE_EXPORT File {
// Unlock a file previously locked.
Error Unlock();
+ bool async() const { return async_; }
+
#if defined(OS_WIN)
static Error OSErrorToFileError(DWORD last_error);
#elif defined(OS_POSIX)
diff --git a/base/files/file_posix.cc b/base/files/file_posix.cc
index f62491d..46d6d94 100644
--- a/base/files/file_posix.cc
+++ b/base/files/file_posix.cc
@@ -125,7 +125,6 @@ static File::Error CallFctnlFlock(PlatformFile file, bool do_lock) {
void File::InitializeUnsafe(const FilePath& name, uint32 flags) {
base::ThreadRestrictions::AssertIOAllowed();
DCHECK(!IsValid());
- DCHECK(!(flags & FLAG_ASYNC));
int open_flags = 0;
if (flags & FLAG_CREATE)
@@ -191,17 +190,19 @@ void File::InitializeUnsafe(const FilePath& name, uint32 flags) {
}
}
- if (descriptor >= 0 && (flags & (FLAG_CREATE_ALWAYS | FLAG_CREATE)))
+ if (descriptor < 0) {
+ error_details_ = File::OSErrorToFileError(errno);
+ return;
+ }
+
+ if (flags & (FLAG_CREATE_ALWAYS | FLAG_CREATE))
created_ = true;
- if ((descriptor >= 0) && (flags & FLAG_DELETE_ON_CLOSE))
+ if (flags & FLAG_DELETE_ON_CLOSE)
unlink(name.value().c_str());
- if (descriptor >= 0)
- error_details_ = FILE_OK;
- else
- error_details_ = File::OSErrorToFileError(errno);
-
+ async_ = ((flags & FLAG_ASYNC) == FLAG_ASYNC);
+ error_details_ = FILE_OK;
file_.reset(descriptor);
}
#endif // !defined(OS_NACL)
diff --git a/base/files/file_unittest.cc b/base/files/file_unittest.cc
index c0579ad..59cba31 100644
--- a/base/files/file_unittest.cc
+++ b/base/files/file_unittest.cc
@@ -11,7 +11,7 @@
using base::File;
using base::FilePath;
-TEST(File, Create) {
+TEST(FileTest, Create) {
base::ScopedTempDir temp_dir;
ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
FilePath file_path = temp_dir.path().AppendASCII("create_file_1");
@@ -87,7 +87,25 @@ TEST(File, Create) {
EXPECT_FALSE(base::PathExists(file_path));
}
-TEST(File, DeleteOpenFile) {
+TEST(FileTest, Async) {
+ base::ScopedTempDir temp_dir;
+ ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
+ FilePath file_path = temp_dir.path().AppendASCII("create_file");
+
+ {
+ File file(file_path, base::File::FLAG_OPEN_ALWAYS | base::File::FLAG_ASYNC);
+ EXPECT_TRUE(file.IsValid());
+ EXPECT_TRUE(file.async());
+ }
+
+ {
+ File file(file_path, base::File::FLAG_OPEN_ALWAYS);
+ EXPECT_TRUE(file.IsValid());
+ EXPECT_FALSE(file.async());
+ }
+}
+
+TEST(FileTest, DeleteOpenFile) {
base::ScopedTempDir temp_dir;
ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
FilePath file_path = temp_dir.path().AppendASCII("create_file_1");
@@ -114,7 +132,7 @@ TEST(File, DeleteOpenFile) {
EXPECT_FALSE(base::PathExists(file_path));
}
-TEST(File, ReadWrite) {
+TEST(FileTest, ReadWrite) {
base::ScopedTempDir temp_dir;
ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
FilePath file_path = temp_dir.path().AppendASCII("read_write_file");
@@ -186,7 +204,7 @@ TEST(File, ReadWrite) {
EXPECT_EQ(data_to_write[i - kOffsetBeyondEndOfFile], data_read_2[i]);
}
-TEST(File, Append) {
+TEST(FileTest, Append) {
base::ScopedTempDir temp_dir;
ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
FilePath file_path = temp_dir.path().AppendASCII("append_file");
@@ -234,7 +252,7 @@ TEST(File, Append) {
}
-TEST(File, Length) {
+TEST(FileTest, Length) {
base::ScopedTempDir temp_dir;
ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
FilePath file_path = temp_dir.path().AppendASCII("truncate_file");
@@ -283,9 +301,9 @@ TEST(File, Length) {
// Flakily fails: http://crbug.com/86494
#if defined(OS_ANDROID)
-TEST(File, TouchGetInfo) {
+TEST(FileTest, TouchGetInfo) {
#else
-TEST(File, DISABLED_TouchGetInfo) {
+TEST(FileTest, DISABLED_TouchGetInfo) {
#endif
base::ScopedTempDir temp_dir;
ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
@@ -349,7 +367,7 @@ TEST(File, DISABLED_TouchGetInfo) {
creation_time.ToInternalValue());
}
-TEST(File, ReadAtCurrentPosition) {
+TEST(FileTest, ReadAtCurrentPosition) {
base::ScopedTempDir temp_dir;
ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
FilePath file_path = temp_dir.path().AppendASCII("read_at_current_position");
@@ -373,7 +391,7 @@ TEST(File, ReadAtCurrentPosition) {
EXPECT_EQ(std::string(buffer, buffer + kDataSize), std::string(kData));
}
-TEST(File, WriteAtCurrentPosition) {
+TEST(FileTest, WriteAtCurrentPosition) {
base::ScopedTempDir temp_dir;
ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
FilePath file_path = temp_dir.path().AppendASCII("write_at_current_position");
@@ -397,7 +415,7 @@ TEST(File, WriteAtCurrentPosition) {
}
#if defined(OS_WIN)
-TEST(File, GetInfoForDirectory) {
+TEST(FileTest, GetInfoForDirectory) {
base::ScopedTempDir temp_dir;
ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
FilePath empty_dir = temp_dir.path().Append(FILE_PATH_LITERAL("gpfi_test"));