1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CHROME_BROWSER_CHROMEOS_POWER_RENDERER_FREEZER_H_ 6#define CHROME_BROWSER_CHROMEOS_POWER_RENDERER_FREEZER_H_ 7 8#include "base/callback.h" 9#include "base/cancelable_callback.h" 10#include "base/macros.h" 11#include "base/memory/scoped_ptr.h" 12#include "base/memory/weak_ptr.h" 13#include "base/time/time.h" 14#include "chromeos/chromeos_export.h" 15#include "chromeos/dbus/power_manager_client.h" 16 17namespace chromeos { 18 19// Freezes the chrome renderers when the system is about to suspend and thaws 20// them after the system fully resumes. This class registers itself as a 21// PowerManagerClient::Observer on creation and unregisters itself on 22// destruction. 23class CHROMEOS_EXPORT RendererFreezer : public PowerManagerClient::Observer { 24 public: 25 class Delegate { 26 public: 27 virtual ~Delegate() {} 28 29 // Freezes the chrome renderers. Returns true if the operation was 30 // successful. 31 virtual bool FreezeRenderers() = 0; 32 33 // Thaws the chrome renderers. Returns true if the operation was 34 // successful. 35 virtual bool ThawRenderers() = 0; 36 37 // Returns true iff the delegate is capable of freezing renderers. 38 virtual bool CanFreezeRenderers() = 0; 39 }; 40 41 explicit RendererFreezer(scoped_ptr<Delegate> delegate); 42 virtual ~RendererFreezer(); 43 44 // PowerManagerClient::Observer implementation 45 virtual void SuspendImminent() OVERRIDE; 46 virtual void SuspendDone(const base::TimeDelta& sleep_duration) OVERRIDE; 47 48 private: 49 // Called when all asynchronous work is complete and renderers can be frozen. 50 void OnReadyToSuspend(const base::Closure& power_manager_callback); 51 52 // Used to ensure that renderers do not get frozen if the suspend is canceled. 53 base::CancelableClosure suspend_readiness_callback_; 54 55 bool frozen_; 56 57 scoped_ptr<Delegate> delegate_; 58 59 base::WeakPtrFactory<RendererFreezer> weak_factory_; 60 61 DISALLOW_COPY_AND_ASSIGN(RendererFreezer); 62}; 63 64} // namespace chromeos 65 66#endif // CHROME_BROWSER_CHROMEOS_POWER_RENDERER_FREEZER_H_ 67