// Copyright 2016 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_BACKGROUND_BACKGROUND_MODE_OPTIMIZER_H_
#define CHROME_BROWSER_BACKGROUND_BACKGROUND_MODE_OPTIMIZER_H_

#include <memory>

#include "base/macros.h"
#include "base/time/time.h"
#include "chrome/browser/lifetime/keep_alive_state_observer.h"
#include "chrome/browser/ui/browser_list_observer.h"

class Browser;

// BackgroundModeOptimizer is responsible for applying some optimizations to
// save resources (memory) when Chrome runs in background-only mode.
// It tries to restart the browser to release accumulated memory when it
// is considered non distruptive.
class BackgroundModeOptimizer : public KeepAliveStateObserver,
                                chrome::BrowserListObserver {
 public:
  ~BackgroundModeOptimizer() override;

  // Creates a new BackgroundModeOptimizer. Can return null if optimizations
  // are not supported.
  static std::unique_ptr<BackgroundModeOptimizer> Create();

  // KeepAliveStateObserver implementation
  void OnKeepAliveStateChanged(bool is_keeping_alive) override;
  void OnKeepAliveRestartStateChanged(bool can_restart) override;

  // chrome::BrowserListObserver implementation.
  void OnBrowserAdded(Browser* browser) override;

 private:
  friend class DummyBackgroundModeOptimizer;

  BackgroundModeOptimizer();

  // Calls DoRestart() if the current state of the process allows it.
  void TryBrowserRestart();

  // Stop the browser and restart it in background mode.
  // Virtual for testing purposes.
  virtual void DoRestart();

  // Used for a histogram that records the duration of a session before
  // browser got restarted into background mode.
  base::TimeTicks creation_time_;

  bool browser_was_added_;

  DISALLOW_COPY_AND_ASSIGN(BackgroundModeOptimizer);
};

#endif  // CHROME_BROWSER_BACKGROUND_BACKGROUND_MODE_OPTIMIZER_H_
