diff options
Diffstat (limited to 'chromium/ui/views/widget/widget_utils.h')
-rw-r--r-- | chromium/ui/views/widget/widget_utils.h | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/chromium/ui/views/widget/widget_utils.h b/chromium/ui/views/widget/widget_utils.h index 93479e8e7d7..cb092fe7e0f 100644 --- a/chromium/ui/views/widget/widget_utils.h +++ b/chromium/ui/views/widget/widget_utils.h @@ -5,12 +5,43 @@ #ifndef UI_VIEWS_WIDGET_WIDGET_UTILS_H_ #define UI_VIEWS_WIDGET_WIDGET_UTILS_H_ +#include "base/callback.h" +#include "base/scoped_observer.h" +#include "base/time/time.h" +#include "base/timer/elapsed_timer.h" #include "ui/gfx/native_widget_types.h" #include "ui/views/views_export.h" +#include "ui/views/widget/widget.h" +#include "ui/views/widget/widget_observer.h" namespace views { class Widget; +class VIEWS_EXPORT WidgetOpenTimer : public WidgetObserver { + public: + using Callback = base::RepeatingCallback<void(base::TimeDelta)>; + + explicit WidgetOpenTimer(Callback callback); + WidgetOpenTimer(const WidgetOpenTimer&) = delete; + const WidgetOpenTimer& operator=(const WidgetOpenTimer&) = delete; + ~WidgetOpenTimer() override; + + // WidgetObserver: + void OnWidgetDestroying(Widget* widget) override; + + // Called to start the |open_timer_|. + void Reset(Widget* widget); + + private: + // Callback run when the passed in Widget is destroyed. + Callback callback_; + + // Time the bubble has been open. Used for UMA metrics collection. + base::Optional<base::ElapsedTimer> open_timer_; + + ScopedObserver<Widget, WidgetObserver> observed_widget_{this}; +}; + // Returns the root window for |widget|. On non-Aura, this is equivalent to // widget->GetNativeWindow(). VIEWS_EXPORT gfx::NativeWindow GetRootWindow(const Widget* widget); |