blob: ef2c501437fe53477cd64d7e71a41ac2affa3d95 [file] [log] [blame]
// 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 <utility>
#include "base/bind.h"
#include "base/bind_helpers.h"
#include "base/location.h"
#include "base/logging.h"
namespace content {
// DOMStorageWorkerPoolTaskRunner
DOMStorageWorkerPoolTaskRunner::DOMStorageWorkerPoolTaskRunner(
scoped_refptr<base::SequencedTaskRunner> primary_sequence,
scoped_refptr<base::SequencedTaskRunner> commit_sequence)
: primary_sequence_(std::move(primary_sequence)),
commit_sequence_(std::move(commit_sequence)) {}
DOMStorageWorkerPoolTaskRunner::~DOMStorageWorkerPoolTaskRunner() = default;
bool DOMStorageWorkerPoolTaskRunner::RunsTasksInCurrentSequence() const {
return primary_sequence_->RunsTasksInCurrentSequence() ||
commit_sequence_->RunsTasksInCurrentSequence();
}
bool DOMStorageWorkerPoolTaskRunner::PostDelayedTask(
const base::Location& from_here,
base::OnceClosure task,
base::TimeDelta delay) {
return primary_sequence_->PostDelayedTask(from_here, std::move(task), delay);
}
bool DOMStorageWorkerPoolTaskRunner::PostShutdownBlockingTask(
const base::Location& from_here,
SequenceID sequence_id,
base::OnceClosure task) {
return GetSequencedTaskRunner(sequence_id)
->PostTask(from_here, std::move(task));
}
void DOMStorageWorkerPoolTaskRunner::AssertIsRunningOnPrimarySequence() const {
DCHECK(primary_sequence_->RunsTasksInCurrentSequence());
}
void DOMStorageWorkerPoolTaskRunner::AssertIsRunningOnCommitSequence() const {
DCHECK(commit_sequence_->RunsTasksInCurrentSequence());
}
scoped_refptr<base::SequencedTaskRunner>
DOMStorageWorkerPoolTaskRunner::GetSequencedTaskRunner(SequenceID sequence_id) {
if (sequence_id == PRIMARY_SEQUENCE)
return primary_sequence_;
DCHECK_EQ(COMMIT_SEQUENCE, sequence_id);
return commit_sequence_;
}
// MockDOMStorageTaskRunner
MockDOMStorageTaskRunner::MockDOMStorageTaskRunner(
scoped_refptr<base::SequencedTaskRunner> task_runner)
: task_runner_(std::move(task_runner)) {}
MockDOMStorageTaskRunner::~MockDOMStorageTaskRunner() = default;
bool MockDOMStorageTaskRunner::RunsTasksInCurrentSequence() const {
return task_runner_->RunsTasksInCurrentSequence();
}
bool MockDOMStorageTaskRunner::PostDelayedTask(const base::Location& from_here,
base::OnceClosure task,
base::TimeDelta delay) {
return task_runner_->PostTask(from_here, std::move(task));
}
bool MockDOMStorageTaskRunner::PostShutdownBlockingTask(
const base::Location& from_here,
SequenceID sequence_id,
base::OnceClosure task) {
return task_runner_->PostTask(from_here, std::move(task));
}
void MockDOMStorageTaskRunner::AssertIsRunningOnPrimarySequence() const {
DCHECK(RunsTasksInCurrentSequence());
}
void MockDOMStorageTaskRunner::AssertIsRunningOnCommitSequence() const {
DCHECK(RunsTasksInCurrentSequence());
}
scoped_refptr<base::SequencedTaskRunner>
MockDOMStorageTaskRunner::GetSequencedTaskRunner(SequenceID sequence_id) {
return task_runner_;
}
} // namespace content