| Index: services/resource_coordinator/coordination_unit/coordination_unit_impl_unittest.cc
|
| diff --git a/services/resource_coordinator/coordination_unit/coordination_unit_impl_unittest.cc b/services/resource_coordinator/coordination_unit/coordination_unit_impl_unittest.cc
|
| deleted file mode 100644
|
| index 4640865e2e686b05be4f2182c39e527a82ffd5fb..0000000000000000000000000000000000000000
|
| --- a/services/resource_coordinator/coordination_unit/coordination_unit_impl_unittest.cc
|
| +++ /dev/null
|
| @@ -1,196 +0,0 @@
|
| -// Copyright 2017 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 <memory>
|
| -#include <vector>
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/message_loop/message_loop.h"
|
| -#include "base/run_loop.h"
|
| -#include "services/resource_coordinator/coordination_unit/coordination_unit_provider_impl.h"
|
| -#include "services/service_manager/public/cpp/service_context_ref.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -namespace resource_coordinator {
|
| -
|
| -namespace {
|
| -
|
| -void OnLastServiceRefDestroyed() {
|
| - // No-op. This is required by service_manager::ServiceContextRefFactory
|
| - // construction but not needed for the tests.
|
| -}
|
| -
|
| -class CoordinationUnitImplTest : public testing::Test {
|
| - public:
|
| - CoordinationUnitImplTest()
|
| - : service_ref_factory_(base::Bind(&OnLastServiceRefDestroyed)),
|
| - provider_(&service_ref_factory_) {}
|
| - ~CoordinationUnitImplTest() override {}
|
| -
|
| - // testing::Test:
|
| - void TearDown() override { base::RunLoop().RunUntilIdle(); }
|
| -
|
| - protected:
|
| - CoordinationUnitProviderImpl* provider() { return &provider_; }
|
| -
|
| - private:
|
| - base::MessageLoop message_loop_;
|
| -
|
| - service_manager::ServiceContextRefFactory service_ref_factory_;
|
| - CoordinationUnitProviderImpl provider_;
|
| -};
|
| -
|
| -class TestCoordinationUnit : public mojom::CoordinationPolicyCallback {
|
| - public:
|
| - TestCoordinationUnit(CoordinationUnitProviderImpl* provider,
|
| - const CoordinationUnitType& type,
|
| - const std::string& id)
|
| - : binding_(this) {
|
| - CHECK(provider);
|
| -
|
| - CoordinationUnitID new_cu_id(type, id);
|
| - mojom::CoordinationUnitPtr coordination_unit;
|
| - provider->CreateCoordinationUnit(mojo::MakeRequest(&coordination_unit_),
|
| - new_cu_id);
|
| -
|
| - base::RunLoop callback;
|
| - SetGetIDClosure(callback.QuitClosure());
|
| - coordination_unit_->SetCoordinationPolicyCallback(GetPolicyCallback());
|
| - // Forces us to wait for the creation of the CUID to finish.
|
| - coordination_unit_->GetID(base::Bind(&TestCoordinationUnit::GetIDCallback,
|
| - base::Unretained(this)));
|
| -
|
| - callback.Run();
|
| - }
|
| -
|
| - void GetIDCallback(const CoordinationUnitID& cu_id) {
|
| - id_ = cu_id;
|
| - get_id_closure_.Run();
|
| - }
|
| -
|
| - void SetGetIDClosure(const base::Closure& get_id_closure) {
|
| - get_id_closure_ = get_id_closure;
|
| - }
|
| -
|
| - void SetPolicyClosure(const base::Closure& policy_closure) {
|
| - policy_update_closure_ = policy_closure;
|
| - }
|
| -
|
| - mojom::CoordinationPolicyCallbackPtr GetPolicyCallback() {
|
| - return binding_.CreateInterfacePtrAndBind();
|
| - }
|
| -
|
| - // The CU will always send policy updates on events (including parent events)
|
| - void ForcePolicyUpdates() {
|
| - base::RunLoop callback;
|
| - SetPolicyClosure(callback.QuitClosure());
|
| - mojom::EventPtr event = mojom::Event::New();
|
| - event->type = mojom::EventType::kTestEvent;
|
| - coordination_unit_->SendEvent(std::move(event));
|
| - callback.Run();
|
| - }
|
| -
|
| - const mojom::CoordinationUnitPtr& interface() const {
|
| - return coordination_unit_;
|
| - }
|
| -
|
| - const CoordinationUnitID& id() const { return id_; }
|
| -
|
| - // mojom::CoordinationPolicyCallback:
|
| - void SetCoordinationPolicy(
|
| - resource_coordinator::mojom::CoordinationPolicyPtr policy) override {
|
| - if (policy_update_closure_) {
|
| - policy_update_closure_.Run();
|
| - }
|
| - }
|
| -
|
| - private:
|
| - base::Closure policy_update_closure_;
|
| - base::Closure get_id_closure_;
|
| -
|
| - mojo::Binding<mojom::CoordinationPolicyCallback> binding_;
|
| - mojom::CoordinationUnitPtr coordination_unit_;
|
| - CoordinationUnitID id_;
|
| -};
|
| -
|
| -} // namespace
|
| -
|
| -TEST_F(CoordinationUnitImplTest, BasicPolicyCallback) {
|
| - TestCoordinationUnit test_coordination_unit(
|
| - provider(), CoordinationUnitType::kWebContents, "test_id");
|
| - test_coordination_unit.ForcePolicyUpdates();
|
| -}
|
| -
|
| -TEST_F(CoordinationUnitImplTest, AddChild) {
|
| - TestCoordinationUnit parent_unit(
|
| - provider(), CoordinationUnitType::kWebContents, "parent_unit");
|
| -
|
| - TestCoordinationUnit child_unit(
|
| - provider(), CoordinationUnitType::kWebContents, "child_unit");
|
| -
|
| - child_unit.ForcePolicyUpdates();
|
| - parent_unit.ForcePolicyUpdates();
|
| -
|
| - {
|
| - base::RunLoop callback;
|
| - child_unit.SetPolicyClosure(callback.QuitClosure());
|
| - parent_unit.interface()->AddChild(child_unit.id());
|
| - callback.Run();
|
| - }
|
| -
|
| - {
|
| - base::RunLoop parent_callback;
|
| - base::RunLoop child_callback;
|
| - parent_unit.SetPolicyClosure(parent_callback.QuitClosure());
|
| - child_unit.SetPolicyClosure(child_callback.QuitClosure());
|
| -
|
| - // This event should force the policy to recalculated for all children.
|
| - mojom::EventPtr event = mojom::Event::New();
|
| - event->type = mojom::EventType::kTestEvent;
|
| - parent_unit.interface()->SendEvent(std::move(event));
|
| -
|
| - parent_callback.Run();
|
| - child_callback.Run();
|
| - }
|
| -}
|
| -
|
| -TEST_F(CoordinationUnitImplTest, CyclicGraphUnits) {
|
| - TestCoordinationUnit parent_unit(
|
| - provider(), CoordinationUnitType::kWebContents, std::string());
|
| -
|
| - TestCoordinationUnit child_unit(
|
| - provider(), CoordinationUnitType::kWebContents, std::string());
|
| -
|
| - child_unit.ForcePolicyUpdates();
|
| - parent_unit.ForcePolicyUpdates();
|
| -
|
| - {
|
| - base::RunLoop callback;
|
| - child_unit.SetPolicyClosure(callback.QuitClosure());
|
| - parent_unit.interface()->AddChild(child_unit.id());
|
| - callback.Run();
|
| - }
|
| -
|
| - // This should fail, due to the existing child-parent relationship.
|
| - // Otherwise we end up with infinite recursion and crash when recalculating
|
| - // policies below.
|
| - child_unit.interface()->AddChild(parent_unit.id());
|
| -
|
| - {
|
| - base::RunLoop parent_callback;
|
| - base::RunLoop child_callback;
|
| - parent_unit.SetPolicyClosure(parent_callback.QuitClosure());
|
| - child_unit.SetPolicyClosure(child_callback.QuitClosure());
|
| -
|
| - // This event should force the policy to recalculated for all children.
|
| - mojom::EventPtr event = mojom::Event::New();
|
| - event->type = mojom::EventType::kTestEvent;
|
| - parent_unit.interface()->SendEvent(std::move(event));
|
| -
|
| - parent_callback.Run();
|
| - child_callback.Run();
|
| - }
|
| -}
|
| -
|
| -} // namespace resource_coordinator
|
|
|