Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(474)

Unified Diff: ash/metrics/desktop_task_switch_metric_recorder_unittest.cc

Issue 1153633006: Added UMA statistics for changing the active window via click or touch events. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed the branch that the CL was based on. Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ash/metrics/desktop_task_switch_metric_recorder.cc ('k') | ash/metrics/task_switch_metrics_recorder.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ash/metrics/desktop_task_switch_metric_recorder_unittest.cc
diff --git a/ash/metrics/desktop_task_switch_metric_recorder_unittest.cc b/ash/metrics/desktop_task_switch_metric_recorder_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..741407fc507dc8aa7355cda67cb9b187ed8e79e2
--- /dev/null
+++ b/ash/metrics/desktop_task_switch_metric_recorder_unittest.cc
@@ -0,0 +1,338 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ash/metrics/desktop_task_switch_metric_recorder.h"
+
+#include "ash/shell.h"
+#include "ash/test/ash_test_base.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/test/user_action_tester.h"
+#include "ui/aura/test/test_window_delegate.h"
+#include "ui/aura/window.h"
+#include "ui/compositor/layer_type.h"
+#include "ui/events/test/event_generator.h"
+#include "ui/wm/public/activation_client.h"
+#include "ui/wm/public/window_types.h"
+
+using aura::client::ActivationChangeObserver;
+
+namespace ash {
+namespace {
+
+const char kDesktopTaskSwitchUserAction[] = "Desktop_SwitchTask";
+
+// Test fixture for the DesktopTaskSwitchMetricsRecorder class. NOTE: This
+// fixture extends AshTestBase so that the UserMetricsRecorder instance required
+// by the test target can be obtained through Shell::GetInstance()->metrics()
+// and the test target is not the same instance as the one owned by the
+// UserMetricsRecorder instance.
+class DesktopTaskSwitchMetricRecorderTest : public test::AshTestBase {
+ public:
+ DesktopTaskSwitchMetricRecorderTest();
+ ~DesktopTaskSwitchMetricRecorderTest() override;
+
+ // test::AshTestBase:
+ void SetUp() override;
+ void TearDown() override;
+
+ // Resets the recorded user action counts.
+ void ResetActionCounts();
+
+ // Returns the number of times the "Desktop_SwitchTask" user action was
+ // recorded.
+ int GetActionCount() const;
+
+ // Creates a positionable window such that wm::IsWindowUserPositionable(...)
+ // would retun true.
+ scoped_ptr<aura::Window> CreatePositionableWindow() const;
+
+ // Creates a non-positionable window such that
+ // wm::IsWindowUserPositionable(...) would retun false.
+ scoped_ptr<aura::Window> CreateNonPositionableWindow() const;
+
+ // Wrapper to notify the test target's OnWindowActivated(...) method that
+ // |window| was activated due to an INPUT_EVENT.
+ void ActiveTaskWindowWithUserInput(aura::Window* window);
+
+ protected:
+ // Records UMA user action counts.
+ scoped_ptr<base::UserActionTester> user_action_tester_;
+
+ // The test target.
+ scoped_ptr<DesktopTaskSwitchMetricRecorder> metrics_recorder_;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(DesktopTaskSwitchMetricRecorderTest);
+};
+
+DesktopTaskSwitchMetricRecorderTest::DesktopTaskSwitchMetricRecorderTest() {
+}
+
+DesktopTaskSwitchMetricRecorderTest::~DesktopTaskSwitchMetricRecorderTest() {
+}
+
+void DesktopTaskSwitchMetricRecorderTest::SetUp() {
+ test::AshTestBase::SetUp();
+ metrics_recorder_.reset(new DesktopTaskSwitchMetricRecorder);
+ user_action_tester_.reset(new base::UserActionTester);
+}
+
+void DesktopTaskSwitchMetricRecorderTest::TearDown() {
+ user_action_tester_.reset();
+ metrics_recorder_.reset();
+ test::AshTestBase::TearDown();
+}
+
+void DesktopTaskSwitchMetricRecorderTest::ActiveTaskWindowWithUserInput(
+ aura::Window* window) {
+ metrics_recorder_->OnWindowActivated(
+ ActivationChangeObserver::ActivationReason::INPUT_EVENT, window, nullptr);
+}
+
+void DesktopTaskSwitchMetricRecorderTest::ResetActionCounts() {
+ user_action_tester_->ResetCounts();
+}
+
+int DesktopTaskSwitchMetricRecorderTest::GetActionCount() const {
+ return user_action_tester_->GetActionCount(kDesktopTaskSwitchUserAction);
+}
+
+scoped_ptr<aura::Window>
+DesktopTaskSwitchMetricRecorderTest::CreatePositionableWindow() const {
+ scoped_ptr<aura::Window> window(
+ new aura::Window(new aura::test::TestWindowDelegate));
Jeffrey Yasskin 2015/06/05 22:53:51 aura::Window doesn't appear to take ownership of i
+ window->SetType(ui::wm::WINDOW_TYPE_NORMAL);
+ window->Init(ui::LAYER_NOT_DRAWN);
+ return window.Pass();
+}
+
+scoped_ptr<aura::Window>
+DesktopTaskSwitchMetricRecorderTest::CreateNonPositionableWindow() const {
+ scoped_ptr<aura::Window> window(
+ new aura::Window(new aura::test::TestWindowDelegate));
+ window->SetType(ui::wm::WINDOW_TYPE_UNKNOWN);
+ window->Init(ui::LAYER_NOT_DRAWN);
+ return window.Pass();
+}
+
+// Verify user action is recorded when a positionable window is activated given
+// that a null window was activated last.
+TEST_F(DesktopTaskSwitchMetricRecorderTest,
+ ActivatePositionableWindowWhenNullWindowWasActivatedLast) {
+ scoped_ptr<aura::Window> null_window;
+ scoped_ptr<aura::Window> positionable_window =
+ CreatePositionableWindow().Pass();
+
+ ActiveTaskWindowWithUserInput(null_window.get());
+ ResetActionCounts();
+
+ ActiveTaskWindowWithUserInput(positionable_window.get());
+ EXPECT_EQ(1, GetActionCount());
+}
+
+// Verify user action is recorded whena positionable window is activated given
+// a different positionable window was activated last.
+TEST_F(
+ DesktopTaskSwitchMetricRecorderTest,
+ ActivatePositionableWindowWhenADifferentPositionableWindowWasActivatedLast) {
+ scoped_ptr<aura::Window> positionable_window_1 =
+ CreatePositionableWindow().Pass();
+ scoped_ptr<aura::Window> positionable_window_2 =
+ CreatePositionableWindow().Pass();
+
+ ActiveTaskWindowWithUserInput(positionable_window_1.get());
+ ResetActionCounts();
+
+ ActiveTaskWindowWithUserInput(positionable_window_2.get());
+ EXPECT_EQ(1, GetActionCount());
+}
+
+// Verify user action is not recorded when a positionable window is activated
+// given the same positionable window was activated last.
+TEST_F(
+ DesktopTaskSwitchMetricRecorderTest,
+ ActivatePositionableWindowWhenTheSamePositionableWindowWasActivatedLast) {
+ scoped_ptr<aura::Window> positionable_window =
+ CreatePositionableWindow().Pass();
+
+ ActiveTaskWindowWithUserInput(positionable_window.get());
+ ResetActionCounts();
+
+ ActiveTaskWindowWithUserInput(positionable_window.get());
+ EXPECT_EQ(0, GetActionCount());
+}
+
+// Verify user action is recorded when a positionable window is activated given
+// a non-positionable window was activated last.
+TEST_F(DesktopTaskSwitchMetricRecorderTest,
+ ActivatePositionableWindowWhenANonPositionableWindowWasActivatedLast) {
+ scoped_ptr<aura::Window> non_positionable_window =
+ CreateNonPositionableWindow().Pass();
+ scoped_ptr<aura::Window> positionable_window =
+ CreatePositionableWindow().Pass();
+
+ ActiveTaskWindowWithUserInput(non_positionable_window.get());
+ ResetActionCounts();
+
+ ActiveTaskWindowWithUserInput(positionable_window.get());
+ EXPECT_EQ(1, GetActionCount());
+}
+
+// Verify user action is not recorded when a non-positionable window is
+// activated between two activations of the same positionable window.
+TEST_F(DesktopTaskSwitchMetricRecorderTest,
+ ActivateNonPositionableWindowBetweenTwoPositionableWindowActivations) {
+ scoped_ptr<aura::Window> positionable_window =
+ CreatePositionableWindow().Pass();
+ scoped_ptr<aura::Window> non_positionable_window =
+ CreateNonPositionableWindow().Pass();
+
+ ActiveTaskWindowWithUserInput(positionable_window.get());
+ ResetActionCounts();
+
+ ActiveTaskWindowWithUserInput(non_positionable_window.get());
+ EXPECT_EQ(0, GetActionCount());
+
+ ActiveTaskWindowWithUserInput(positionable_window.get());
+ EXPECT_EQ(0, GetActionCount());
+}
+
+// Verify user action is not recorded when a null window is activated.
+TEST_F(DesktopTaskSwitchMetricRecorderTest, ActivateNullWindow) {
+ scoped_ptr<aura::Window> positionable_window =
+ CreatePositionableWindow().Pass();
+ scoped_ptr<aura::Window> null_window = nullptr;
+
+ ActiveTaskWindowWithUserInput(positionable_window.get());
+ ResetActionCounts();
+
+ ActiveTaskWindowWithUserInput(null_window.get());
+ EXPECT_EQ(0, GetActionCount());
+}
+
+// Verify user action is not recorded when a non-positionable window is
+// activated.
+TEST_F(DesktopTaskSwitchMetricRecorderTest, ActivateNonPositionableWindow) {
+ scoped_ptr<aura::Window> positionable_window =
+ CreatePositionableWindow().Pass();
+ scoped_ptr<aura::Window> non_positionable_window =
+ CreateNonPositionableWindow().Pass();
+
+ ActiveTaskWindowWithUserInput(positionable_window.get());
+ ResetActionCounts();
+
+ ActiveTaskWindowWithUserInput(non_positionable_window.get());
+ EXPECT_EQ(0, GetActionCount());
+}
+
+// Verify user action is not recorded when the ActivationReason is not an
+// INPUT_EVENT.
+TEST_F(DesktopTaskSwitchMetricRecorderTest,
+ ActivatePositionableWindowWithNonInputEventReason) {
+ scoped_ptr<aura::Window> positionable_window_1 =
+ CreatePositionableWindow().Pass();
+ scoped_ptr<aura::Window> positionable_window_2 =
+ CreatePositionableWindow().Pass();
+
+ ActiveTaskWindowWithUserInput(positionable_window_1.get());
+ ResetActionCounts();
+
+ metrics_recorder_->OnWindowActivated(
+ ActivationChangeObserver::ActivationReason::ACTIVATION_CLIENT,
+ positionable_window_2.get(), nullptr);
+ EXPECT_EQ(0, GetActionCount());
+}
+
+// Test fixture to test the integration of the DesktopTaskSwitchMetricsRecorder
+// class with ash::Shell environment.
+class DesktopTaskSwitchMetricRecorderWithShellIntegrationTest
+ : public test::AshTestBase {
+ public:
+ DesktopTaskSwitchMetricRecorderWithShellIntegrationTest();
+ ~DesktopTaskSwitchMetricRecorderWithShellIntegrationTest() override;
+
+ // test::AshTestBase:
+ void SetUp() override;
+ void TearDown() override;
+
+ // Returns the number of times the "Desktop_SwitchTask" user action was
+ // recorded.
+ int GetActionCount() const;
+
+ // Creates a positionable window with the given |bounds| such that
+ // wm::IsWindowUserPositionable(...) would retun true.
+ aura::Window* CreatePositionableWindowInShellWithBounds(
+ const gfx::Rect& bounds);
+
+ protected:
+ // Records UMA user action counts.
+ scoped_ptr<base::UserActionTester> user_action_tester_;
+
+ // Delegate used when creating new windows using the
+ // CreatePositionableWindowInShellWithBounds(...) method.
+ aura::test::TestWindowDelegate test_window_delegate_;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(
+ DesktopTaskSwitchMetricRecorderWithShellIntegrationTest);
+};
+
+DesktopTaskSwitchMetricRecorderWithShellIntegrationTest::
+ DesktopTaskSwitchMetricRecorderWithShellIntegrationTest() {
+}
+
+DesktopTaskSwitchMetricRecorderWithShellIntegrationTest::
+ ~DesktopTaskSwitchMetricRecorderWithShellIntegrationTest() {
+}
+
+void DesktopTaskSwitchMetricRecorderWithShellIntegrationTest::SetUp() {
+ test::AshTestBase::SetUp();
+ user_action_tester_.reset(new base::UserActionTester);
+}
+
+void DesktopTaskSwitchMetricRecorderWithShellIntegrationTest::TearDown() {
+ user_action_tester_.reset();
+ test::AshTestBase::TearDown();
+}
+
+int DesktopTaskSwitchMetricRecorderWithShellIntegrationTest::GetActionCount()
+ const {
+ return user_action_tester_->GetActionCount(kDesktopTaskSwitchUserAction);
+}
+
+aura::Window* DesktopTaskSwitchMetricRecorderWithShellIntegrationTest::
+ CreatePositionableWindowInShellWithBounds(const gfx::Rect& bounds) {
+ return CreateTestWindowInShellWithDelegate(&test_window_delegate_, 0, bounds);
+}
+
+// Verify a user action is recorded when a positionable window is activated by
+// a INPUT_EVENT.
+TEST_F(DesktopTaskSwitchMetricRecorderWithShellIntegrationTest,
+ ActivatePositionableWindowWithInputEvent) {
+ aura::Window* positionable_window =
+ CreatePositionableWindowInShellWithBounds(gfx::Rect(0, 0, 10, 10));
+
+ ui::test::EventGenerator event_generator(Shell::GetPrimaryRootWindow());
+
+ event_generator.MoveMouseToCenterOf(positionable_window);
+ event_generator.ClickLeftButton();
+
+ EXPECT_EQ(1, GetActionCount());
+}
+
+// Verify a user action is not recorded when a positionable window is activated
+// by a non INPUT_EVENT.
+TEST_F(DesktopTaskSwitchMetricRecorderWithShellIntegrationTest,
+ ActivatePositionableWindowWithNonInputEvent) {
+ aura::Window* positionable_window =
+ CreatePositionableWindowInShellWithBounds(gfx::Rect(0, 0, 10, 10));
+
+ Shell::GetInstance()->activation_client()->ActivateWindow(
+ positionable_window);
+
+ EXPECT_EQ(0, GetActionCount());
+}
+
+} // namespace
+} // namespace ash
« no previous file with comments | « ash/metrics/desktop_task_switch_metric_recorder.cc ('k') | ash/metrics/task_switch_metrics_recorder.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698