// Copyright 2013 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. #ifndef CHROME_BROWSER_LIFETIME_BROWSER_CLOSE_MANAGER_H_ #define CHROME_BROWSER_LIFETIME_BROWSER_CLOSE_MANAGER_H_ #include "base/callback_forward.h" #include "base/memory/ref_counted.h" class Browser; // Manages confirming that browser windows are closeable and closing them at // shutdown. class BrowserCloseManager : public base::RefCounted<BrowserCloseManager> { public: BrowserCloseManager(); // Starts closing all browser windows. void StartClosingBrowsers(); protected: friend class base::RefCounted<BrowserCloseManager>; virtual ~BrowserCloseManager(); virtual void ConfirmCloseWithPendingDownloads( int download_count, const base::Callback<void(bool)>& callback); private: // Notifies all browser windows that the close is cancelled. void CancelBrowserClose(); // Checks whether all browser windows are ready to close and closes them if // they are. void TryToCloseBrowsers(); // Called to report whether a beforeunload dialog was accepted. void OnBrowserReportCloseable(bool proceed); // Closes all browser windows. void CloseBrowsers(); // Checks whether there are any downloads in-progress and prompts the user to // cancel them. If there are no downloads or the user accepts the cancel // downloads dialog, CloseBrowsers is called to continue with the shutdown. // Otherwise, if the user declines to cancel downloads, the shutdown is // aborted and the downloads page is shown for each profile with in-progress // downloads. void CheckForDownloadsInProgress(); // Called to report whether downloads may be cancelled during shutdown. void OnReportDownloadsCancellable(bool proceed); // The browser for which we are waiting for a callback to // OnBrowserReportCloseable. Browser* current_browser_; DISALLOW_COPY_AND_ASSIGN(BrowserCloseManager); }; #endif // CHROME_BROWSER_LIFETIME_BROWSER_CLOSE_MANAGER_H_