diff options
author | kinuko@chromium.org <kinuko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-13 01:51:12 +0000 |
---|---|---|
committer | kinuko@chromium.org <kinuko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-13 01:51:12 +0000 |
commit | a4e775be7269912e2a9a779bfba77cd1c2b8d18b (patch) | |
tree | 531a399b11efe9d41b58c99df3e9a1d537ef867f /webkit/browser/fileapi/obfuscated_file_util.cc | |
parent | c2b5d715c88b74d005ee67ef5d32e371a53ada91 (diff) | |
download | chromium_src-a4e775be7269912e2a9a779bfba77cd1c2b8d18b.zip chromium_src-a4e775be7269912e2a9a779bfba77cd1c2b8d18b.tar.gz chromium_src-a4e775be7269912e2a9a779bfba77cd1c2b8d18b.tar.bz2 |
Use timed helper class in ObfuscatedFileUtil
BUG=248826
TEST=ObfuscatedFileUtilTest.*DropDatabases*
R=tzik@chromium.org
Review URL: https://codereview.chromium.org/16728003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@205994 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/browser/fileapi/obfuscated_file_util.cc')
-rw-r--r-- | webkit/browser/fileapi/obfuscated_file_util.cc | 95 |
1 files changed, 19 insertions, 76 deletions
diff --git a/webkit/browser/fileapi/obfuscated_file_util.cc b/webkit/browser/fileapi/obfuscated_file_util.cc index c949a97..d7b7a90 100644 --- a/webkit/browser/fileapi/obfuscated_file_util.cc +++ b/webkit/browser/fileapi/obfuscated_file_util.cc @@ -29,6 +29,7 @@ #include "webkit/browser/fileapi/sandbox_mount_point_provider.h" #include "webkit/browser/fileapi/sandbox_origin_database.h" #include "webkit/browser/fileapi/syncable/syncable_file_system_util.h" +#include "webkit/browser/fileapi/timed_task_helper.h" #include "webkit/browser/quota/quota_manager.h" #include "webkit/common/fileapi/file_system_util.h" @@ -95,49 +96,6 @@ void TouchDirectory(SandboxDirectoryDatabase* db, FileId dir_id) { NOTREACHED(); } -class Deleter { - public: - explicit Deleter(ObfuscatedFileUtil* util) : util_(util) {} - - void operator()(bool* ptr) const { - if (*ptr) - util_->ResetObjectLifetimeTracker(); - delete ptr; - } - - private: - ObfuscatedFileUtil* util_; -}; - -void MaybeDropDatabases( - ObfuscatedFileUtil* util, - scoped_refptr<base::SequencedTaskRunner> file_task_runner, - scoped_ptr<bool, Deleter> object_still_alive, - int64 db_flush_delay_seconds) { - // If object isn't alive, DB has already been dropped by dtor. - if (!*object_still_alive) - return; - - // Check to see if DB was recently used. If yes, restart timer so it triggers - // again in kFlushDelaySeconds from the last time it was used. - base::TimeDelta last_used_delta = - base::TimeTicks::Now() - util->db_last_use_time(); - int64 next_timer_delta = db_flush_delay_seconds - last_used_delta.InSeconds(); - if (next_timer_delta > 0) { - file_task_runner->PostDelayedTask( - FROM_HERE, - base::Bind(&MaybeDropDatabases, - base::Unretained(util), - file_task_runner, - base::Passed(&object_still_alive), - db_flush_delay_seconds), - base::TimeDelta::FromSeconds(next_timer_delta)); - return; - } - - util->DropDatabases(); -} - const base::FilePath::CharType kTemporaryDirectoryName[] = FILE_PATH_LITERAL("t"); const base::FilePath::CharType kPersistentDirectoryName[] = FILE_PATH_LITERAL("p"); const base::FilePath::CharType kSyncableDirectoryName[] = FILE_PATH_LITERAL("s"); @@ -301,16 +259,11 @@ ObfuscatedFileUtil::ObfuscatedFileUtil( base::SequencedTaskRunner* file_task_runner) : special_storage_policy_(special_storage_policy), file_system_directory_(file_system_directory), - file_task_runner_(file_task_runner), db_flush_delay_seconds_(10 * 60), // 10 mins. - object_lifetime_tracker_(NULL) { + file_task_runner_(file_task_runner) { } ObfuscatedFileUtil::~ObfuscatedFileUtil() { - // Mark as deleted so that the callback doesn't run on invalid object. - if (object_lifetime_tracker_) - *object_lifetime_tracker_ = false; - DropDatabases(); } @@ -1039,17 +992,6 @@ bool ObfuscatedFileUtil::DestroyDirectoryDatabase( return SandboxDirectoryDatabase::DestroyDatabase(path); } -void ObfuscatedFileUtil::ResetObjectLifetimeTracker() { - object_lifetime_tracker_ = NULL; -} - -void ObfuscatedFileUtil::DropDatabases() { - origin_database_.reset(); - STLDeleteContainerPairSecondPointers( - directories_.begin(), directories_.end()); - directories_.clear(); -} - // static int64 ObfuscatedFileUtil::ComputeFilePathCost(const base::FilePath& path) { return UsageForPath(VirtualPath::BaseName(path).value().size()); @@ -1340,24 +1282,25 @@ void ObfuscatedFileUtil::InvalidateUsageCache( } void ObfuscatedFileUtil::MarkUsed() { - db_last_use_time_ = base::TimeTicks::Now(); + if (!timer_) + timer_.reset(new TimedTaskHelper(file_task_runner_)); - // If object_lifetime_tracker_ is valid, then callback timer already running. - if (object_lifetime_tracker_) - return; + if (timer_->IsRunning()) { + timer_->Reset(); + } else { + timer_->Start(FROM_HERE, + base::TimeDelta::FromSeconds(db_flush_delay_seconds_), + base::Bind(&ObfuscatedFileUtil::DropDatabases, + base::Unretained(this))); + } +} - // Initialize object lifetime tracker for the first time. - object_lifetime_tracker_ = new bool(true); - - scoped_ptr<bool, Deleter> scoper(object_lifetime_tracker_, Deleter(this)); - file_task_runner_->PostDelayedTask( - FROM_HERE, - base::Bind(&MaybeDropDatabases, - base::Unretained(this), - file_task_runner_, - base::Passed(&scoper), - db_flush_delay_seconds_), - base::TimeDelta::FromSeconds(db_flush_delay_seconds_)); +void ObfuscatedFileUtil::DropDatabases() { + origin_database_.reset(); + STLDeleteContainerPairSecondPointers( + directories_.begin(), directories_.end()); + directories_.clear(); + timer_.reset(); } bool ObfuscatedFileUtil::InitOriginDatabase(bool create) { |