blob: 1c952f9dccb1487d4a36307dcad623ffee913d59 [file] [log] [blame]
// Copyright 2024 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_UI_CUSTOMIZE_CHROME_SIDE_PANEL_CONTROLLER_H_
#define CHROME_BROWSER_UI_CUSTOMIZE_CHROME_SIDE_PANEL_CONTROLLER_H_
#include "base/functional/callback_forward.h"
#include "base/task/delay_policy.h"
#include "chrome/browser/ui/views/side_panel/side_panel_entry_observer.h"
#include "chrome/browser/ui/views/side_panel/side_panel_enums.h"
#include "chrome/browser/ui/webui/side_panel/customize_chrome/customize_chrome_section.h"
namespace customize_chrome {
// Interface for interacting with and getting info for the sidepanel for
// CustomizeChrome SidePanel. Features should use this class and not
// SidePanelControllerViews unless they need direct access to creating the View
// component for the SidePanel.
//
// This class an abstract-base-class that serves no purpose other than to
// satisfy a historical constraint (no referencing views from outside of views)
// which has since been deleted.
// TODO(https://crbug.com/365591184) Clean up this abstraction by deleting this
// class altogether.
class SidePanelController : public SidePanelEntryObserver {
public:
using StateChangedCallBack = base::RepeatingCallback<void(bool)>;
~SidePanelController() override = default;
// Returns true if the sidepanel has registered customize chrome.
virtual bool IsCustomizeChromeEntryAvailable() const = 0;
// Returns true if the sidepanel is currently showing customize chrome.
virtual bool IsCustomizeChromeEntryShowing() const = 0;
// Sets a callback that will be called when the SidePanelEntryObserver
// detects a change (OnEntryShown/OnEntryHidden). If there is already a
// callback, just replaces it.
virtual void SetEntryChangedCallback(StateChangedCallBack callback) = 0;
// Calls the necessary code to show the sidepanel if needed, and then scrolls
// the the |section| if its set. |trigger| is used for logging.
virtual void OpenSidePanel(SidePanelOpenTrigger trigger,
std::optional<CustomizeChromeSection> section) = 0;
// Closes the SidePanel if it's open to the CustomizeChrome page.
virtual void CloseSidePanel() = 0;
// Test helpers.
// TODO (https://crbug.com/353343817): Remove these from tests and here.
void CreateAndRegisterEntryForTesting() { CreateAndRegisterEntry(); }
void DeregisterEntryForTesting() { DeregisterEntry(); }
protected:
// Creates the entry in the SidePanelRegistry for the tab if possible. If the
// entry already exists then does nothing.
virtual void CreateAndRegisterEntry() = 0;
// Deletes the entry in the SidePanelRegistry for the tab if possible. If the
// entry doesnt exist then does nothing.
virtual void DeregisterEntry() = 0;
};
} // namespace customize_chrome
#endif // CHROME_BROWSER_UI_CUSTOMIZE_CHROME_SIDE_PANEL_CONTROLLER_H_