| Index: components/memory_coordinator/child/child_memory_coordinator_impl_unittest.cc
 | 
| diff --git a/components/memory_coordinator/child/child_memory_coordinator_impl_unittest.cc b/components/memory_coordinator/child/child_memory_coordinator_impl_unittest.cc
 | 
| deleted file mode 100644
 | 
| index d6b8bd116d7a7ffbea5fb738e2fe0d22399ad4ca..0000000000000000000000000000000000000000
 | 
| --- a/components/memory_coordinator/child/child_memory_coordinator_impl_unittest.cc
 | 
| +++ /dev/null
 | 
| @@ -1,188 +0,0 @@
 | 
| -// 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 "components/memory_coordinator/child/child_memory_coordinator_impl.h"
 | 
| -
 | 
| -#if defined(OS_ANDROID)
 | 
| -#include "components/memory_coordinator/child/child_memory_coordinator_impl_android.h"
 | 
| -#endif  // defined(OS_ANDROID)
 | 
| -
 | 
| -#include <memory>
 | 
| -
 | 
| -#include "base/memory/memory_coordinator_client_registry.h"
 | 
| -#include "base/message_loop/message_loop.h"
 | 
| -#include "base/run_loop.h"
 | 
| -#include "base/threading/thread.h"
 | 
| -#include "testing/gtest/include/gtest/gtest.h"
 | 
| -
 | 
| -namespace memory_coordinator {
 | 
| -
 | 
| -class MockMemoryCoordinatorHandle : public mojom::MemoryCoordinatorHandle {
 | 
| - public:
 | 
| -  MockMemoryCoordinatorHandle() : binding_(this) {}
 | 
| -
 | 
| -  void AddChild(mojom::ChildMemoryCoordinatorPtr child) override {
 | 
| -    child_ = std::move(child);
 | 
| -  }
 | 
| -
 | 
| -  mojom::MemoryCoordinatorHandlePtr Bind() {
 | 
| -    DCHECK(!binding_.is_bound());
 | 
| -    return binding_.CreateInterfacePtrAndBind();
 | 
| -  }
 | 
| -
 | 
| -  mojom::ChildMemoryCoordinatorPtr& child() { return child_; }
 | 
| -
 | 
| - private:
 | 
| -  mojo::Binding<mojom::MemoryCoordinatorHandle> binding_;
 | 
| -  mojom::ChildMemoryCoordinatorPtr child_ = nullptr;
 | 
| -};
 | 
| -
 | 
| -class ChildMemoryCoordinatorImplTest : public testing::Test,
 | 
| -                                       public ChildMemoryCoordinatorDelegate {
 | 
| - public:
 | 
| -  ChildMemoryCoordinatorImplTest()
 | 
| -      : message_loop_(new base::MessageLoop) {
 | 
| -    auto parent = coordinator_handle_.Bind();
 | 
| -    coordinator_impl_ = CreateChildMemoryCoordinator(std::move(parent), this);
 | 
| -    // Needs to run loop to initalize mojo pointers including |child_| in
 | 
| -    // MockMemoryCoordinatorHandle.
 | 
| -    base::RunLoop loop;
 | 
| -    loop.RunUntilIdle();
 | 
| -  }
 | 
| -
 | 
| -  void RegisterClient(base::MemoryCoordinatorClient* client) {
 | 
| -    base::MemoryCoordinatorClientRegistry::GetInstance()->Register(client);
 | 
| -  }
 | 
| -
 | 
| -  void UnregisterClient(base::MemoryCoordinatorClient* client) {
 | 
| -    base::MemoryCoordinatorClientRegistry::GetInstance()->Unregister(client);
 | 
| -  }
 | 
| -
 | 
| -  mojom::ChildMemoryCoordinatorPtr& coordinator() {
 | 
| -    return coordinator_handle_.child();
 | 
| -  }
 | 
| -
 | 
| -  ChildMemoryCoordinatorImpl& coordinator_impl() {
 | 
| -    return *coordinator_impl_.get();
 | 
| -  }
 | 
| -
 | 
| -  void ChangeState(mojom::MemoryState state) {
 | 
| -    base::RunLoop loop;
 | 
| -    coordinator()->OnStateChange(state);
 | 
| -    loop.RunUntilIdle();
 | 
| -  }
 | 
| -
 | 
| -  // ChildMemoryCoordinatorDelegate implementation:
 | 
| -  void OnTrimMemoryImmediately() override {
 | 
| -    on_trim_memory_called_ = true;
 | 
| -  }
 | 
| -
 | 
| - protected:
 | 
| -  bool on_trim_memory_called_ = false;
 | 
| -
 | 
| - private:
 | 
| -  std::unique_ptr<base::MessageLoop> message_loop_;
 | 
| -  MockMemoryCoordinatorHandle coordinator_handle_;
 | 
| -  std::unique_ptr<ChildMemoryCoordinatorImpl> coordinator_impl_;
 | 
| -
 | 
| -  DISALLOW_COPY_AND_ASSIGN(ChildMemoryCoordinatorImplTest);
 | 
| -};
 | 
| -
 | 
| -namespace {
 | 
| -
 | 
| -class MockMemoryCoordinatorClient final : public base::MemoryCoordinatorClient {
 | 
| -public:
 | 
| -  void OnMemoryStateChange(base::MemoryState state) override {
 | 
| -    last_state_ = state;
 | 
| -  }
 | 
| -
 | 
| -  base::MemoryState last_state() const { return last_state_; }
 | 
| -
 | 
| - private:
 | 
| -  base::MemoryState last_state_ = base::MemoryState::UNKNOWN;
 | 
| -};
 | 
| -
 | 
| -class MemoryCoordinatorTestThread : public base::Thread,
 | 
| -                                    public base::MemoryCoordinatorClient {
 | 
| - public:
 | 
| -  MemoryCoordinatorTestThread(
 | 
| -      const std::string& name)
 | 
| -      : Thread(name) {}
 | 
| -  ~MemoryCoordinatorTestThread() override { Stop(); }
 | 
| -
 | 
| -  void Init() override {
 | 
| -    base::MemoryCoordinatorClientRegistry::GetInstance()->Register(this);
 | 
| -  }
 | 
| -
 | 
| -  void OnMemoryStateChange(base::MemoryState state) override {
 | 
| -    EXPECT_EQ(message_loop(), base::MessageLoop::current());
 | 
| -    last_state_ = state;
 | 
| -  }
 | 
| -
 | 
| -  void CheckLastState(base::MemoryState state) {
 | 
| -    task_runner()->PostTask(
 | 
| -        FROM_HERE,
 | 
| -        base::Bind(&MemoryCoordinatorTestThread::CheckLastStateInternal,
 | 
| -                   base::Unretained(this), state));
 | 
| -  }
 | 
| -
 | 
| - private:
 | 
| -  void CheckLastStateInternal(base::MemoryState state) {
 | 
| -    base::RunLoop loop;
 | 
| -    loop.RunUntilIdle();
 | 
| -    EXPECT_EQ(state, last_state_);
 | 
| -  }
 | 
| -
 | 
| -  base::MemoryState last_state_ = base::MemoryState::UNKNOWN;
 | 
| -};
 | 
| -
 | 
| -TEST_F(ChildMemoryCoordinatorImplTest, SingleClient) {
 | 
| -  MockMemoryCoordinatorClient client;
 | 
| -  RegisterClient(&client);
 | 
| -
 | 
| -  ChangeState(mojom::MemoryState::THROTTLED);
 | 
| -  EXPECT_EQ(base::MemoryState::THROTTLED, client.last_state());
 | 
| -
 | 
| -  ChangeState(mojom::MemoryState::NORMAL);
 | 
| -  EXPECT_EQ(base::MemoryState::NORMAL, client.last_state());
 | 
| -
 | 
| -  UnregisterClient(&client);
 | 
| -  ChangeState(mojom::MemoryState::THROTTLED);
 | 
| -  EXPECT_TRUE(base::MemoryState::THROTTLED != client.last_state());
 | 
| -}
 | 
| -
 | 
| -TEST_F(ChildMemoryCoordinatorImplTest, MultipleClients) {
 | 
| -  MemoryCoordinatorTestThread t1("thread 1");
 | 
| -  MemoryCoordinatorTestThread t2("thread 2");
 | 
| -
 | 
| -  t1.StartAndWaitForTesting();
 | 
| -  t2.StartAndWaitForTesting();
 | 
| -
 | 
| -  ChangeState(mojom::MemoryState::THROTTLED);
 | 
| -  t1.CheckLastState(base::MemoryState::THROTTLED);
 | 
| -  t2.CheckLastState(base::MemoryState::THROTTLED);
 | 
| -
 | 
| -  ChangeState(mojom::MemoryState::NORMAL);
 | 
| -  t1.CheckLastState(base::MemoryState::NORMAL);
 | 
| -  t2.CheckLastState(base::MemoryState::NORMAL);
 | 
| -
 | 
| -  t1.Stop();
 | 
| -  t2.Stop();
 | 
| -}
 | 
| -
 | 
| -#if defined(OS_ANDROID)
 | 
| -TEST_F(ChildMemoryCoordinatorImplTest, OnTrimMemoryImmediately) {
 | 
| -  // TRIM_MEMORY_COMPLETE defined in ComponentCallbacks2.
 | 
| -  static const int kTrimMemoryComplete = 80;
 | 
| -
 | 
| -  ChildMemoryCoordinatorImplAndroid& coordinator_android =
 | 
| -      static_cast<ChildMemoryCoordinatorImplAndroid&>(coordinator_impl());
 | 
| -  coordinator_android.OnTrimMemory(kTrimMemoryComplete);
 | 
| -  EXPECT_EQ(true, on_trim_memory_called_);
 | 
| -}
 | 
| -#endif  // defined(OS_ANDROID)
 | 
| -
 | 
| -}  // namespace
 | 
| -
 | 
| -}  // namespace memory_coordinator
 | 
| 
 |