Index: ash/common/system/tray/system_tray_unittest.cc |
diff --git a/ash/common/system/tray/system_tray_unittest.cc b/ash/common/system/tray/system_tray_unittest.cc |
index 0ee90eb63ceb78801bd5fde62a15531bffd2c9cf..abc9d053506c48121dbf81babc8aa9283ea61b75 100644 |
--- a/ash/common/system/tray/system_tray_unittest.cc |
+++ b/ash/common/system/tray/system_tray_unittest.cc |
@@ -4,6 +4,7 @@ |
#include "ash/common/system/tray/system_tray.h" |
+#include <string> |
#include <vector> |
#include "ash/common/accessibility_delegate.h" |
@@ -20,15 +21,14 @@ |
#include "ash/common/wm_window.h" |
#include "ash/test/ash_test_base.h" |
#include "ash/test/status_area_widget_test_helper.h" |
+#include "ash/test/test_system_tray_item.h" |
#include "base/run_loop.h" |
-#include "base/strings/utf_string_conversions.h" |
+#include "base/test/histogram_tester.h" |
#include "ui/base/ui_base_types.h" |
#include "ui/compositor/scoped_animation_duration_scale_mode.h" |
#include "ui/events/test/event_generator.h" |
#include "ui/gfx/geometry/point.h" |
#include "ui/gfx/geometry/rect.h" |
-#include "ui/views/controls/label.h" |
-#include "ui/views/layout/fill_layout.h" |
#include "ui/views/view.h" |
#include "ui/views/widget/widget.h" |
#include "ui/views/widget/widget_delegate.h" |
@@ -42,108 +42,154 @@ namespace test { |
namespace { |
-// Trivial item implementation that tracks its views for testing. |
-class TestItem : public SystemTrayItem { |
+const char kVisibleRowsHistogramName[] = |
+ "Ash.SystemMenu.DefaultView.VisibleRows"; |
+ |
+class ModalWidgetDelegate : public views::WidgetDelegateView { |
public: |
- TestItem() |
- : SystemTrayItem(AshTestBase::GetPrimarySystemTray()), |
- tray_view_(nullptr), |
- default_view_(nullptr), |
- detailed_view_(nullptr), |
- notification_view_(nullptr) {} |
- |
- views::View* CreateTrayView(LoginStatus status) override { |
- tray_view_ = new views::View; |
- // Add a label so it has non-zero width. |
- tray_view_->SetLayoutManager(new views::FillLayout); |
- tray_view_->AddChildView(new views::Label(base::UTF8ToUTF16("Tray"))); |
- return tray_view_; |
- } |
+ ModalWidgetDelegate() {} |
+ ~ModalWidgetDelegate() override {} |
- views::View* CreateDefaultView(LoginStatus status) override { |
- default_view_ = new views::View; |
- default_view_->SetLayoutManager(new views::FillLayout); |
- default_view_->AddChildView(new views::Label(base::UTF8ToUTF16("Default"))); |
- return default_view_; |
- } |
+ views::View* GetContentsView() override { return this; } |
+ ui::ModalType GetModalType() const override { return ui::MODAL_TYPE_SYSTEM; } |
- views::View* CreateDetailedView(LoginStatus status) override { |
- detailed_view_ = new views::View; |
- detailed_view_->SetLayoutManager(new views::FillLayout); |
- detailed_view_->AddChildView( |
- new views::Label(base::UTF8ToUTF16("Detailed"))); |
- return detailed_view_; |
- } |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(ModalWidgetDelegate); |
+}; |
- views::View* CreateNotificationView(LoginStatus status) override { |
- notification_view_ = new views::View; |
- return notification_view_; |
- } |
+} // namespace |
- void DestroyTrayView() override { tray_view_ = NULL; } |
+typedef AshTestBase SystemTrayTest; |
- void DestroyDefaultView() override { default_view_ = NULL; } |
+// Verifies only the visible default views are recorded in the |
+// "Ash.SystemMenu.DefaultView.VisibleItems" histogram. |
+TEST_F(SystemTrayTest, OnlyVisibleItemsRecorded) { |
+ SystemTray* tray = GetPrimarySystemTray(); |
+ ASSERT_TRUE(tray->GetWidget()); |
- void DestroyDetailedView() override { detailed_view_ = NULL; } |
+ TestSystemTrayItem* test_item = new TestSystemTrayItem(); |
+ tray->AddTrayItem(test_item); |
- void DestroyNotificationView() override { notification_view_ = NULL; } |
+ base::HistogramTester histogram_tester; |
- void UpdateAfterLoginStatusChange(LoginStatus status) override {} |
+ tray->ShowDefaultView(BUBBLE_CREATE_NEW); |
+ RunAllPendingInMessageLoop(); |
+ histogram_tester.ExpectBucketCount(kVisibleRowsHistogramName, |
+ SystemTrayItem::UMA_TEST, 1); |
- views::View* tray_view() const { return tray_view_; } |
- views::View* default_view() const { return default_view_; } |
- views::View* detailed_view() const { return detailed_view_; } |
- views::View* notification_view() const { return notification_view_; } |
+ ASSERT_TRUE(tray->CloseSystemBubble()); |
+ RunAllPendingInMessageLoop(); |
- private: |
- views::View* tray_view_; |
- views::View* default_view_; |
- views::View* detailed_view_; |
- views::View* notification_view_; |
-}; |
+ tray->ShowDefaultView(BUBBLE_CREATE_NEW); |
+ RunAllPendingInMessageLoop(); |
+ histogram_tester.ExpectBucketCount(kVisibleRowsHistogramName, |
+ SystemTrayItem::UMA_TEST, 2); |
-// Trivial item implementation that returns NULL from tray/default/detailed |
-// view creation methods. |
-class TestNoViewItem : public SystemTrayItem { |
- public: |
- TestNoViewItem() : SystemTrayItem(AshTestBase::GetPrimarySystemTray()) {} |
+ ASSERT_TRUE(tray->CloseSystemBubble()); |
+ RunAllPendingInMessageLoop(); |
- views::View* CreateTrayView(LoginStatus status) override { return nullptr; } |
+ test_item->set_views_are_visible(false); |
- views::View* CreateDefaultView(LoginStatus status) override { |
- return nullptr; |
- } |
+ tray->ShowDefaultView(BUBBLE_CREATE_NEW); |
+ RunAllPendingInMessageLoop(); |
+ histogram_tester.ExpectBucketCount(kVisibleRowsHistogramName, |
+ SystemTrayItem::UMA_TEST, 2); |
- views::View* CreateDetailedView(LoginStatus status) override { |
- return nullptr; |
- } |
+ ASSERT_TRUE(tray->CloseSystemBubble()); |
+ RunAllPendingInMessageLoop(); |
+} |
- views::View* CreateNotificationView(LoginStatus status) override { |
- return nullptr; |
- } |
+// Verifies a visible UMA_NOT_RECORDED default view is not recorded in the |
+// "Ash.SystemMenu.DefaultView.VisibleItems" histogram. |
+TEST_F(SystemTrayTest, NotRecordedtemsAreNotRecorded) { |
+ SystemTray* tray = GetPrimarySystemTray(); |
+ ASSERT_TRUE(tray->GetWidget()); |
- void DestroyTrayView() override {} |
- void DestroyDefaultView() override {} |
- void DestroyDetailedView() override {} |
- void DestroyNotificationView() override {} |
- void UpdateAfterLoginStatusChange(LoginStatus status) override {} |
-}; |
+ TestSystemTrayItem* test_item = |
+ new TestSystemTrayItem(SystemTrayItem::UMA_NOT_RECORDED); |
+ tray->AddTrayItem(test_item); |
-class ModalWidgetDelegate : public views::WidgetDelegateView { |
- public: |
- ModalWidgetDelegate() {} |
- ~ModalWidgetDelegate() override {} |
+ base::HistogramTester histogram_tester; |
- views::View* GetContentsView() override { return this; } |
- ui::ModalType GetModalType() const override { return ui::MODAL_TYPE_SYSTEM; } |
+ tray->ShowDefaultView(BUBBLE_CREATE_NEW); |
+ RunAllPendingInMessageLoop(); |
+ histogram_tester.ExpectBucketCount(kVisibleRowsHistogramName, |
+ SystemTrayItem::UMA_NOT_RECORDED, 0); |
- private: |
- DISALLOW_COPY_AND_ASSIGN(ModalWidgetDelegate); |
-}; |
+ ASSERT_TRUE(tray->CloseSystemBubble()); |
+ RunAllPendingInMessageLoop(); |
+} |
-} // namespace |
+// Verifies null default views are not recorded in the |
+// "Ash.SystemMenu.DefaultView.VisibleItems" histogram. |
+TEST_F(SystemTrayTest, NullDefaultViewIsNotRecorded) { |
+ SystemTray* tray = GetPrimarySystemTray(); |
+ ASSERT_TRUE(tray->GetWidget()); |
-typedef AshTestBase SystemTrayTest; |
+ TestSystemTrayItem* test_item = new TestSystemTrayItem(); |
+ test_item->set_has_views(false); |
+ tray->AddTrayItem(test_item); |
+ |
+ base::HistogramTester histogram_tester; |
+ |
+ tray->ShowDefaultView(BUBBLE_CREATE_NEW); |
+ RunAllPendingInMessageLoop(); |
+ histogram_tester.ExpectBucketCount(kVisibleRowsHistogramName, |
+ SystemTrayItem::UMA_TEST, 0); |
+ |
+ ASSERT_TRUE(tray->CloseSystemBubble()); |
+ RunAllPendingInMessageLoop(); |
+} |
+ |
+// Verifies visible detailed views are not recorded in the |
+// "Ash.SystemMenu.DefaultView.VisibleItems" histogram. |
+TEST_F(SystemTrayTest, VisibleDetailedViewsIsNotRecorded) { |
+ SystemTray* tray = GetPrimarySystemTray(); |
+ ASSERT_TRUE(tray->GetWidget()); |
+ |
+ TestSystemTrayItem* test_item = new TestSystemTrayItem(); |
+ tray->AddTrayItem(test_item); |
+ |
+ base::HistogramTester histogram_tester; |
+ |
+ tray->ShowDetailedView(test_item, 0, false, BUBBLE_CREATE_NEW); |
+ RunAllPendingInMessageLoop(); |
+ |
+ histogram_tester.ExpectTotalCount(kVisibleRowsHistogramName, 0); |
+ |
+ ASSERT_TRUE(tray->CloseSystemBubble()); |
+ RunAllPendingInMessageLoop(); |
+} |
+ |
+// Verifies visible default views are not recorded for menu re-shows in the |
+// "Ash.SystemMenu.DefaultView.VisibleItems" histogram. |
+TEST_F(SystemTrayTest, VisibleDefaultViewIsNotRecordedOnReshow) { |
+ SystemTray* tray = GetPrimarySystemTray(); |
+ ASSERT_TRUE(tray->GetWidget()); |
+ |
+ TestSystemTrayItem* test_item = new TestSystemTrayItem(); |
+ tray->AddTrayItem(test_item); |
+ |
+ base::HistogramTester histogram_tester; |
+ |
+ tray->ShowDefaultView(BUBBLE_CREATE_NEW); |
+ RunAllPendingInMessageLoop(); |
+ histogram_tester.ExpectBucketCount(kVisibleRowsHistogramName, |
+ SystemTrayItem::UMA_TEST, 1); |
+ |
+ tray->ShowDetailedView(test_item, 0, false, BUBBLE_USE_EXISTING); |
+ RunAllPendingInMessageLoop(); |
+ histogram_tester.ExpectBucketCount(kVisibleRowsHistogramName, |
+ SystemTrayItem::UMA_TEST, 1); |
+ |
+ tray->ShowDefaultView(BUBBLE_USE_EXISTING); |
+ RunAllPendingInMessageLoop(); |
+ histogram_tester.ExpectBucketCount(kVisibleRowsHistogramName, |
+ SystemTrayItem::UMA_TEST, 1); |
+ |
+ ASSERT_TRUE(tray->CloseSystemBubble()); |
+ RunAllPendingInMessageLoop(); |
+} |
TEST_F(SystemTrayTest, SystemTrayDefaultView) { |
SystemTray* tray = GetPrimarySystemTray(); |
@@ -201,8 +247,8 @@ TEST_F(SystemTrayTest, SystemTrayTestItems) { |
SystemTray* tray = GetPrimarySystemTray(); |
ASSERT_TRUE(tray->GetWidget()); |
- TestItem* test_item = new TestItem; |
- TestItem* detailed_item = new TestItem; |
+ TestSystemTrayItem* test_item = new TestSystemTrayItem(); |
+ TestSystemTrayItem* detailed_item = new TestSystemTrayItem(); |
tray->AddTrayItem(test_item); |
tray->AddTrayItem(detailed_item); |
@@ -239,7 +285,8 @@ TEST_F(SystemTrayTest, SystemTrayNoViewItems) { |
ASSERT_TRUE(tray->GetWidget()); |
// Verify that no crashes occur on items lacking some views. |
- TestNoViewItem* no_view_item = new TestNoViewItem; |
+ TestSystemTrayItem* no_view_item = new TestSystemTrayItem(); |
+ no_view_item->set_has_views(false); |
tray->AddTrayItem(no_view_item); |
tray->ShowDefaultView(BUBBLE_CREATE_NEW); |
tray->ShowDetailedView(no_view_item, 0, false, BUBBLE_USE_EXISTING); |
@@ -251,12 +298,12 @@ TEST_F(SystemTrayTest, TrayWidgetAutoResizes) { |
ASSERT_TRUE(tray->GetWidget()); |
// Add an initial tray item so that the tray gets laid out correctly. |
- TestItem* initial_item = new TestItem; |
+ TestSystemTrayItem* initial_item = new TestSystemTrayItem(); |
tray->AddTrayItem(initial_item); |
gfx::Size initial_size = tray->GetWidget()->GetWindowBoundsInScreen().size(); |
- TestItem* new_item = new TestItem; |
+ TestSystemTrayItem* new_item = new TestSystemTrayItem(); |
tray->AddTrayItem(new_item); |
gfx::Size new_size = tray->GetWidget()->GetWindowBoundsInScreen().size(); |
@@ -279,8 +326,8 @@ TEST_F(SystemTrayTest, SystemTrayNotifications) { |
SystemTray* tray = GetPrimarySystemTray(); |
ASSERT_TRUE(tray->GetWidget()); |
- TestItem* test_item = new TestItem; |
- TestItem* detailed_item = new TestItem; |
+ TestSystemTrayItem* test_item = new TestSystemTrayItem(); |
+ TestSystemTrayItem* detailed_item = new TestSystemTrayItem(); |
tray->AddTrayItem(test_item); |
tray->AddTrayItem(detailed_item); |
@@ -314,7 +361,7 @@ TEST_F(SystemTrayTest, BubbleCreationTypesTest) { |
SystemTray* tray = GetPrimarySystemTray(); |
ASSERT_TRUE(tray->GetWidget()); |
- TestItem* test_item = new TestItem; |
+ TestSystemTrayItem* test_item = new TestSystemTrayItem(); |
tray->AddTrayItem(test_item); |
// Ensure the tray views are created. |
@@ -384,7 +431,7 @@ TEST_F(SystemTrayTest, PersistentBubble) { |
SystemTray* tray = GetPrimarySystemTray(); |
ASSERT_TRUE(tray->GetWidget()); |
- TestItem* test_item = new TestItem; |
+ TestSystemTrayItem* test_item = new TestSystemTrayItem(); |
tray->AddTrayItem(test_item); |
std::unique_ptr<views::Widget> widget(CreateTestWidget( |