Chromium Code Reviews| Index: content/browser/memory/memory_coordinator_impl_browsertest.cc |
| diff --git a/content/browser/memory/memory_coordinator_impl_browsertest.cc b/content/browser/memory/memory_coordinator_impl_browsertest.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..b4e291556218770a9a6926edfb8d8b066f2e5563 |
| --- /dev/null |
| +++ b/content/browser/memory/memory_coordinator_impl_browsertest.cc |
| @@ -0,0 +1,84 @@ |
| +// 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/run_loop.h" |
| +#include "components/memory_coordinator/browser/memory_coordinator_impl.h" |
| +#include "components/memory_coordinator/common/memory_coordinator_features.h" |
| +#include "content/browser/browser_main_loop.h" |
| +#include "content/public/common/content_switches.h" |
| +#include "content/public/test/content_browser_test.h" |
| +#include "content/public/test/content_browser_test_utils.h" |
| + |
| +namespace content { |
| + |
| +class MemoryCoordinatorImplTest : public ContentBrowserTest { |
| + public: |
| + MemoryCoordinatorImplTest() {} |
| + |
| + void SetUp() override { |
| + memory_coordinator::EnableForTesting(); |
| + ContentBrowserTest::SetUp(); |
| + } |
| + |
| + void NotifyState(memory_coordinator::mojom::MemoryState state) { |
| + memory_coordinator()->IterateChildren( |
| + [&state](memory_coordinator::mojom::ChildMemoryCoordinator* child) { |
|
chrisha
2016/07/07 02:53:44
Capturing state by ref here, and by value below? B
bashi
2016/07/07 03:25:22
(seems forgot to remove &) Changed to by value.
|
| + child->OnStateChange(state); |
| + }); |
| + } |
| + |
| + protected: |
| + memory_coordinator::MemoryCoordinatorImpl* memory_coordinator() { |
| + return BrowserMainLoop::GetInstance()->memory_coordinator(); |
| + } |
| + |
| + DISALLOW_COPY_AND_ASSIGN(MemoryCoordinatorImplTest); |
| +}; |
| + |
| +class LastStateChecker { |
| + public: |
| + explicit LastStateChecker( |
| + memory_coordinator::MemoryCoordinatorImpl* coordinator) |
| + : coordinator_(coordinator) {} |
| + ~LastStateChecker() {} |
| + |
| + void Check(memory_coordinator::mojom::MemoryState expected) { |
| + DCHECK(coordinator_); |
| + coordinator_->IterateChildren([this, expected]( |
| + memory_coordinator::mojom::ChildMemoryCoordinator* child) { |
| + ++num_children_; |
| + child->GetCurrentState( |
|
chrisha
2016/07/07 02:53:44
GetCurrentState is only used for testing, no? Mayb
bashi
2016/07/07 03:25:22
Renamed.
|
| + base::Bind(&LastStateChecker::CheckLastStateForChild, |
| + base::Unretained(this), expected)); |
| + }); |
| + run_loop_.Run(); |
| + } |
| + |
| + private: |
| + void CheckLastStateForChild(memory_coordinator::mojom::MemoryState expected, |
| + memory_coordinator::mojom::MemoryState actual) { |
| + EXPECT_EQ(expected, actual); |
| + if (--num_children_ == 0) { |
| + run_loop_.QuitWhenIdle(); |
| + } |
| + } |
| + |
| + memory_coordinator::MemoryCoordinatorImpl* coordinator_ = nullptr; |
| + base::RunLoop run_loop_; |
| + size_t num_children_ = 0; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(LastStateChecker); |
| +}; |
| + |
| + |
| +IN_PROC_BROWSER_TEST_F(MemoryCoordinatorImplTest, Throttled) { |
| + GURL url = GetTestUrl("", "simple_page.html"); |
| + NavigateToURL(shell(), url); |
| + NotifyState(memory_coordinator::mojom::MemoryState::THROTTLED); |
| + |
| + LastStateChecker checker(memory_coordinator()); |
| + checker.Check(memory_coordinator::mojom::MemoryState::THROTTLED); |
| +} |
| + |
| +} // namespace content |