Commit d255ccd2 authored by Jenny Zhang's avatar Jenny Zhang Committed by Commit Bot

Log unique search queries entered by user.

Track number of unique search queries issued. Will be used to calculate overall Search CTR.
A unique search query is defined as whenever the search box goes from empty to non-empty.

TBR=holte@chromium.org

Bug: 1035529
Change-Id: Iaeadb897c5ad86ba6a65c9b49edb4ff8fb427d4c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1977187
Commit-Queue: Jenny Zhang <jennyz@chromium.org>
Reviewed-by: default avatarAndrew Xu <andrewxu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#729549}
parent fc4eff61
...@@ -80,6 +80,12 @@ float GetAssistantButtonOpacityForState(AppListState state) { ...@@ -80,6 +80,12 @@ float GetAssistantButtonOpacityForState(AppListState state) {
return 1.f; return 1.f;
} }
bool IsTrimmedQueryEmpty(const base::string16& query) {
base::string16 trimmed_query;
base::TrimWhitespace(query, base::TrimPositions::TRIM_ALL, &trimmed_query);
return trimmed_query.empty();
}
} // namespace } // namespace
SearchBoxView::SearchBoxView(search_box::SearchBoxViewDelegate* delegate, SearchBoxView::SearchBoxView(search_box::SearchBoxViewDelegate* delegate,
...@@ -100,6 +106,7 @@ void SearchBoxView::Init(bool is_tablet_mode) { ...@@ -100,6 +106,7 @@ void SearchBoxView::Init(bool is_tablet_mode) {
if (app_list_features::IsZeroStateSuggestionsEnabled()) if (app_list_features::IsZeroStateSuggestionsEnabled())
set_show_close_button_when_active(true); set_show_close_button_when_active(true);
SearchBoxViewBase::Init(); SearchBoxViewBase::Init();
current_query_ = search_box()->GetText();
} }
void SearchBoxView::ResetForShow() { void SearchBoxView::ResetForShow() {
...@@ -115,6 +122,7 @@ void SearchBoxView::ResetForShow() { ...@@ -115,6 +122,7 @@ void SearchBoxView::ResetForShow() {
void SearchBoxView::ClearSearch() { void SearchBoxView::ClearSearch() {
search_box::SearchBoxViewBase::ClearSearch(); search_box::SearchBoxViewBase::ClearSearch();
current_query_.clear();
app_list_view_->SetStateFromSearchBoxView( app_list_view_->SetStateFromSearchBoxView(
true, false /*triggered_by_contents_change*/); true, false /*triggered_by_contents_change*/);
} }
...@@ -494,6 +502,12 @@ void SearchBoxView::ClearAutocompleteText() { ...@@ -494,6 +502,12 @@ void SearchBoxView::ClearAutocompleteText() {
void SearchBoxView::ContentsChanged(views::Textfield* sender, void SearchBoxView::ContentsChanged(views::Textfield* sender,
const base::string16& new_contents) { const base::string16& new_contents) {
if (IsTrimmedQueryEmpty(current_query_) && !IsSearchBoxTrimmedQueryEmpty()) {
// User enters a new search query. Record the action.
base::RecordAction(base::UserMetricsAction("AppList_SearchQueryStarted"));
}
current_query_ = new_contents;
// Update autocomplete text highlight range to track user typed text. // Update autocomplete text highlight range to track user typed text.
if (ShouldProcessAutocomplete()) if (ShouldProcessAutocomplete())
ResetHighlightRange(); ResetHighlightRange();
......
...@@ -162,6 +162,8 @@ class APP_LIST_EXPORT SearchBoxView : public search_box::SearchBoxViewBase, ...@@ -162,6 +162,8 @@ class APP_LIST_EXPORT SearchBoxView : public search_box::SearchBoxViewBase,
bool HandleKeyEventForDisabledSearchBoxSelection( bool HandleKeyEventForDisabledSearchBoxSelection(
const ui::KeyEvent& key_event); const ui::KeyEvent& key_event);
base::string16 current_query_;
// The range of highlighted text for autocomplete. // The range of highlighted text for autocomplete.
gfx::Range highlight_range_; gfx::Range highlight_range_;
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
#include "ash/public/cpp/app_list/vector_icons/vector_icons.h" #include "ash/public/cpp/app_list/vector_icons/vector_icons.h"
#include "base/macros.h" #include "base/macros.h"
#include "base/strings/utf_string_conversions.h" #include "base/strings/utf_string_conversions.h"
#include "base/test/metrics/user_action_tester.h"
#include "base/test/scoped_feature_list.h" #include "base/test/scoped_feature_list.h"
#include "ui/base/ime/composition_text.h" #include "ui/base/ime/composition_text.h"
#include "ui/chromeos/search_box/search_box_constants.h" #include "ui/chromeos/search_box/search_box_constants.h"
...@@ -417,6 +418,23 @@ TEST_F(SearchBoxViewTest, ChangeSelectionWhileResultsAreBeingRemoved) { ...@@ -417,6 +418,23 @@ TEST_F(SearchBoxViewTest, ChangeSelectionWhileResultsAreBeingRemoved) {
result_page_view->result_selection_controller()->selected_result()); result_page_view->result_selection_controller()->selected_result());
} }
TEST_F(SearchBoxViewTest, NewSearchQueryActionRecordedWhenUserType) {
base::UserActionTester user_action_tester;
// User starts to type a character in search box.
KeyPress(ui::VKEY_A);
EXPECT_EQ(1, user_action_tester.GetActionCount("AppList_SearchQueryStarted"));
// User continues to type another character.
KeyPress(ui::VKEY_B);
EXPECT_EQ(1, user_action_tester.GetActionCount("AppList_SearchQueryStarted"));
// User erases the query in the search box and types a new one.
KeyPress(ui::VKEY_BACK);
KeyPress(ui::VKEY_BACK);
KeyPress(ui::VKEY_C);
EXPECT_EQ(2, user_action_tester.GetActionCount("AppList_SearchQueryStarted"));
}
class SearchBoxViewAssistantButtonTest : public SearchBoxViewTest { class SearchBoxViewAssistantButtonTest : public SearchBoxViewTest {
public: public:
SearchBoxViewAssistantButtonTest() = default; SearchBoxViewAssistantButtonTest() = default;
......
...@@ -2485,6 +2485,13 @@ should be able to be added at any place in this file. ...@@ -2485,6 +2485,13 @@ should be able to be added at any place in this file.
<description>Please enter the description of this user action.</description> <description>Please enter the description of this user action.</description>
</action> </action>
<action name="AppList_SearchQueryStarted">
<owner>jennyz@chromium.org</owner>
<description>
User starts a new search query in launcher search box.
</description>
</action>
<action name="AppList_ShowPlayStoreQueryResults"> <action name="AppList_ShowPlayStoreQueryResults">
<owner>jennyz@chromium.org</owner> <owner>jennyz@chromium.org</owner>
<owner>newcomer@chromium.org</owner> <owner>newcomer@chromium.org</owner>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment