diff options
author | thakis@chromium.org <thakis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-09-24 05:19:13 +0000 |
---|---|---|
committer | thakis@chromium.org <thakis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-09-24 05:19:13 +0000 |
commit | 61b4a61bf1ea2a610c076cb28de59aa1137b3c4f (patch) | |
tree | 4a2b6465bcea096b8410c1e0a5dbb279fa34c1ba /webkit/blob | |
parent | 4e5ae20ff403cdcd14d3b86b18a0d0bcec2f47cc (diff) | |
download | chromium_src-61b4a61bf1ea2a610c076cb28de59aa1137b3c4f.zip chromium_src-61b4a61bf1ea2a610c076cb28de59aa1137b3c4f.tar.gz chromium_src-61b4a61bf1ea2a610c076cb28de59aa1137b3c4f.tar.bz2 |
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
Diffstat (limited to 'webkit/blob')
-rw-r--r-- | webkit/blob/deletable_file_reference.cc | 63 | ||||
-rw-r--r-- | webkit/blob/deletable_file_reference.h | 49 | ||||
-rw-r--r-- | webkit/blob/deletable_file_reference_unittest.cc | 51 | ||||
-rw-r--r-- | webkit/blob/webkit_blob.gypi | 2 |
4 files changed, 0 insertions, 165 deletions
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 <map> -#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<FilePath, DeletableFileReference*> DeleteableFileMap; - -DeleteableFileMap* map() { - return Singleton<DeleteableFileMap>::get(); -} - -} // namespace - -// static -scoped_refptr<DeletableFileReference> DeletableFileReference::Get( - const FilePath& path) { - DeleteableFileMap::iterator found = map()->find(path); - DeletableFileReference* reference = - (found == map()->end()) ? NULL : found->second; - return scoped_refptr<DeletableFileReference>(reference); -} - -// static -scoped_refptr<DeletableFileReference> DeletableFileReference::GetOrCreate( - const FilePath& path, base::MessageLoopProxy* file_thread) { - DCHECK(file_thread); - typedef std::pair<DeleteableFileMap::iterator, bool> InsertResult; - InsertResult result = map()->insert( - DeleteableFileMap::value_type(path, NULL)); - if (result.second == false) - return scoped_refptr<DeletableFileReference>(result.first->second); - - // Wasn't in the map, create a new reference and store the pointer. - scoped_refptr<DeletableFileReference> 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<DeletableFileReference> { - public: - // Returns a DeletableFileReference for the given path, if no reference - // for this path exists returns NULL. - static scoped_refptr<DeletableFileReference> Get(const FilePath& path); - - // Returns a DeletableFileReference for the given path, creating a new - // reference if none yet exists. - static scoped_refptr<DeletableFileReference> GetOrCreate( - const FilePath& path, base::MessageLoopProxy* file_thread); - - // The full file path. - const FilePath& path() const { return path_; } - - private: - friend class base::RefCounted<DeletableFileReference>; - - DeletableFileReference( - const FilePath& path, base::MessageLoopProxy* file_thread); - ~DeletableFileReference(); - - const FilePath path_; - scoped_refptr<base::MessageLoopProxy> 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<base::MessageLoopProxy> 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<DeletableFileReference> 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<DeletableFileReference> 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', { |