File: page_action_observer.h

package info (click to toggle)
chromium 139.0.7258.138-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 6,120,676 kB
  • sloc: cpp: 35,100,869; ansic: 7,163,530; javascript: 4,103,002; python: 1,436,920; asm: 946,517; xml: 746,709; pascal: 187,653; perl: 88,691; sh: 88,436; objc: 79,953; sql: 51,488; cs: 44,583; fortran: 24,137; makefile: 22,147; tcl: 15,277; php: 13,980; yacc: 8,984; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (77 lines) | stat: -rw-r--r-- 2,889 bytes parent folder | download | duplicates (3)
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_