11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved. 21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be 31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file. 41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/chromeos/power/renderer_freezer.h" 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include <string> 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/message_loop/message_loop.h" 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/run_loop.h" 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chromeos/dbus/dbus_thread_manager.h" 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chromeos/dbus/fake_power_manager_client.h" 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "testing/gtest/include/gtest/gtest-death-test.h" 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "testing/gtest/include/gtest/gtest.h" 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace chromeos { 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace { 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Class that delegates used in testing can inherit from to record calls that 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// are made by the code being tested. 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass ActionRecorder { 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public: 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ActionRecorder() {} 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual ~ActionRecorder() {} 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Returns a comma-separated string describing the actions that were 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // requested since the previous call to GetActions() (i.e. results are 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // non-repeatable). 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string GetActions() { 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string actions = actions_; 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci actions_.clear(); 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return actions; 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci protected: 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Appends |new_action| to |actions_|, using a comma as a separator if 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // other actions are already listed. 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void AppendAction(const std::string& new_action) { 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!actions_.empty()) 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci actions_ += ","; 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci actions_ += new_action; 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private: 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Comma-separated list of actions that have been performed. 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string actions_; 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DISALLOW_COPY_AND_ASSIGN(ActionRecorder); 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}; 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Actions that can be returned by TestDelegate::GetActions(). 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char kFreezeRenderers[] = "freeze_renderers"; 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char kThawRenderers[] = "thaw_renderers"; 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char kNoActions[] = ""; 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Test implementation of RendererFreezer::Delegate that records the actions it 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// was asked to perform. 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass TestDelegate : public RendererFreezer::Delegate, public ActionRecorder { 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public: 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci TestDelegate() 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci : can_freeze_renderers_(true), 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci freeze_renderers_result_(true), 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci thaw_renderers_result_(true) {} 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual ~TestDelegate() {} 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // RendererFreezer::Delegate overrides. 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual bool FreezeRenderers() OVERRIDE { 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AppendAction(kFreezeRenderers); 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return freeze_renderers_result_; 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual bool ThawRenderers() OVERRIDE { 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AppendAction(kThawRenderers); 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return thaw_renderers_result_; 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual bool CanFreezeRenderers() OVERRIDE { return can_freeze_renderers_; } 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void set_freeze_renderers_result(bool result) { 811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci freeze_renderers_result_ = result; 821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void set_thaw_renderers_result(bool result) { 851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci thaw_renderers_result_ = result; 861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Sets whether the delegate is capable of freezing renderers. This also 891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // changes |freeze_renderers_result_| and |thaw_renderers_result_|. 901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void set_can_freeze_renderers(bool can_freeze) { 911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci can_freeze_renderers_ = can_freeze; 921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // If the delegate cannot freeze renderers, then the result of trying to do 941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // so will be false. 951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci freeze_renderers_result_ = can_freeze; 961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci thaw_renderers_result_ = can_freeze; 971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private: 1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool can_freeze_renderers_; 1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool freeze_renderers_result_; 1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool thaw_renderers_result_; 1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DISALLOW_COPY_AND_ASSIGN(TestDelegate); 1051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}; 1061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // namespace 1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass RendererFreezerTest : public testing::Test { 1101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public: 1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci RendererFreezerTest() 1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci : power_manager_client_(new FakePowerManagerClient()), 1131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci test_delegate_(new TestDelegate()) { 1141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DBusThreadManager::GetSetterForTesting()->SetPowerManagerClient( 1151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<PowerManagerClient>(power_manager_client_)); 1161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual ~RendererFreezerTest() { 1191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci renderer_freezer_.reset(); 1201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DBusThreadManager::Shutdown(); 1221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void Init() { 1251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci renderer_freezer_.reset(new RendererFreezer( 1261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<RendererFreezer::Delegate>(test_delegate_))); 1271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci protected: 1301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci FakePowerManagerClient* power_manager_client_; 1311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci TestDelegate* test_delegate_; 1321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<RendererFreezer> renderer_freezer_; 1341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private: 1361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::MessageLoop message_loop_; 1371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DISALLOW_COPY_AND_ASSIGN(RendererFreezerTest); 1381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}; 1391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Tests that the RendererFreezer freezes renderers on suspend and thaws them on 1411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// resume. 1421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(RendererFreezerTest, SuspendResume) { 1431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Init(); 1441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci power_manager_client_->SendSuspendImminent(); 1461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // The RendererFreezer should have grabbed an asynchronous callback and done 1481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // nothing else. 1491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, power_manager_client_->GetNumPendingSuspendReadinessCallbacks()); 1501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(kNoActions, test_delegate_->GetActions()); 1511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // The RendererFreezer should eventually freeze the renderers and run the 1531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // callback. 1541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::RunLoop().RunUntilIdle(); 1551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, power_manager_client_->GetNumPendingSuspendReadinessCallbacks()); 1561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(kFreezeRenderers, test_delegate_->GetActions()); 1571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // The renderers should be thawed when we resume. 1591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci power_manager_client_->SendSuspendDone(); 1601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(kThawRenderers, test_delegate_->GetActions()); 1611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Tests that the RendereFreezer doesn't freeze renderers if the suspend attempt 1641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// was canceled before it had a chance to complete. 1651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(RendererFreezerTest, SuspendCanceled) { 1661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Init(); 1671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // We shouldn't do anything yet. 1691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci power_manager_client_->SendSuspendImminent(); 1701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(kNoActions, test_delegate_->GetActions()); 1711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // If a suspend gets canceled for any reason, we should see a SuspendDone(). 1731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci power_manager_client_->SendSuspendDone(); 1741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // We shouldn't try to freeze the renderers now. 1761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::RunLoop().RunUntilIdle(); 1771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(kNoActions, test_delegate_->GetActions()); 1781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Tests that the renderer freezer does nothing if the delegate cannot freeze 1811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// renderers. 1821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(RendererFreezerTest, DelegateCannotFreezeRenderers) { 1831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci test_delegate_->set_can_freeze_renderers(false); 1841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Init(); 1851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci power_manager_client_->SendSuspendImminent(); 1871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // The RendererFreezer should not have grabbed a callback or done anything 1891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // else. 1901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, power_manager_client_->GetNumPendingSuspendReadinessCallbacks()); 1911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(kNoActions, test_delegate_->GetActions()); 1921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // There should be nothing in the message loop. 1941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::RunLoop().RunUntilIdle(); 1951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(kNoActions, test_delegate_->GetActions()); 1961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Nothing happens on resume. 1981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci power_manager_client_->SendSuspendDone(); 1991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(kNoActions, test_delegate_->GetActions()); 2001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 2011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Tests that the RendererFreezer does nothing on resume if the freezing 2031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// operation was unsuccessful. 2041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(RendererFreezerTest, ErrorFreezingRenderers) { 2051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Init(); 2061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci test_delegate_->set_freeze_renderers_result(false); 2071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci power_manager_client_->SendSuspendImminent(); 2091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, power_manager_client_->GetNumPendingSuspendReadinessCallbacks()); 2101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // The freezing operation should fail, but we should still report readiness. 2121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::RunLoop().RunUntilIdle(); 2131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(kFreezeRenderers, test_delegate_->GetActions()); 2141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, power_manager_client_->GetNumPendingSuspendReadinessCallbacks()); 2151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Since the delegate reported that the freezing was unsuccessful, don't do 2171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // anything on resume. 2181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci power_manager_client_->SendSuspendDone(); 2191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(kNoActions, test_delegate_->GetActions()); 2201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 2211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(GTEST_HAS_DEATH_TEST) 2231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Tests that the RendererFreezer crashes the browser if the freezing operation 2241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// was successful but the thawing operation failed. 2251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(RendererFreezerTest, ErrorThawingRenderers) { 2261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Init(); 2271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci test_delegate_->set_thaw_renderers_result(false); 2281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci power_manager_client_->SendSuspendImminent(); 2301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::RunLoop().RunUntilIdle(); 2311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(kFreezeRenderers, test_delegate_->GetActions()); 2321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_DEATH(power_manager_client_->SendSuspendDone(), "Unable to thaw"); 2341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 2351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif // GTEST_HAS_DEATH_TEST 2361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // namespace chromeos 238