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 69 70 71 72 73 74 75 76 77
|
// 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_UI_VIEWS_PAGE_ACTION_PAGE_ACTION_OBSERVER_H_
#define CHROME_BROWSER_UI_VIEWS_PAGE_ACTION_PAGE_ACTION_OBSERVER_H_
#include <memory>
#include <optional>
#include <string>
#include "ui/actions/action_id.h"
namespace page_actions {
class PageActionObserverImpl;
class PageActionController;
// This is a simple snapshot of a page action's state.
// Each feature has a page action *per-tab*; this represents the page action
// for a single tab.
// Note: this represents the framework-driven state of the page action. E.g.,
// the page action may not be visible due to size-constraints in the view; this
// is not captured.
struct PageActionState {
PageActionState();
~PageActionState();
PageActionState(const PageActionState&);
PageActionState& operator=(const PageActionState&);
bool operator==(const PageActionState& other) const;
actions::ActionId action_id;
bool showing = false;
bool chip_showing = false;
// Not set if the page action is not showing.
std::optional<std::u16string> tooltip = std::nullopt;
// Not set if the page action is not showing in chip state.
std::optional<std::u16string> label = std::nullopt;
};
// PageActionObserver observes for events on a tab's page action.
// It is scoped to a specific action_id, provided in the constructor.
class PageActionObserver {
public:
explicit PageActionObserver(actions::ActionId action_id);
virtual ~PageActionObserver();
PageActionObserver(const PageActionObserver&) = delete;
PageActionObserver& operator=(const PageActionObserver&) = delete;
// Invoked when the specified page action icon becomes visible/hidden.
// This includes page actions in their chip state (see comment below).
virtual void OnPageActionIconShown(const PageActionState& page_action) {}
virtual void OnPageActionIconHidden(const PageActionState& page_action) {}
// Invoked when the specified page action chip becomes visible/hidden.
// If the chip animates, the chip is considered shown at the start of
// its expanding animation, and considered hidden at the end of its
// collapsing animation.
// This is invoked in addition to the "icon shown" notification.
virtual void OnPageActionChipShown(const PageActionState& page_action) {}
virtual void OnPageActionChipHidden(const PageActionState& page_action) {}
const PageActionState& GetCurrentPageActionState() const;
// Begins observation of the page action for the given controller.
void RegisterAsPageActionObserver(PageActionController& controller);
private:
const actions::ActionId action_id_;
std::unique_ptr<PageActionObserverImpl> observer_impl_;
};
} // namespace page_actions
#endif // CHROME_BROWSER_UI_VIEWS_PAGE_ACTION_PAGE_ACTION_OBSERVER_H_
|