diff options
author | kinuko@chromium.org <kinuko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-12-20 07:46:44 +0000 |
---|---|---|
committer | kinuko@chromium.org <kinuko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-12-20 07:46:44 +0000 |
commit | dd18f10f98feade390f6b8ffc274829bbce41248 (patch) | |
tree | acbdd1bde0f980779e96d9c199070e865293705d /webkit | |
parent | b86d7e1e12289a3cb5d626a91b33321d520a6653 (diff) | |
download | chromium_src-dd18f10f98feade390f6b8ffc274829bbce41248.zip chromium_src-dd18f10f98feade390f6b8ffc274829bbce41248.tar.gz chromium_src-dd18f10f98feade390f6b8ffc274829bbce41248.tar.bz2 |
Fix memory leaks in MemoryFileUtil
BUG=108015
TEST=test_shell_tests:MemoryFileUtil\* with heapcheck/valgrind
Review URL: http://codereview.chromium.org/8953027
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@115094 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit')
-rw-r--r-- | webkit/chromeos/fileapi/memory_file_util.cc | 3 | ||||
-rw-r--r-- | webkit/chromeos/fileapi/memory_file_util_unittest.cc | 39 |
2 files changed, 28 insertions, 14 deletions
diff --git a/webkit/chromeos/fileapi/memory_file_util.cc b/webkit/chromeos/fileapi/memory_file_util.cc index 2d4d53e..1f2f4ea 100644 --- a/webkit/chromeos/fileapi/memory_file_util.cc +++ b/webkit/chromeos/fileapi/memory_file_util.cc @@ -22,7 +22,7 @@ class MemoryFileUtilAsyncFileStream : public AsyncFileStream { : file_entry_(file_entry), flags_(flags), offset_(0), - weak_ptr_factory_(this) { + weak_ptr_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { } // AsyncFileStream override. @@ -210,6 +210,7 @@ void MemoryFileUtil::Open( 0, base::Bind(&MemoryFileUtil::OpenTruncatedFileOrCreate, base::Unretained(this), file_path, flags, callback)); + break; case base::PLATFORM_FILE_OPEN_TRUNCATED: Truncate( diff --git a/webkit/chromeos/fileapi/memory_file_util_unittest.cc b/webkit/chromeos/fileapi/memory_file_util_unittest.cc index 8e991b00f..2853b4d 100644 --- a/webkit/chromeos/fileapi/memory_file_util_unittest.cc +++ b/webkit/chromeos/fileapi/memory_file_util_unittest.cc @@ -21,7 +21,15 @@ namespace fileapi { // system, based on FileUtilAsync. class MemoryFileUtilTest : public testing::Test { public: - MemoryFileUtilTest() { + MemoryFileUtilTest() : max_request_id_(0) { + } + + ~MemoryFileUtilTest() { + for (std::map<int, CallbackStatus>::iterator iter = status_map_.begin(); + iter != status_map_.end(); + ++iter) { + delete iter->second.file_stream; + } } void SetUp() { @@ -42,6 +50,15 @@ class MemoryFileUtilTest : public testing::Test { }; struct CallbackStatus { + CallbackStatus() + : type(CALLBACK_TYPE_ERROR), + result(base::PLATFORM_FILE_OK), + file_stream(NULL), + length(-1), + completed(false), + called_after_completed(false), + called(0) {} + CallbackType type; base::PlatformFileError result; base::PlatformFileInfo file_info; @@ -57,7 +74,6 @@ class MemoryFileUtilTest : public testing::Test { }; FileUtilAsync::StatusCallback GetStatusCallback(int request_id) { - max_request_id_ = std::max(request_id, max_request_id_); return base::Bind(&MemoryFileUtilTest::StatusCallbackImpl, base::Unretained(this), request_id); @@ -65,21 +81,18 @@ class MemoryFileUtilTest : public testing::Test { FileUtilAsync::GetFileInfoCallback GetGetFileInfoCallback( int request_id) { - max_request_id_ = std::max(request_id, max_request_id_); return base::Bind(&MemoryFileUtilTest::GetFileInfoCallback, base::Unretained(this), request_id); } FileUtilAsync::OpenCallback GetOpenCallback(int request_id) { - max_request_id_ = std::max(request_id, max_request_id_); return base::Bind(&MemoryFileUtilTest::OpenCallback, base::Unretained(this), request_id); } AsyncFileStream::ReadWriteCallback GetReadWriteCallback(int request_id) { - max_request_id_ = std::max(request_id, max_request_id_); return base::Bind(&MemoryFileUtilTest::ReadWriteCallbackImpl, base::Unretained(this), request_id); @@ -87,9 +100,6 @@ class MemoryFileUtilTest : public testing::Test { FileUtilAsync::ReadDirectoryCallback GetReadDirectoryCallback( int request_id) { - if (request_id > max_request_id_) { - max_request_id_ = request_id; - } return base::Bind(&MemoryFileUtilTest::ReadDirectoryCallback, base::Unretained(this), request_id); @@ -158,6 +168,7 @@ class MemoryFileUtilTest : public testing::Test { void OpenCallback(int request_id, PlatformFileError result, AsyncFileStream* file_stream) { + DCHECK(status_map_.find(request_id) == status_map_.end()); CallbackStatus status; status.type = CALLBACK_TYPE_OPEN; status.result = result; @@ -210,6 +221,7 @@ class MemoryFileUtilTest : public testing::Test { status.result = result; status_map_[request_id] = status; stream->Write(data, length, GetReadWriteCallback(GetNextRequestId())); + delete stream; } scoped_ptr<MemoryFileUtil> file_util_; @@ -244,14 +256,15 @@ TEST_F(MemoryFileUtilTest, TestCreateGetFileInfo) { status = GetStatus(request_id2); ASSERT_EQ(base::PLATFORM_FILE_OK, status.result); + const int request_id3 = GetNextRequestId(); file_util()->GetFileInfo(FilePath("/mnt/memory/test.txt"), - GetGetFileInfoCallback(3)); + GetGetFileInfoCallback(request_id3)); MessageLoop::current()->RunAllPending(); base::Time end_create = base::Time::Now(); - ASSERT_EQ(CALLBACK_TYPE_GET_FILE_INFO, GetStatusType(3)); - status = GetStatus(3); + ASSERT_EQ(CALLBACK_TYPE_GET_FILE_INFO, GetStatusType(request_id3)); + status = GetStatus(request_id3); ASSERT_EQ(base::PLATFORM_FILE_OK, status.result); ASSERT_EQ(0, status.file_info.size); ASSERT_FALSE(status.file_info.is_directory); @@ -379,7 +392,7 @@ TEST_F(MemoryFileUtilTest, TestReadWrite) { ASSERT_EQ(base::PLATFORM_FILE_OK, status.result); ASSERT_EQ(base::PLATFORM_FILE_OK, status.result); - scoped_ptr<AsyncFileStream> read_file_stream(status.file_stream); + AsyncFileStream* read_file_stream = status.file_stream; // Read the whole file char buffer[1024]; @@ -422,7 +435,7 @@ TEST_F(MemoryFileUtilTest, TestReadWrite) { status = GetStatus(request_id11); ASSERT_EQ(base::PLATFORM_FILE_OK, status.result); - scoped_ptr<AsyncFileStream> write_file_stream2(status.file_stream); + AsyncFileStream* write_file_stream2 = status.file_stream; // Check that the size has not changed. |