Commit ece9d7e3 authored by Caroline Rising's avatar Caroline Rising Committed by Chromium LUCI CQ

Read later: add metric recording how long the reading list is open.

Bug: 1163938
Change-Id: I383d348d0e08aa42c4aabbfab38c3e8c7ad19331
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2622274Reviewed-by: default avatarJesse Doherty <jwd@chromium.org>
Reviewed-by: default avatarConnie Wan <connily@chromium.org>
Commit-Queue: Caroline Rising <corising@chromium.org>
Cr-Commit-Position: refs/heads/master@{#843509}
parent 140956b4
......@@ -4,6 +4,7 @@
#include "chrome/browser/ui/views/read_later/read_later_button.h"
#include "base/bind.h"
#include "base/metrics/histogram_functions.h"
#include "base/metrics/user_metrics.h"
#include "base/metrics/user_metrics_action.h"
......@@ -84,7 +85,11 @@ ReadLaterButton::ReadLaterButton(Browser* browser)
IDS_READ_LATER_TITLE,
this,
browser->profile(),
GURL(chrome::kChromeUIReadLaterURL))) {
GURL(chrome::kChromeUIReadLaterURL))),
widget_open_timer_(base::BindRepeating([](base::TimeDelta time_elapsed) {
base::UmaHistogramMediumTimes("ReadingList.WindowDisplayedDuration",
time_elapsed);
})) {
SetImageLabelSpacing(ChromeLayoutProvider::Get()->GetDistanceMetric(
DISTANCE_RELATED_LABEL_HORIZONTAL_LIST));
......@@ -143,6 +148,13 @@ void ReadLaterButton::OnThemeChanged() {
LabelButton::OnThemeChanged();
}
void ReadLaterButton::OnWidgetDestroying(views::Widget* widget) {
DCHECK_EQ(webui_bubble_manager_->GetBubbleWidget(), widget);
DCHECK(bubble_widget_observation_.IsObservingSource(
webui_bubble_manager_->GetBubbleWidget()));
bubble_widget_observation_.Reset();
}
void ReadLaterButton::ButtonPressed() {
BrowserView* const browser_view =
BrowserView::GetBrowserViewForBrowser(browser_);
......@@ -171,6 +183,12 @@ void ReadLaterButton::ButtonPressed() {
base::UserMetricsAction("DesktopReadingList.OpenReadingList"));
RecordBookmarkBarState(browser_);
webui_bubble_manager_->ShowBubble();
// There should only ever be a single bubble widget active for the
// ReadLaterButton.
DCHECK(!bubble_widget_observation_.IsObserving());
bubble_widget_observation_.Observe(
webui_bubble_manager_->GetBubbleWidget());
widget_open_timer_.Reset(webui_bubble_manager_->GetBubbleWidget());
}
}
}
......@@ -8,6 +8,8 @@
#include "chrome/browser/ui/views/bubble/webui_bubble_manager.h"
#include "chrome/browser/ui/webui/read_later/read_later_ui.h"
#include "ui/views/controls/button/label_button.h"
#include "ui/views/widget/widget_observer.h"
#include "ui/views/widget/widget_utils.h"
class Browser;
class WebUIBubbleDialogView;
......@@ -15,7 +17,8 @@ class WebUIBubbleDialogView;
// Button in the bookmarks bar that provides access to the corresponding
// read later menu.
// TODO(corising): Handle the the async presentation of the UI bubble.
class ReadLaterButton : public views::LabelButton {
class ReadLaterButton : public views::LabelButton,
public views::WidgetObserver {
public:
explicit ReadLaterButton(Browser* browser);
ReadLaterButton(const ReadLaterButton&) = delete;
......@@ -34,6 +37,9 @@ class ReadLaterButton : public views::LabelButton {
SkColor GetInkDropBaseColor() const override;
void OnThemeChanged() override;
// views::WidgetObserver:
void OnWidgetDestroying(views::Widget* widget) override;
void ButtonPressed();
Browser* const browser_;
......@@ -42,6 +48,11 @@ class ReadLaterButton : public views::LabelButton {
WebUIBubbleDialogView* read_later_side_panel_bubble_ = nullptr;
std::unique_ptr<WebUIBubbleManager<ReadLaterUI>> webui_bubble_manager_;
views::WidgetOpenTimer widget_open_timer_;
base::ScopedObservation<views::Widget, views::WidgetObserver>
bubble_widget_observation_{this};
};
#endif // CHROME_BROWSER_UI_VIEWS_READ_LATER_READ_LATER_BUTTON_H_
......@@ -12690,6 +12690,18 @@ reviews. Googlers can read more about this at go/gwsq-gerrit.
</summary>
</histogram>
<histogram name="ReadingList.WindowDisplayedDuration" units="ms"
expires_after="M92">
<owner>corising@chromium.org</owner>
<owner>chrome-desktop-ui-sea@google.com</owner>
<summary>
Records the amount of time between when a reading list bubble is opened and
when it is closed. It does so by recording the difference in time between
when the the hosting WebUIBubbleDialogView's Widget is first created and
when the widget is destroyed. This is logged on Desktop only.
</summary>
</histogram>
<histogram name="RecoveryComponent.Event" enum="RecoveryComponentEvent"
expires_after="M77">
<owner>robertshield@chromium.org</owner>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment