summaryrefslogtreecommitdiffstats
path: root/ash
diff options
context:
space:
mode:
authorbruthig <bruthig@chromium.org>2015-04-22 10:08:14 -0700
committerCommit bot <commit-bot@chromium.org>2015-04-22 17:10:30 +0000
commitbc37a675e8579e38807e83c2e5d8d16be61f8699 (patch)
tree09dc5e59967e290d41e557f21507181cf2e37d93 /ash
parent83c639f0493539896ac7c2e8db0ac93898955599 (diff)
downloadchromium_src-bc37a675e8579e38807e83c2e5d8d16be61f8699.zip
chromium_src-bc37a675e8579e38807e83c2e5d8d16be61f8699.tar.gz
chromium_src-bc37a675e8579e38807e83c2e5d8d16be61f8699.tar.bz2
Added Launcher_SwitchTask UMA user action.
The Launcher_SwitchTask user action records when a user activates an existing window using an icon in the shelf. TEST=ShelfViewTest.Launcher_ButtonPressedUserActionsRecordedWhenItemSelected TEST=ShelfViewTest.Launcher_TaskUserActionsRecordedWhenItemSelected TEST=ShelfViewTest.Launcher_ButtonPressed_MouseIsRecordedWhenIconActivatedByMouse TEST=ShelfViewTest.Launcher_ButtonPressed_MouseIsRecordedWhenIconActivatedByTouch TEST=ShelfViewTest.Launcher_LaunchTaskIsRecordedWhenNewWindowIsCreated TEST=ShelfViewTest.Launcher_SwitchTaskIsRecordedWhenExistingWindowIsActivated BUG=471354 Review URL: https://codereview.chromium.org/1097393002 Cr-Commit-Position: refs/heads/master@{#326321}
Diffstat (limited to 'ash')
-rw-r--r--ash/metrics/user_metrics_recorder.cc3
-rw-r--r--ash/metrics/user_metrics_recorder.h7
-rw-r--r--ash/shelf/shelf_view.cc64
-rw-r--r--ash/shelf/shelf_view.h9
-rw-r--r--ash/shelf/shelf_view_unittest.cc95
-rw-r--r--ash/test/shelf_view_test_api.cc9
-rw-r--r--ash/test/shelf_view_test_api.h9
7 files changed, 164 insertions, 32 deletions
diff --git a/ash/metrics/user_metrics_recorder.cc b/ash/metrics/user_metrics_recorder.cc
index c1c9e63..ccdcb8f 100644
--- a/ash/metrics/user_metrics_recorder.cc
+++ b/ash/metrics/user_metrics_recorder.cc
@@ -203,6 +203,9 @@ void UserMetricsRecorder::RecordUserMetricsAction(UserMetricsAction action) {
case ash::UMA_LAUNCHER_LAUNCH_TASK:
base::RecordAction(base::UserMetricsAction("Launcher_LaunchTask"));
break;
+ case ash::UMA_LAUNCHER_SWITCH_TASK:
+ base::RecordAction(base::UserMetricsAction("Launcher_SwitchTask"));
+ break;
case UMA_MAXIMIZE_MODE_DISABLED:
base::RecordAction(base::UserMetricsAction("Touchview_Disabled"));
break;
diff --git a/ash/metrics/user_metrics_recorder.h b/ash/metrics/user_metrics_recorder.h
index da39a10..7c27326 100644
--- a/ash/metrics/user_metrics_recorder.h
+++ b/ash/metrics/user_metrics_recorder.h
@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef ASH_USER_METRICS_RECORDER_H_
-#define ASH_USER_METRICS_RECORDER_H_
+#ifndef ASH_METRICS_USER_METRICS_RECORDER_H_
+#define ASH_METRICS_USER_METRICS_RECORDER_H_
#include "ash/ash_export.h"
#include "base/timer/timer.h"
@@ -30,6 +30,7 @@ enum UserMetricsAction {
UMA_LAUNCHER_CLICK_ON_APP,
UMA_LAUNCHER_CLICK_ON_APPLIST_BUTTON,
UMA_LAUNCHER_LAUNCH_TASK,
+ UMA_LAUNCHER_SWITCH_TASK,
UMA_MAXIMIZE_MODE_DISABLED,
UMA_MAXIMIZE_MODE_ENABLED,
UMA_MAXIMIZE_MODE_INITIALLY_DISABLED,
@@ -139,4 +140,4 @@ class ASH_EXPORT UserMetricsRecorder {
} // namespace ash
-#endif // ASH_USER_METRICS_RECORDER_H_
+#endif // ASH_METRICS_USER_METRICS_RECORDER_H_
diff --git a/ash/shelf/shelf_view.cc b/ash/shelf/shelf_view.cc
index 21651b4..06d6dd4 100644
--- a/ash/shelf/shelf_view.cc
+++ b/ash/shelf/shelf_view.cc
@@ -20,7 +20,6 @@
#include "ash/shelf/shelf_constants.h"
#include "ash/shelf/shelf_delegate.h"
#include "ash/shelf/shelf_icon_observer.h"
-#include "ash/shelf/shelf_item_delegate.h"
#include "ash/shelf/shelf_item_delegate_manager.h"
#include "ash/shelf/shelf_layout_manager.h"
#include "ash/shelf/shelf_menu_model.h"
@@ -309,16 +308,6 @@ void ReflectItemStatus(const ShelfItem& item, ShelfButton* button) {
}
}
-void RecordIconActivatedAction(const ui::Event& event) {
- if (event.IsMouseEvent()) {
- Shell::GetInstance()->metrics()->RecordUserMetricsAction(
- UMA_LAUNCHER_BUTTON_PRESSED_WITH_MOUSE);
- } else if (event.IsGestureEvent()) {
- Shell::GetInstance()->metrics()->RecordUserMetricsAction(
- UMA_LAUNCHER_BUTTON_PRESSED_WITH_TOUCH);
- }
-}
-
} // namespace
// AnimationDelegate used when deleting an item. This steadily decreased the
@@ -1693,7 +1682,7 @@ void ShelfView::ButtonPressed(views::Button* sender, const ui::Event& event) {
if (sender == overflow_button_) {
ToggleOverflowBubble();
- RecordIconActivatedAction(event);
+ RecordIconActivatedSource(event);
return;
}
@@ -1752,21 +1741,44 @@ void ShelfView::ButtonPressed(views::Button* sender, const ui::Event& event) {
break;
}
- RecordIconActivatedAction(event);
+ RecordIconActivatedSource(event);
- switch (item_manager_->GetShelfItemDelegate(model_->items()[view_index].id)
- ->ItemSelected(event)) {
- case ShelfItemDelegate::kNoAction:
- case ShelfItemDelegate::kExistingWindowActivated:
- case ShelfItemDelegate::kExistingWindowMinimized:
- case ShelfItemDelegate::kAppListMenuShown:
- ShowListMenuForView(model_->items()[view_index], sender, event);
- break;
- case ShelfItemDelegate::kNewWindowCreated:
- Shell::GetInstance()->metrics()->RecordUserMetricsAction(
- UMA_LAUNCHER_LAUNCH_TASK);
- break;
- }
+ ShelfItemDelegate::PerformedAction performed_action =
+ item_manager_->GetShelfItemDelegate(model_->items()[view_index].id)
+ ->ItemSelected(event);
+
+ RecordIconActivatedAction(performed_action);
+
+ if (performed_action != ShelfItemDelegate::kNewWindowCreated)
+ ShowListMenuForView(model_->items()[view_index], sender, event);
+ }
+}
+
+void ShelfView::RecordIconActivatedSource(const ui::Event& event) {
+ if (event.IsMouseEvent()) {
+ Shell::GetInstance()->metrics()->RecordUserMetricsAction(
+ UMA_LAUNCHER_BUTTON_PRESSED_WITH_MOUSE);
+ } else if (event.IsGestureEvent()) {
+ Shell::GetInstance()->metrics()->RecordUserMetricsAction(
+ UMA_LAUNCHER_BUTTON_PRESSED_WITH_TOUCH);
+ }
+}
+
+void ShelfView::RecordIconActivatedAction(
+ ShelfItemDelegate::PerformedAction performed_action) {
+ switch (performed_action) {
+ case ShelfItemDelegate::kNoAction:
+ case ShelfItemDelegate::kExistingWindowMinimized:
+ case ShelfItemDelegate::kAppListMenuShown:
+ break;
+ case ShelfItemDelegate::kNewWindowCreated:
+ Shell::GetInstance()->metrics()->RecordUserMetricsAction(
+ UMA_LAUNCHER_LAUNCH_TASK);
+ break;
+ case ShelfItemDelegate::kExistingWindowActivated:
+ Shell::GetInstance()->metrics()->RecordUserMetricsAction(
+ UMA_LAUNCHER_SWITCH_TASK);
+ break;
}
}
diff --git a/ash/shelf/shelf_view.h b/ash/shelf/shelf_view.h
index 037922e..56dd95b 100644
--- a/ash/shelf/shelf_view.h
+++ b/ash/shelf/shelf_view.h
@@ -5,10 +5,12 @@
#ifndef ASH_SHELF_SHELF_VIEW_H_
#define ASH_SHELF_SHELF_VIEW_H_
+#include <string>
#include <utility>
#include <vector>
#include "ash/shelf/shelf_button_host.h"
+#include "ash/shelf/shelf_item_delegate.h"
#include "ash/shelf/shelf_model_observer.h"
#include "ash/wm/gestures/shelf_gesture_handler.h"
#include "base/observer_list.h"
@@ -276,6 +278,13 @@ class ASH_EXPORT ShelfView : public views::View,
// Overridden from views::ButtonListener:
void ButtonPressed(views::Button* sender, const ui::Event& event) override;
+ // Records UMA statistics for the input source when an icon was activated.
+ void RecordIconActivatedSource(const ui::Event& event);
+
+ // Records UMA statistics for the action performed by activating an icon.
+ void RecordIconActivatedAction(
+ ShelfItemDelegate::PerformedAction performed_action);
+
// Show the list of all running items for this |item|. It will return true
// when the menu was shown and false if there were no possible items to
// choose from. |source| specifies the view which is responsible for showing
diff --git a/ash/shelf/shelf_view_unittest.cc b/ash/shelf/shelf_view_unittest.cc
index 39afb9a..beb6620 100644
--- a/ash/shelf/shelf_view_unittest.cc
+++ b/ash/shelf/shelf_view_unittest.cc
@@ -34,6 +34,8 @@
#include "base/compiler_specific.h"
#include "base/memory/scoped_ptr.h"
#include "base/strings/string_number_conversions.h"
+#include "base/test/user_action_tester.h"
+#include "base/time/time.h"
#include "ui/aura/test/aura_test_base.h"
#include "ui/aura/window.h"
#include "ui/aura/window_event_dispatcher.h"
@@ -43,6 +45,7 @@
#include "ui/events/event_constants.h"
#include "ui/events/event_utils.h"
#include "ui/events/test/event_generator.h"
+#include "ui/gfx/geometry/point.h"
#include "ui/views/view_model.h"
#include "ui/views/widget/widget.h"
#include "ui/views/widget/widget_delegate.h"
@@ -121,14 +124,21 @@ class ShelfViewIconObserverTest : public AshTestBase {
// TestShelfItemDelegate which tracks whether it gets selected.
class ShelfItemSelectionTracker : public TestShelfItemDelegate {
public:
- ShelfItemSelectionTracker() : TestShelfItemDelegate(NULL), selected_(false) {
- }
+ ShelfItemSelectionTracker()
+ : TestShelfItemDelegate(NULL),
+ selected_(false),
+ item_selected_action_(kNoAction) {}
~ShelfItemSelectionTracker() override {}
// Resets to the initial state.
void Reset() { selected_ = false; }
+ void set_item_selected_action(
+ ShelfItemDelegate::PerformedAction item_selected_action) {
+ item_selected_action_ = item_selected_action;
+ }
+
// Returns true if the delegate was selected.
bool WasSelected() {
return selected_;
@@ -138,12 +148,15 @@ class ShelfItemSelectionTracker : public TestShelfItemDelegate {
ShelfItemDelegate::PerformedAction ItemSelected(
const ui::Event& event) override {
selected_ = true;
- return kNoAction;
+ return item_selected_action_;
}
private:
bool selected_;
+ // The action returned from ItemSelected(const ui::Event&).
+ ShelfItemDelegate::PerformedAction item_selected_action_;
+
DISALLOW_COPY_AND_ASSIGN(ShelfItemSelectionTracker);
};
@@ -1762,6 +1775,82 @@ TEST_F(ShelfViewTest, AppListButtonTouchFeedbackCancellation) {
EXPECT_FALSE(Shell::GetInstance()->GetAppListTargetVisibility());
}
+// Verifies that Launcher_ButtonPressed_* UMA user actions are recorded when an
+// item is selected.
+TEST_F(ShelfViewTest,
+ Launcher_ButtonPressedUserActionsRecordedWhenItemSelected) {
+ base::UserActionTester user_action_tester;
+
+ ShelfID browser_shelf_id = model_->items()[browser_index_].id;
+ ShelfItemSelectionTracker* selection_tracker = new ShelfItemSelectionTracker;
+ item_manager_->SetShelfItemDelegate(
+ browser_shelf_id,
+ scoped_ptr<ShelfItemDelegate>(selection_tracker).Pass());
+
+ SimulateClick(browser_index_);
+ EXPECT_EQ(1,
+ user_action_tester.GetActionCount("Launcher_ButtonPressed_Mouse"));
+}
+
+// Verifies that Launcher_*Task UMA user actions are recorded when an item is
+// selected.
+TEST_F(ShelfViewTest, Launcher_TaskUserActionsRecordedWhenItemSelected) {
+ base::UserActionTester user_action_tester;
+
+ ShelfID browser_shelf_id = model_->items()[browser_index_].id;
+ ShelfItemSelectionTracker* selection_tracker = new ShelfItemSelectionTracker;
+ selection_tracker->set_item_selected_action(
+ ShelfItemDelegate::kNewWindowCreated);
+ item_manager_->SetShelfItemDelegate(
+ browser_shelf_id,
+ scoped_ptr<ShelfItemDelegate>(selection_tracker).Pass());
+
+ SimulateClick(browser_index_);
+ EXPECT_EQ(1, user_action_tester.GetActionCount("Launcher_LaunchTask"));
+}
+
+// Verifies that a Launcher_ButtonPressed_Mouse UMA user action is recorded when
+// an icon is activated by a mouse event.
+TEST_F(ShelfViewTest,
+ Launcher_ButtonPressed_MouseIsRecordedWhenIconActivatedByMouse) {
+ base::UserActionTester user_action_tester;
+ ui::MouseEvent mouse_event(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(),
+ base::TimeDelta(), 0, 0);
+ test_api_->RecordIconActivatedSource(mouse_event);
+ EXPECT_EQ(1,
+ user_action_tester.GetActionCount("Launcher_ButtonPressed_Mouse"));
+}
+
+// Verifies that a Launcher_ButtonPressed_Touch UMA user action is recorded when
+// an icon is activated by a touch event.
+TEST_F(ShelfViewTest,
+ Launcher_ButtonPressed_MouseIsRecordedWhenIconActivatedByTouch) {
+ base::UserActionTester user_action_tester;
+ ui::TouchEvent touch_event(ui::ET_GESTURE_TAP, gfx::Point(), 0,
+ base::TimeDelta());
+ test_api_->RecordIconActivatedSource(touch_event);
+ EXPECT_EQ(1,
+ user_action_tester.GetActionCount("Launcher_ButtonPressed_Touch"));
+}
+
+// Verifies that a Launcher_LaunchTask UMA user action is recorded when
+// selecting an icon causes a new window to be created.
+TEST_F(ShelfViewTest, Launcher_LaunchTaskIsRecordedWhenNewWindowIsCreated) {
+ base::UserActionTester user_action_tester;
+ test_api_->RecordIconActivatedAction(ShelfItemDelegate::kNewWindowCreated);
+ EXPECT_EQ(1, user_action_tester.GetActionCount("Launcher_LaunchTask"));
+}
+
+// Verifies that a Launcher_SwitchTask UMA user action is recorded when
+// selecting an icon causes an existing window to be activated.
+TEST_F(ShelfViewTest,
+ Launcher_SwitchTaskIsRecordedWhenExistingWindowIsActivated) {
+ base::UserActionTester user_action_tester;
+ test_api_->RecordIconActivatedAction(
+ ShelfItemDelegate::kExistingWindowActivated);
+ EXPECT_EQ(1, user_action_tester.GetActionCount("Launcher_SwitchTask"));
+}
+
class ShelfViewVisibleBoundsTest : public ShelfViewTest,
public testing::WithParamInterface<bool> {
public:
diff --git a/ash/test/shelf_view_test_api.cc b/ash/test/shelf_view_test_api.cc
index b829b87..715b986 100644
--- a/ash/test/shelf_view_test_api.cc
+++ b/ash/test/shelf_view_test_api.cc
@@ -118,6 +118,15 @@ void ShelfViewTestAPI::ButtonPressed(views::Button* sender,
return shelf_view_->ButtonPressed(sender, event);
}
+void ShelfViewTestAPI::RecordIconActivatedSource(const ui::Event& event) {
+ shelf_view_->RecordIconActivatedSource(event);
+}
+
+void ShelfViewTestAPI::RecordIconActivatedAction(
+ ShelfItemDelegate::PerformedAction performed_action) {
+ shelf_view_->RecordIconActivatedAction(performed_action);
+}
+
bool ShelfViewTestAPI::SameDragType(ShelfItemType typea,
ShelfItemType typeb) const {
return shelf_view_->SameDragType(typea, typeb);
diff --git a/ash/test/shelf_view_test_api.h b/ash/test/shelf_view_test_api.h
index 7916ea7..04e5d40 100644
--- a/ash/test/shelf_view_test_api.h
+++ b/ash/test/shelf_view_test_api.h
@@ -5,6 +5,7 @@
#ifndef ASH_TEST_SHELF_VIEW_TEST_API_H_
#define ASH_TEST_SHELF_VIEW_TEST_API_H_
+#include "ash/shelf/shelf_item_delegate.h"
#include "ash/shelf/shelf_item_types.h"
#include "base/basictypes.h"
@@ -81,6 +82,14 @@ class ShelfViewTestAPI {
// Wrapper for ShelfView::ButtonPressed.
void ButtonPressed(views::Button* sender, const ui::Event& event);
+ // Wrapper for ShelfView::RecordIconActivatedSource(const ui::Event&).
+ void RecordIconActivatedSource(const ui::Event& event);
+
+ // Wrapper for ShelfView::RecordIconActivatedAction(
+ // ShelfItemDelegate::PerformedAction).
+ void RecordIconActivatedAction(
+ ShelfItemDelegate::PerformedAction performed_action);
+
// Wrapper for ShelfView::SameDragType.
bool SameDragType(ShelfItemType typea, ShelfItemType typeb) const;