// Copyright 2020 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 WEBLAYER_PUBLIC_BROWSER_H_
#define WEBLAYER_PUBLIC_BROWSER_H_

#include <stddef.h>

#include <memory>
#include <string>
#include <vector>

namespace weblayer {

class BrowserObserver;
class BrowserRestoreObserver;
class Profile;
class Tab;

// Represents an ordered list of Tabs, with one active. Browser does not own
// the set of Tabs.
class Browser {
 public:
  struct PersistenceInfo {
    PersistenceInfo();
    PersistenceInfo(const PersistenceInfo& other);
    ~PersistenceInfo();

    // Uniquely identifies this browser for session restore, empty is not a
    // valid id.
    std::string id;

    // Last key used to encrypt incognito profile.
    std::vector<uint8_t> last_crypto_key;

    // If non-empty used to restore the state of the browser. This is only used
    // if |id| is empty.
    std::vector<uint8_t> minimal_state;
  };

  // Creates a new Browser. |persistence_info|, if non-null, is used for saving
  // and restoring the state of the browser.
  static std::unique_ptr<Browser> Create(
      Profile* profile,
      const PersistenceInfo* persistence_info);

  virtual ~Browser() {}

  virtual void AddTab(Tab* tab) = 0;
  virtual void DestroyTab(Tab* tab) = 0;
  virtual void SetActiveTab(Tab* tab) = 0;
  virtual Tab* GetActiveTab() = 0;
  virtual std::vector<Tab*> GetTabs() = 0;

  // Creates a tab attached to this browser. The returned tab is owned by the
  // browser.
  virtual Tab* CreateTab() = 0;

  // Called early on in shutdown, before any tabs have been removed.
  virtual void PrepareForShutdown() = 0;

  // Returns the id supplied to Create() that is used for persistence.
  virtual std::string GetPersistenceId() = 0;

  // Returns the tabs and navigations in a format suitable for serialization.
  // This state can be later restored via |PersistenceInfo::minimal_state|.
  // This is not the full state, only a minimal snapshot intended for
  // lightweight restore when full persistence is not desirable.
  virtual std::vector<uint8_t> GetMinimalPersistenceState() = 0;

  // Returns true if this Browser is in the process of restoring the previous
  // state. That is, PersistenceInfo was supplied to the constructor and
  // the state is asynchronously being loaded.
  virtual bool IsRestoringPreviousState() = 0;

  virtual void AddObserver(BrowserObserver* observer) = 0;
  virtual void RemoveObserver(BrowserObserver* observer) = 0;

  virtual void AddBrowserRestoreObserver(BrowserRestoreObserver* observer) = 0;
  virtual void RemoveBrowserRestoreObserver(
      BrowserRestoreObserver* observer) = 0;

  virtual void VisibleSecurityStateOfActiveTabChanged() = 0;
};

}  // namespace weblayer

#endif  // WEBLAYER_PUBLIC_BROWSER_H_
