diff options
author | derat@chromium.org <derat@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-01-06 01:05:07 +0000 |
---|---|---|
committer | derat@chromium.org <derat@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-01-06 01:05:07 +0000 |
commit | 176c18328ad6e115b7a191e09e09266671f9cac1 (patch) | |
tree | 9652d7ac4eed628d90e8c7323d79d1d8e1f383a5 | |
parent | a857436bca04364cc7481994cb78ec7a56191dda (diff) | |
download | chromium_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.cc | 7 | ||||
-rw-r--r-- | chrome/browser/ui/browser.h | 1 | ||||
-rw-r--r-- | chrome/browser/ui/views/accelerator_table_gtk.cc | 3 | ||||
-rw-r--r-- | chrome/browser/ui/views/frame/browser_view.cc | 72 | ||||
-rw-r--r-- | chrome/browser/ui/views/frame/browser_view.h | 6 |
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| |