// Copyright (c) 2009 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 "chrome/browser/power_save_blocker.h" #include "content/browser/browser_thread.h" // Accessed only from the UI thread. int PowerSaveBlocker::blocker_count_ = 0; PowerSaveBlocker::PowerSaveBlocker(bool enable) : enabled_(false) { if (enable) Enable(); } PowerSaveBlocker::~PowerSaveBlocker(void) { Disable(); } void PowerSaveBlocker::Enable() { if (enabled_) return; enabled_ = true; PostAdjustBlockCount(1); } void PowerSaveBlocker::Disable() { if (!enabled_) return; enabled_ = false; PostAdjustBlockCount(-1); } void PowerSaveBlocker::PostAdjustBlockCount(int delta) { BrowserThread::PostTask( BrowserThread::UI, FROM_HERE, NewRunnableFunction(&PowerSaveBlocker::AdjustBlockCount, delta)); } // Called only from UI thread. void PowerSaveBlocker::AdjustBlockCount(int delta) { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); bool was_blocking = (blocker_count_ != 0); blocker_count_ += delta; bool is_blocking = (blocker_count_ != 0); DCHECK_GE(blocker_count_, 0); if (is_blocking != was_blocking) ApplyBlock(is_blocking); }