
This is a reland of 18947083c7
The move_source_file.py script's formatting rules incorrectly
formatted services/device/generic_sensor/platform_sensor_and_provider_unittest_win.cc
after all. But we also can't rely 100% on git cl format (crbug.com/997063)
so I ended up performing a git cl format && git add -up
(+interactive addition of missing blank line after foo.h when included
from top of foo.cc)
Also added
$ tools/git/move_source_file.py net/test/test_with_scoped_task_environment.h net/test/test_with_task_environment.h
Original change's description:
> [TaskEnvironment] Complete migration with header rename
>
> This is merely:
>
> $ tools/git/move_source_file.py base/test/scoped_task_environment.h base/test/task_environment.h
> $ tools/git/move_source_file.py base/test/scoped_task_environment.cc base/test/task_environment.cc
> $ tools/git/move_source_file.py base/test/scoped_task_environment_unittest.cc base/test/task_environment_unittest.cc
> $ tools/git/move_source_file.py content/public/test/test_browser_thread_bundle.h content/public/test/browser_task_environment.h
> $ tools/git/move_source_file.py content/public/test/test_browser_thread_bundle.cc content/public/test/browser_task_environment.cc
> $ tools/git/move_source_file.py content/public/test/test_browser_thread_bundle_unittest.cc content/public/test/browser_task_environment_unittest.cc
> $ tools/git/move_source_file.py ios/web/public/test/test_web_thread_bundle.h ios/web/public/test/web_task_environment.h
> $ tools/git/move_source_file.py ios/web/test/test_web_thread_bundle.cc ios/web/test/web_task_environment.cc
>
> and a few manual renames in DEPS files missed by the script
>
> This CL uses --bypass-hooks to avoid having to git cl format because
> many headers are being reordered by git cl format and it's too many to
> figure out in a no-op CL which ones are okay with it.
> windows.h for one should typically be first and another one of the
> reorderings in PS3 even caused a compile failure:
> https://chromium-review.googlesource.com/c/chromium/src/+/1764962/3/components/services/font/font_loader_unittest.cc
>
> TBR=dcheng@chromium.org
>
> Bug: 992483
> Change-Id: I32a4afd43ef779393c95d9873c157be2d3da1dd1
> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1764962
> Reviewed-by: Gabriel Charette <gab@chromium.org>
> Reviewed-by: Daniel Cheng <dcheng@chromium.org>
> Commit-Queue: Gabriel Charette <gab@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#689778}
TBR=dcheng@chromium.org
Bug: 992483
Change-Id: I6179dd1329a4d30bf5c65450ea893537f31e6f85
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1767658
Reviewed-by: Gabriel Charette <gab@chromium.org>
Commit-Queue: Gabriel Charette <gab@chromium.org>
Cr-Commit-Position: refs/heads/master@{#689794}
104 lines
3.0 KiB
C++
104 lines
3.0 KiB
C++
// Copyright 2016 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 "base/sequenced_task_runner.h"
|
|
|
|
#include <utility>
|
|
|
|
#include "base/bind.h"
|
|
#include "base/gtest_prod_util.h"
|
|
#include "base/run_loop.h"
|
|
#include "base/test/task_environment.h"
|
|
#include "base/threading/thread.h"
|
|
#include "base/threading/thread_task_runner_handle.h"
|
|
#include "testing/gtest/include/gtest/gtest.h"
|
|
|
|
namespace base {
|
|
namespace {
|
|
|
|
class FlagOnDelete {
|
|
public:
|
|
FlagOnDelete(bool* deleted,
|
|
scoped_refptr<SequencedTaskRunner> expected_deletion_sequence)
|
|
: deleted_(deleted),
|
|
expected_deletion_sequence_(std::move(expected_deletion_sequence)) {}
|
|
|
|
private:
|
|
friend class DeleteHelper<FlagOnDelete>;
|
|
FRIEND_TEST_ALL_PREFIXES(SequencedTaskRunnerTest,
|
|
OnTaskRunnerDeleterTargetStoppedEarly);
|
|
|
|
~FlagOnDelete() {
|
|
EXPECT_FALSE(*deleted_);
|
|
*deleted_ = true;
|
|
if (expected_deletion_sequence_)
|
|
EXPECT_TRUE(expected_deletion_sequence_->RunsTasksInCurrentSequence());
|
|
}
|
|
|
|
bool* deleted_;
|
|
const scoped_refptr<SequencedTaskRunner> expected_deletion_sequence_;
|
|
|
|
DISALLOW_COPY_AND_ASSIGN(FlagOnDelete);
|
|
};
|
|
|
|
class SequencedTaskRunnerTest : public testing::Test {
|
|
protected:
|
|
SequencedTaskRunnerTest() : foreign_thread_("foreign") {}
|
|
|
|
void SetUp() override {
|
|
foreign_thread_.Start();
|
|
foreign_runner_ = foreign_thread_.task_runner();
|
|
}
|
|
|
|
scoped_refptr<SequencedTaskRunner> foreign_runner_;
|
|
|
|
Thread foreign_thread_;
|
|
|
|
private:
|
|
test::TaskEnvironment task_environment_;
|
|
|
|
DISALLOW_COPY_AND_ASSIGN(SequencedTaskRunnerTest);
|
|
};
|
|
|
|
using SequenceBoundUniquePtr =
|
|
std::unique_ptr<FlagOnDelete, OnTaskRunnerDeleter>;
|
|
|
|
TEST_F(SequencedTaskRunnerTest, OnTaskRunnerDeleterOnMainThread) {
|
|
bool deleted_on_main_thread = false;
|
|
SequenceBoundUniquePtr ptr(
|
|
new FlagOnDelete(&deleted_on_main_thread, ThreadTaskRunnerHandle::Get()),
|
|
OnTaskRunnerDeleter(ThreadTaskRunnerHandle::Get()));
|
|
EXPECT_FALSE(deleted_on_main_thread);
|
|
foreign_runner_->PostTask(
|
|
FROM_HERE, BindOnce([](SequenceBoundUniquePtr) {}, std::move(ptr)));
|
|
|
|
{
|
|
RunLoop run_loop;
|
|
foreign_runner_->PostTaskAndReply(FROM_HERE, BindOnce([] {}),
|
|
run_loop.QuitClosure());
|
|
run_loop.Run();
|
|
}
|
|
EXPECT_TRUE(deleted_on_main_thread);
|
|
}
|
|
|
|
TEST_F(SequencedTaskRunnerTest, OnTaskRunnerDeleterTargetStoppedEarly) {
|
|
bool deleted_on_main_thread = false;
|
|
FlagOnDelete* raw =
|
|
new FlagOnDelete(&deleted_on_main_thread, ThreadTaskRunnerHandle::Get());
|
|
SequenceBoundUniquePtr ptr(raw, OnTaskRunnerDeleter(foreign_runner_));
|
|
EXPECT_FALSE(deleted_on_main_thread);
|
|
|
|
// Stopping the target ahead of deleting |ptr| should make its
|
|
// OnTaskRunnerDeleter no-op.
|
|
foreign_thread_.Stop();
|
|
ptr = nullptr;
|
|
EXPECT_FALSE(deleted_on_main_thread);
|
|
|
|
delete raw;
|
|
EXPECT_TRUE(deleted_on_main_thread);
|
|
}
|
|
|
|
} // namespace
|
|
} // namespace base
|