// Copyright 2015 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 "content/browser/wake_lock/wake_lock_service_context.h" #include "base/memory/scoped_ptr.h" #include "base/process/kill.h" #include "content/browser/web_contents/web_contents_impl.h" #include "content/public/browser/render_frame_host.h" #include "content/public/browser/render_process_host.h" #include "content/public/browser/web_contents.h" #include "content/public/test/test_renderer_host.h" namespace content { class RenderFrameHost; class WakeLockServiceContextTest : public RenderViewHostTestHarness { protected: void RequestWakeLock(RenderFrameHost* rfh) { GetWakeLockServiceContext()->RequestWakeLock(rfh->GetProcess()->GetID(), rfh->GetRoutingID()); } void CancelWakeLock(RenderFrameHost* rfh) { GetWakeLockServiceContext()->CancelWakeLock(rfh->GetProcess()->GetID(), rfh->GetRoutingID()); } WakeLockServiceContext* GetWakeLockServiceContext() { WebContentsImpl* web_contents_impl = static_cast(web_contents()); return web_contents_impl->GetWakeLockServiceContext(); } bool HasWakeLock() { return GetWakeLockServiceContext()->HasWakeLockForTests(); } }; TEST_F(WakeLockServiceContextTest, NoLockInitially) { EXPECT_FALSE(HasWakeLock()); } TEST_F(WakeLockServiceContextTest, LockUnlock) { ASSERT_TRUE(GetWakeLockServiceContext()); ASSERT_TRUE(web_contents()); ASSERT_TRUE(main_rfh()); // Request wake lock for main frame. RequestWakeLock(main_rfh()); // Should set the blocker. EXPECT_TRUE(HasWakeLock()); // Remove wake lock request for main frame. CancelWakeLock(main_rfh()); // Should remove the blocker. EXPECT_FALSE(HasWakeLock()); } TEST_F(WakeLockServiceContextTest, RenderFrameDeleted) { ASSERT_TRUE(GetWakeLockServiceContext()); ASSERT_TRUE(web_contents()); ASSERT_TRUE(main_rfh()); // Request wake lock for main frame. RequestWakeLock(main_rfh()); // Should set the blocker. EXPECT_TRUE(HasWakeLock()); // Simulate render frame deletion. GetWakeLockServiceContext()->RenderFrameDeleted(main_rfh()); // Should remove the blocker. EXPECT_FALSE(HasWakeLock()); } TEST_F(WakeLockServiceContextTest, NoLockForBogusFrameId) { ASSERT_TRUE(GetWakeLockServiceContext()); ASSERT_TRUE(web_contents()); // Request wake lock for non-existent render frame id. int non_existent_render_frame_id = main_rfh()->GetProcess()->GetNextRoutingID(); GetWakeLockServiceContext()->RequestWakeLock( main_rfh()->GetProcess()->GetID(), non_existent_render_frame_id); // Should not set the blocker. EXPECT_FALSE(HasWakeLock()); } } // namespace content