diff options
author | bruthig <bruthig@chromium.org> | 2015-04-22 10:08:14 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-04-22 17:10:30 +0000 |
commit | bc37a675e8579e38807e83c2e5d8d16be61f8699 (patch) | |
tree | 09dc5e59967e290d41e557f21507181cf2e37d93 /ash | |
parent | 83c639f0493539896ac7c2e8db0ac93898955599 (diff) | |
download | chromium_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.cc | 3 | ||||
-rw-r--r-- | ash/metrics/user_metrics_recorder.h | 7 | ||||
-rw-r--r-- | ash/shelf/shelf_view.cc | 64 | ||||
-rw-r--r-- | ash/shelf/shelf_view.h | 9 | ||||
-rw-r--r-- | ash/shelf/shelf_view_unittest.cc | 95 | ||||
-rw-r--r-- | ash/test/shelf_view_test_api.cc | 9 | ||||
-rw-r--r-- | ash/test/shelf_view_test_api.h | 9 |
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; |