summaryrefslogtreecommitdiffstats
path: root/webkit/browser/fileapi/obfuscated_file_util.cc
diff options
context:
space:
mode:
authorkinuko@chromium.org <kinuko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-13 01:51:12 +0000
committerkinuko@chromium.org <kinuko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-13 01:51:12 +0000
commita4e775be7269912e2a9a779bfba77cd1c2b8d18b (patch)
tree531a399b11efe9d41b58c99df3e9a1d537ef867f /webkit/browser/fileapi/obfuscated_file_util.cc
parentc2b5d715c88b74d005ee67ef5d32e371a53ada91 (diff)
downloadchromium_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.cc95
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) {