blob: f994b23298d272b4b5d91d70b3b951eeaba6eb21 [file] [log] [blame]
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_ASH_BROWSER_DELEGATE_BROWSER_CONTROLLER_IMPL_H_
#define CHROME_BROWSER_ASH_BROWSER_DELEGATE_BROWSER_CONTROLLER_IMPL_H_
#include <memory>
#include "base/observer_list.h"
#include "base/scoped_observation.h"
#include "chrome/browser/ash/browser_delegate/browser_controller.h"
#include "chrome/browser/ui/browser_list_observer.h"
#include "third_party/abseil-cpp/absl/container/flat_hash_map.h"
class Browser;
class BrowserList;
namespace ash {
class BrowserDelegate;
class BrowserDelegateImpl;
class BrowserControllerImpl : public BrowserController,
public BrowserListObserver {
public:
BrowserControllerImpl();
~BrowserControllerImpl() override;
// BrowserController:
BrowserDelegate* GetDelegate(Browser* browser) override;
BrowserDelegate* GetLastUsedBrowser() override;
BrowserDelegate* GetLastUsedVisibleBrowser() override;
BrowserDelegate* GetLastUsedVisibleOnTheRecordBrowser() override;
void ForEachBrowser(BrowserOrder order,
base::FunctionRef<IterationDirective(BrowserDelegate&)>
callback) override;
BrowserDelegate* GetBrowserForWindow(aura::Window* window) override;
BrowserDelegate* FindWebApp(const AccountId& account_id,
webapps::AppId app_id,
BrowserType browser_type,
const GURL& url) override;
BrowserDelegate* NewTabWithPostData(const AccountId& account_id,
const GURL& url,
base::span<const uint8_t> post_data,
std::string_view extra_headers) override;
BrowserDelegate* CreateWebApp(const AccountId& account_id,
webapps::AppId app_id,
BrowserType browser_type,
const CreateParams& params) override;
BrowserDelegate* CreateCustomTab(
const AccountId& account_id,
std::unique_ptr<content::WebContents> contents) override;
void CreateAutofillClientForWebContents(
content::WebContents* web_contents) override;
void AddObserver(Observer* observer) override;
void RemoveObserver(Observer* observer) override;
// BrowserListObserver:
void OnBrowserRemoved(Browser* browser) override;
private:
BrowserDelegate* GetBrowserDelegate(Browser* browser);
absl::flat_hash_map<Browser*, std::unique_ptr<BrowserDelegateImpl>> browsers_;
base::ObserverList<Observer> observers_;
base::ScopedObservation<BrowserList, BrowserListObserver> observation_{this};
};
} // namespace ash
#endif // CHROME_BROWSER_ASH_BROWSER_DELEGATE_BROWSER_CONTROLLER_IMPL_H_