From 61b4a61bf1ea2a610c076cb28de59aa1137b3c4f Mon Sep 17 00:00:00 2001 From: "thakis@chromium.org" Date: Fri, 24 Sep 2010 05:19:13 +0000 Subject: Revert 60378 (trying to track down http://crbug.com/56752 )- Flesh out URLLoader's download_to_file function. * tie the lifetime of the resulting temp file to the lifetime of the URLLoader (the plan is to later extend the lifetime of the temp file to support xhr.responseBlob) * make it work in test_shell * make it work for sync requests * added OnDataDownloaded messages to report progress A related BlobURL loading change. * grab a reference to the blob early on to ensure it's still there when the 'job' is finally started. TEST=manual and deletable_file_reference_unittest.cc BUG=52486 Review URL: http://codereview.chromium.org/3165062 TBR=michaeln@chromium.org Review URL: http://codereview.chromium.org/3455022 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@60425 0039d316-1c4b-4281-b951-d872f2087c98 --- webkit/blob/deletable_file_reference.cc | 63 ------------------------ webkit/blob/deletable_file_reference.h | 49 ------------------ webkit/blob/deletable_file_reference_unittest.cc | 51 ------------------- webkit/blob/webkit_blob.gypi | 2 - 4 files changed, 165 deletions(-) delete mode 100644 webkit/blob/deletable_file_reference.cc delete mode 100644 webkit/blob/deletable_file_reference.h delete mode 100644 webkit/blob/deletable_file_reference_unittest.cc (limited to 'webkit/blob') diff --git a/webkit/blob/deletable_file_reference.cc b/webkit/blob/deletable_file_reference.cc deleted file mode 100644 index b005eeb..0000000 --- a/webkit/blob/deletable_file_reference.cc +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright (c) 2010 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "webkit/blob/deletable_file_reference.h" - -#include -#include "base/file_util.h" -#include "base/file_util_proxy.h" -#include "base/message_loop_proxy.h" -#include "base/singleton.h" - -namespace webkit_blob { - -namespace { - -typedef std::map DeleteableFileMap; - -DeleteableFileMap* map() { - return Singleton::get(); -} - -} // namespace - -// static -scoped_refptr DeletableFileReference::Get( - const FilePath& path) { - DeleteableFileMap::iterator found = map()->find(path); - DeletableFileReference* reference = - (found == map()->end()) ? NULL : found->second; - return scoped_refptr(reference); -} - -// static -scoped_refptr DeletableFileReference::GetOrCreate( - const FilePath& path, base::MessageLoopProxy* file_thread) { - DCHECK(file_thread); - typedef std::pair InsertResult; - InsertResult result = map()->insert( - DeleteableFileMap::value_type(path, NULL)); - if (result.second == false) - return scoped_refptr(result.first->second); - - // Wasn't in the map, create a new reference and store the pointer. - scoped_refptr reference = - new DeletableFileReference(path, file_thread); - result.first->second = reference.get(); - return reference; -} - -DeletableFileReference::DeletableFileReference( - const FilePath& path, base::MessageLoopProxy* file_thread) - : path_(path), file_thread_(file_thread) { - DCHECK(map()->find(path_)->second == NULL); -} - -DeletableFileReference::~DeletableFileReference() { - DCHECK(map()->find(path_)->second == this); - map()->erase(path_); - base::FileUtilProxy::Delete(file_thread_, path_, NULL); -} - -} // namespace webkit_blob diff --git a/webkit/blob/deletable_file_reference.h b/webkit/blob/deletable_file_reference.h deleted file mode 100644 index 9578c10..0000000 --- a/webkit/blob/deletable_file_reference.h +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright (c) 2010 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef WEBKIT_BLOB_DELETABLE_FILE_REFERENCE_H_ -#define WEBKIT_BLOB_DELETABLE_FILE_REFERENCE_H_ -#pragma once - -#include "base/file_path.h" -#include "base/ref_counted.h" - -namespace base { -class MessageLoopProxy; -} - -namespace webkit_blob { - -// A refcounted wrapper around a FilePath that schedules the file -// to be deleted upon final release. -class DeletableFileReference : public base::RefCounted { - public: - // Returns a DeletableFileReference for the given path, if no reference - // for this path exists returns NULL. - static scoped_refptr Get(const FilePath& path); - - // Returns a DeletableFileReference for the given path, creating a new - // reference if none yet exists. - static scoped_refptr GetOrCreate( - const FilePath& path, base::MessageLoopProxy* file_thread); - - // The full file path. - const FilePath& path() const { return path_; } - - private: - friend class base::RefCounted; - - DeletableFileReference( - const FilePath& path, base::MessageLoopProxy* file_thread); - ~DeletableFileReference(); - - const FilePath path_; - scoped_refptr file_thread_; - - DISALLOW_COPY_AND_ASSIGN(DeletableFileReference); -}; - -} // namespace webkit_blob - -#endif // BASE_DELETABLE_FILE_REFERENCE_H_ diff --git a/webkit/blob/deletable_file_reference_unittest.cc b/webkit/blob/deletable_file_reference_unittest.cc deleted file mode 100644 index 4a92612..0000000 --- a/webkit/blob/deletable_file_reference_unittest.cc +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright (c) 2010 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "webkit/blob/deletable_file_reference.h" - -#include "base/file_util.h" -#include "base/message_loop.h" -#include "base/message_loop_proxy.h" -#include "testing/gtest/include/gtest/gtest.h" - -namespace webkit_blob { - -TEST(DeletableFileReferenceTest, TestReferences) { - scoped_refptr loop_proxy = - base::MessageLoopProxy::CreateForCurrentThread(); - - // Create a file. - FilePath file; - file_util::CreateTemporaryFile(&file); - EXPECT_TRUE(file_util::PathExists(file)); - - // Create a first reference to that file. - scoped_refptr reference1; - reference1 = DeletableFileReference::Get(file); - EXPECT_FALSE(reference1.get()); - reference1 = DeletableFileReference::GetOrCreate(file, loop_proxy); - EXPECT_TRUE(reference1.get()); - EXPECT_TRUE(file == reference1->path()); - - // Get a second reference to that file. - scoped_refptr reference2; - reference2 = DeletableFileReference::Get(file); - EXPECT_EQ(reference1.get(), reference2.get()); - reference2 = DeletableFileReference::GetOrCreate(file, loop_proxy); - EXPECT_EQ(reference1.get(), reference2.get()); - - // Drop the first reference, the file and reference should still be there. - reference1 = NULL; - EXPECT_TRUE(DeletableFileReference::Get(file).get()); - MessageLoop::current()->RunAllPending(); - EXPECT_TRUE(file_util::PathExists(file)); - - // Drop the second reference, the file and reference should get deleted. - reference2 = NULL; - EXPECT_FALSE(DeletableFileReference::Get(file).get()); - MessageLoop::current()->RunAllPending(); - EXPECT_FALSE(file_util::PathExists(file)); -} - -} // namespace webkit_blob diff --git a/webkit/blob/webkit_blob.gypi b/webkit/blob/webkit_blob.gypi index eb4b3be..e057efb 100644 --- a/webkit/blob/webkit_blob.gypi +++ b/webkit/blob/webkit_blob.gypi @@ -20,8 +20,6 @@ 'blob_storage_controller.h', 'blob_url_request_job.cc', 'blob_url_request_job.h', - 'deletable_file_reference.cc', - 'deletable_file_reference.h', ], 'conditions': [ ['inside_chromium_build==0', { -- cgit v1.1