// 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_
