summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorderat@chromium.org <derat@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-01-06 01:05:07 +0000
committerderat@chromium.org <derat@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-01-06 01:05:07 +0000
commit176c18328ad6e115b7a191e09e09266671f9cac1 (patch)
tree9652d7ac4eed628d90e8c7323d79d1d8e1f383a5
parenta857436bca04364cc7481994cb78ec7a56191dda (diff)
downloadchromium_src-176c18328ad6e115b7a191e09e09266671f9cac1.zip
chromium_src-176c18328ad6e115b7a191e09e09266671f9cac1.tar.gz
chromium_src-176c18328ad6e115b7a191e09e09266671f9cac1.tar.bz2
chromeos: Add metrics for various accelerators.
This adds reporting of the accelerators used to invoke various actions (e.g. Back can be invoked by Alt-Left, Backspace, or F1 on Chrome OS). These stats will be used as input for future keyboard designs. Also removed the F5 "System options" accelerator, which is a no-op -- Chrome never sees this key since the window manager grabs it. BUG=chromium-os:10403 TEST=replaced the metrics calls with logging statements and checked that they were executed when expected Review URL: http://codereview.chromium.org/6035010 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@70572 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/chromeos/system_key_event_listener.cc7
-rw-r--r--chrome/browser/ui/browser.h1
-rw-r--r--chrome/browser/ui/views/accelerator_table_gtk.cc3
-rw-r--r--chrome/browser/ui/views/frame/browser_view.cc72
-rw-r--r--chrome/browser/ui/views/frame/browser_view.h6
5 files changed, 83 insertions, 6 deletions
diff --git a/chrome/browser/chromeos/system_key_event_listener.cc b/chrome/browser/chromeos/system_key_event_listener.cc
index 2df12dd..8e5bd41 100644
--- a/chrome/browser/chromeos/system_key_event_listener.cc
+++ b/chrome/browser/chromeos/system_key_event_listener.cc
@@ -10,6 +10,7 @@
#include "chrome/browser/chromeos/audio_handler.h"
#include "chrome/browser/chromeos/brightness_bubble.h"
#include "chrome/browser/chromeos/volume_bubble.h"
+#include "chrome/browser/metrics/user_metrics.h"
#include "third_party/cros/chromeos_wm_ipc_enums.h"
namespace chromeos {
@@ -89,14 +90,20 @@ GdkFilterReturn SystemKeyEventListener::GdkEventFilter(GdkXEvent* gxevent,
if (!(xevent->xkey.state & (Mod1Mask | ShiftMask | ControlMask))) {
if ((keycode == listener->key_f8_) ||
(keycode == listener->key_volume_mute_)) {
+ if (keycode == listener->key_f8_)
+ UserMetrics::RecordAction(UserMetricsAction("Accel_VolumeMute_F8"));
listener->OnVolumeMute();
return GDK_FILTER_REMOVE;
} else if ((keycode == listener->key_f9_) ||
keycode == listener->key_volume_down_) {
+ if (keycode == listener->key_f9_)
+ UserMetrics::RecordAction(UserMetricsAction("Accel_VolumeDown_F9"));
listener->OnVolumeDown();
return GDK_FILTER_REMOVE;
} else if ((keycode == listener->key_f10_) ||
(keycode == listener->key_volume_up_)) {
+ if (keycode == listener->key_f10_)
+ UserMetrics::RecordAction(UserMetricsAction("Accel_VolumeUp_F10"));
listener->OnVolumeUp();
return GDK_FILTER_REMOVE;
}
diff --git a/chrome/browser/ui/browser.h b/chrome/browser/ui/browser.h
index cdbd7fa..cc1686d 100644
--- a/chrome/browser/ui/browser.h
+++ b/chrome/browser/ui/browser.h
@@ -191,6 +191,7 @@ class Browser : public TabHandlerDelegate,
ToolbarModel* toolbar_model() { return &toolbar_model_; }
const SessionID& session_id() const { return session_id_; }
CommandUpdater* command_updater() { return &command_updater_; }
+ bool block_command_execution() const { return block_command_execution_; }
// Get the FindBarController for this browser, creating it if it does not
// yet exist.
diff --git a/chrome/browser/ui/views/accelerator_table_gtk.cc b/chrome/browser/ui/views/accelerator_table_gtk.cc
index fae032a..c87580b 100644
--- a/chrome/browser/ui/views/accelerator_table_gtk.cc
+++ b/chrome/browser/ui/views/accelerator_table_gtk.cc
@@ -142,9 +142,6 @@ const AcceleratorMapping kAcceleratorMap[] = {
{ app::VKEY_F, false, false, true, IDC_SHOW_APP_MENU},
{ app::VKEY_E, false, false, true, IDC_SHOW_APP_MENU},
{ app::VKEY_ESCAPE, false, false, false, IDC_STOP },
-#if defined(OS_CHROMEOS)
- { app::VKEY_F5, false, false, false, IDC_SYSTEM_OPTIONS },
-#endif
{ app::VKEY_ESCAPE, true, false, false, IDC_TASK_MANAGER },
{ app::VKEY_U, false, true, false, IDC_VIEW_SOURCE },
{ app::VKEY_OEM_MINUS, false, true, false, IDC_ZOOM_MINUS },
diff --git a/chrome/browser/ui/views/frame/browser_view.cc b/chrome/browser/ui/views/frame/browser_view.cc
index d1d2352..1559980 100644
--- a/chrome/browser/ui/views/frame/browser_view.cc
+++ b/chrome/browser/ui/views/frame/browser_view.cc
@@ -25,6 +25,7 @@
#include "chrome/browser/dom_ui/bug_report_ui.h"
#include "chrome/browser/download/download_manager.h"
#include "chrome/browser/instant/instant_controller.h"
+#include "chrome/browser/metrics/user_metrics.h"
#include "chrome/browser/ntp_background_util.h"
#include "chrome/browser/page_info_window.h"
#include "chrome/browser/prefs/pref_service.h"
@@ -607,8 +608,10 @@ bool BrowserView::AcceleratorPressed(const views::Accelerator& accelerator) {
std::map<views::Accelerator, int>::const_iterator iter =
accelerator_table_.find(accelerator);
DCHECK(iter != accelerator_table_.end());
-
int command_id = iter->second;
+
+ if (!browser_->block_command_execution())
+ UpdateAcceleratorMetrics(accelerator, command_id);
return browser_->ExecuteCommandIfEnabled(command_id);
}
@@ -1277,11 +1280,13 @@ bool BrowserView::PreHandleKeyboardEvent(const NativeWebKeyboardEvent& event,
// Executing the command may cause |this| object to be destroyed.
#if defined(OS_LINUX) && !defined(TOUCH_UI)
- if (browser_->IsReservedCommand(id) && !event.match_edit_command)
+ if (browser_->IsReservedCommand(id) && !event.match_edit_command) {
#else
- if (browser_->IsReservedCommand(id))
+ if (browser_->IsReservedCommand(id)) {
#endif
+ UpdateAcceleratorMetrics(accelerator, id);
return browser_->ExecuteCommandIfEnabled(id);
+ }
DCHECK(is_keyboard_shortcut != NULL);
*is_keyboard_shortcut = true;
@@ -2460,6 +2465,67 @@ void BrowserView::InitHangMonitor() {
#endif
}
+void BrowserView::UpdateAcceleratorMetrics(
+ const views::Accelerator& accelerator, int command_id) {
+#if defined(OS_CHROMEOS)
+ // Collect information about the relative popularity of various accelerators
+ // on Chrome OS.
+ const app::KeyboardCode key_code = accelerator.GetKeyCode();
+ switch (command_id) {
+ case IDC_BACK:
+ if (key_code == app::VKEY_BACK)
+ UserMetrics::RecordAction(UserMetricsAction("Accel_Back_Backspace"));
+ else if (key_code == app::VKEY_F1)
+ UserMetrics::RecordAction(UserMetricsAction("Accel_Back_F1"));
+ else if (key_code == app::VKEY_LEFT)
+ UserMetrics::RecordAction(UserMetricsAction("Accel_Back_Left"));
+ break;
+ case IDC_FORWARD:
+ if (key_code == app::VKEY_BACK)
+ UserMetrics::RecordAction(UserMetricsAction("Accel_Forward_Backspace"));
+ else if (key_code == app::VKEY_F2)
+ UserMetrics::RecordAction(UserMetricsAction("Accel_Forward_F2"));
+ else if (key_code == app::VKEY_LEFT)
+ UserMetrics::RecordAction(UserMetricsAction("Accel_Forward_Right"));
+ break;
+ case IDC_RELOAD:
+ case IDC_RELOAD_IGNORING_CACHE:
+ if (key_code == app::VKEY_R)
+ UserMetrics::RecordAction(UserMetricsAction("Accel_Reload_R"));
+ else if (key_code == app::VKEY_F3)
+ UserMetrics::RecordAction(UserMetricsAction("Accel_Reload_F3"));
+ break;
+ case IDC_FULLSCREEN:
+ if (key_code == app::VKEY_F4)
+ UserMetrics::RecordAction(UserMetricsAction("Accel_Fullscreen_F4"));
+ break;
+ case IDC_NEW_TAB:
+ if (key_code == app::VKEY_T)
+ UserMetrics::RecordAction(UserMetricsAction("Accel_NewTab_T"));
+ break;
+ case IDC_SEARCH:
+ if (key_code == app::VKEY_LWIN)
+ UserMetrics::RecordAction(UserMetricsAction("Accel_Search_LWin"));
+ break;
+ case IDC_FOCUS_LOCATION:
+ if (key_code == app::VKEY_D)
+ UserMetrics::RecordAction(UserMetricsAction("Accel_FocusLocation_D"));
+ else if (key_code == app::VKEY_L)
+ UserMetrics::RecordAction(UserMetricsAction("Accel_FocusLocation_L"));
+ break;
+ case IDC_FOCUS_SEARCH:
+ if (key_code == app::VKEY_E)
+ UserMetrics::RecordAction(UserMetricsAction("Accel_FocusSearch_E"));
+ else if (key_code == app::VKEY_K)
+ UserMetrics::RecordAction(UserMetricsAction("Accel_FocusSearch_K"));
+ break;
+ default:
+ // Do nothing.
+ break;
+ }
+#endif
+}
+
void BrowserView::ProcessTabSelected(TabContentsWrapper* new_contents,
bool change_tab_contents) {
// Update various elements that are interested in knowing the current
diff --git a/chrome/browser/ui/views/frame/browser_view.h b/chrome/browser/ui/views/frame/browser_view.h
index 19635e6..645b425 100644
--- a/chrome/browser/ui/views/frame/browser_view.h
+++ b/chrome/browser/ui/views/frame/browser_view.h
@@ -506,6 +506,12 @@ class BrowserView : public BrowserBubbleHost,
// Initialize the hung plugin detector.
void InitHangMonitor();
+ // Possibly records a user metrics action corresponding to the passed-in
+ // accelerator. Only implemented for Chrome OS, where we're interested in
+ // learning about how frequently the top-row keys are used.
+ void UpdateAcceleratorMetrics(const views::Accelerator& accelerator,
+ int command_id);
+
// Invoked from TabSelectedAt or when instant is made active. Is
// |change_tab_contents| is true, |new_contents| is added to the view
// hierarchy, if |change_tab_contents| is false, it's assumed |new_contents|