| Index: content/common/host_discardable_shared_memory_manager_unittest.cc
|
| diff --git a/content/common/host_discardable_shared_memory_manager_unittest.cc b/content/common/host_discardable_shared_memory_manager_unittest.cc
|
| index 8f09ef05f12962437fa59f091077a8df1eded31d..3adbc72aca1f564f00674a4c107deba3c941aacf 100644
|
| --- a/content/common/host_discardable_shared_memory_manager_unittest.cc
|
| +++ b/content/common/host_discardable_shared_memory_manager_unittest.cc
|
| @@ -4,6 +4,7 @@
|
|
|
| #include "content/common/host_discardable_shared_memory_manager.h"
|
|
|
| +#include "base/threading/simple_thread.h"
|
| #include "content/public/common/child_process_host.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| @@ -232,5 +233,50 @@ TEST_F(HostDiscardableSharedMemoryManagerTest,
|
| memory2.Unlock(0, 0);
|
| }
|
|
|
| +class HostDiscardableSharedMemoryManagerScheduleEnforceMemoryPolicyTest
|
| + : public testing::Test {
|
| + protected:
|
| + // Overridden from testing::Test:
|
| + void SetUp() override {
|
| + manager_.reset(new HostDiscardableSharedMemoryManager);
|
| + }
|
| +
|
| + // This test requires a message loop.
|
| + base::MessageLoop message_loop_;
|
| + scoped_ptr<HostDiscardableSharedMemoryManager> manager_;
|
| +};
|
| +
|
| +class SetMemoryLimitRunner : public base::DelegateSimpleThread::Delegate {
|
| + public:
|
| + SetMemoryLimitRunner(HostDiscardableSharedMemoryManager* manager,
|
| + size_t limit)
|
| + : manager_(manager), limit_(limit) {}
|
| + ~SetMemoryLimitRunner() override {}
|
| +
|
| + void Run() override { manager_->SetMemoryLimit(limit_); }
|
| +
|
| + private:
|
| + HostDiscardableSharedMemoryManager* const manager_;
|
| + const size_t limit_;
|
| +};
|
| +
|
| +TEST_F(HostDiscardableSharedMemoryManagerScheduleEnforceMemoryPolicyTest,
|
| + SetMemoryLimitOnSimpleThread) {
|
| + const int kDataSize = 1024;
|
| +
|
| + base::SharedMemoryHandle shared_handle;
|
| + manager_->AllocateLockedDiscardableSharedMemoryForChild(
|
| + base::GetCurrentProcessHandle(), ChildProcessHost::kInvalidUniqueID,
|
| + kDataSize, 0, &shared_handle);
|
| + ASSERT_TRUE(base::SharedMemory::IsHandleValid(shared_handle));
|
| +
|
| + // Set the memory limit to a value that will require EnforceMemoryPolicy()
|
| + // to be schedule on a thread without a message loop.
|
| + SetMemoryLimitRunner runner(manager_.get(), kDataSize - 1);
|
| + base::DelegateSimpleThread thread(&runner, "memory_limit_setter");
|
| + thread.Start();
|
| + thread.Join();
|
| +}
|
| +
|
| } // namespace
|
| } // namespace content
|
|
|