1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
// 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_
|