summaryrefslogtreecommitdiff
path: root/chromium/content/browser/dom_storage/dom_storage_task_runner.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/content/browser/dom_storage/dom_storage_task_runner.cc')
-rw-r--r--chromium/content/browser/dom_storage/dom_storage_task_runner.cc107
1 files changed, 107 insertions, 0 deletions
diff --git a/chromium/content/browser/dom_storage/dom_storage_task_runner.cc b/chromium/content/browser/dom_storage/dom_storage_task_runner.cc
new file mode 100644
index 00000000000..aa75c3c530a
--- /dev/null
+++ b/chromium/content/browser/dom_storage/dom_storage_task_runner.cc
@@ -0,0 +1,107 @@
+// Copyright 2013 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 "content/browser/dom_storage/dom_storage_task_runner.h"
+
+#include "base/bind.h"
+#include "base/bind_helpers.h"
+#include "base/message_loop/message_loop_proxy.h"
+#include "base/tracked_objects.h"
+
+namespace content {
+
+// DOMStorageTaskRunner
+
+bool DOMStorageTaskRunner::RunsTasksOnCurrentThread() const {
+ return IsRunningOnSequence(PRIMARY_SEQUENCE);
+}
+
+// DOMStorageWorkerPoolTaskRunner
+
+DOMStorageWorkerPoolTaskRunner::DOMStorageWorkerPoolTaskRunner(
+ base::SequencedWorkerPool* sequenced_worker_pool,
+ base::SequencedWorkerPool::SequenceToken primary_sequence_token,
+ base::SequencedWorkerPool::SequenceToken commit_sequence_token,
+ base::MessageLoopProxy* delayed_task_loop)
+ : message_loop_(delayed_task_loop),
+ sequenced_worker_pool_(sequenced_worker_pool),
+ primary_sequence_token_(primary_sequence_token),
+ commit_sequence_token_(commit_sequence_token) {
+}
+
+DOMStorageWorkerPoolTaskRunner::~DOMStorageWorkerPoolTaskRunner() {
+}
+
+bool DOMStorageWorkerPoolTaskRunner::PostDelayedTask(
+ const tracked_objects::Location& from_here,
+ const base::Closure& task,
+ base::TimeDelta delay) {
+ // Note base::TaskRunner implements PostTask in terms of PostDelayedTask
+ // with a delay of zero, we detect that usage and avoid the unecessary
+ // trip thru the message loop.
+ if (delay == base::TimeDelta()) {
+ return sequenced_worker_pool_->PostSequencedWorkerTaskWithShutdownBehavior(
+ primary_sequence_token_, from_here, task,
+ base::SequencedWorkerPool::BLOCK_SHUTDOWN);
+ }
+ // Post a task to call this->PostTask() after the delay.
+ return message_loop_->PostDelayedTask(
+ FROM_HERE,
+ base::Bind(base::IgnoreResult(&DOMStorageWorkerPoolTaskRunner::PostTask),
+ this, from_here, task),
+ delay);
+}
+
+bool DOMStorageWorkerPoolTaskRunner::PostShutdownBlockingTask(
+ const tracked_objects::Location& from_here,
+ SequenceID sequence_id,
+ const base::Closure& task) {
+ return sequenced_worker_pool_->PostSequencedWorkerTaskWithShutdownBehavior(
+ IDtoToken(sequence_id), from_here, task,
+ base::SequencedWorkerPool::BLOCK_SHUTDOWN);
+}
+
+bool DOMStorageWorkerPoolTaskRunner::IsRunningOnSequence(
+ SequenceID sequence_id) const {
+ return sequenced_worker_pool_->IsRunningSequenceOnCurrentThread(
+ IDtoToken(sequence_id));
+}
+
+base::SequencedWorkerPool::SequenceToken
+DOMStorageWorkerPoolTaskRunner::IDtoToken(SequenceID id) const {
+ if (id == PRIMARY_SEQUENCE)
+ return primary_sequence_token_;
+ DCHECK_EQ(COMMIT_SEQUENCE, id);
+ return commit_sequence_token_;
+}
+
+// MockDOMStorageTaskRunner
+
+MockDOMStorageTaskRunner::MockDOMStorageTaskRunner(
+ base::MessageLoopProxy* message_loop)
+ : message_loop_(message_loop) {
+}
+
+MockDOMStorageTaskRunner::~MockDOMStorageTaskRunner() {
+}
+
+bool MockDOMStorageTaskRunner::PostDelayedTask(
+ const tracked_objects::Location& from_here,
+ const base::Closure& task,
+ base::TimeDelta delay) {
+ return message_loop_->PostTask(from_here, task);
+}
+
+bool MockDOMStorageTaskRunner::PostShutdownBlockingTask(
+ const tracked_objects::Location& from_here,
+ SequenceID sequence_id,
+ const base::Closure& task) {
+ return message_loop_->PostTask(from_here, task);
+}
+
+bool MockDOMStorageTaskRunner::IsRunningOnSequence(SequenceID) const {
+ return message_loop_->RunsTasksOnCurrentThread();
+}
+
+} // namespace content