summaryrefslogtreecommitdiffstats
path: root/webkit
diff options
context:
space:
mode:
authorkinuko@chromium.org <kinuko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-12-20 07:46:44 +0000
committerkinuko@chromium.org <kinuko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-12-20 07:46:44 +0000
commitdd18f10f98feade390f6b8ffc274829bbce41248 (patch)
treeacbdd1bde0f980779e96d9c199070e865293705d /webkit
parentb86d7e1e12289a3cb5d626a91b33321d520a6653 (diff)
downloadchromium_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.cc3
-rw-r--r--webkit/chromeos/fileapi/memory_file_util_unittest.cc39
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.