| Index: chrome/browser/chromeos/power/renderer_freezer.cc
|
| diff --git a/chrome/browser/chromeos/power/renderer_freezer.cc b/chrome/browser/chromeos/power/renderer_freezer.cc
|
| index 6116f51df273e7324c4690538cfb90c3addb8d44..7749843daab6ee61d28030a6302c0fb08cb1d68e 100644
|
| --- a/chrome/browser/chromeos/power/renderer_freezer.cc
|
| +++ b/chrome/browser/chromeos/power/renderer_freezer.cc
|
| @@ -23,14 +23,21 @@ const char kThawCommand[] = "THAWED";
|
| } // namespace
|
|
|
| void RendererFreezer::SuspendImminent() {
|
| + // SuspendImminent() might end up being called multiple times before we run
|
| + // OnReadyToSuspend() (crbug.com/414396). In case a callback is already
|
| + // pending, we only store the new callback and do nothing else.
|
| + if (suspend_readiness_callback_.is_null()) {
|
| + // There is no callback pending so post the task.
|
| + base::MessageLoop::current()->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(&RendererFreezer::OnReadyToSuspend,
|
| + weak_factory_.GetWeakPtr()));
|
| + }
|
| +
|
| + // Always update the callback because only the most recent one matters.
|
| suspend_readiness_callback_ = DBusThreadManager::Get()
|
| ->GetPowerManagerClient()
|
| ->GetSuspendReadinessCallback();
|
| -
|
| - base::MessageLoop::current()->PostTask(
|
| - FROM_HERE,
|
| - base::Bind(&RendererFreezer::OnReadyToSuspend,
|
| - weak_factory_.GetWeakPtr()));
|
| }
|
|
|
| void RendererFreezer::SuspendDone(const base::TimeDelta& sleep_duration) {
|
| @@ -56,7 +63,7 @@ void RendererFreezer::OnReadyToSuspend() {
|
| frozen_ = true;
|
| }
|
|
|
| - DCHECK(!suspend_readiness_callback_.is_null());
|
| + CHECK(!suspend_readiness_callback_.is_null()); // crbug.com/414396
|
| suspend_readiness_callback_.Run();
|
| suspend_readiness_callback_.Reset();
|
| }
|
|
|