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

Fix the two subtle issues in ArcPlayStoreSearchProvider.

Fixed two issues in ArcPlayStoreSearchProvider that may affect user experiences.
1. Do not publish the results from play store for a staled query.
2. Clear the old play store results when user has issued a new query.

Bug: 967060
Change-Id: I7bd3abdad424ee881a475d2776c877cc4d8c5696
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1629713
Commit-Queue: Jenny Zhang <jennyz@chromium.org>
Reviewed-by: default avatarXiyuan Xia <xiyuan@chromium.org>
Cr-Commit-Position: refs/heads/master@{#663877}
parent d7eec688
......@@ -96,6 +96,11 @@ ArcPlayStoreSearchProvider::ArcPlayStoreSearchProvider(
ArcPlayStoreSearchProvider::~ArcPlayStoreSearchProvider() = default;
void ArcPlayStoreSearchProvider::Start(const base::string16& query) {
last_query_ = query;
// Clear any results from the previous query.
ClearResultsSilently();
arc::mojom::AppInstance* app_instance =
arc::ArcServiceManager::Get()
? ARC_GET_INSTANCE_FOR_METHOD(
......@@ -104,17 +109,18 @@ void ArcPlayStoreSearchProvider::Start(const base::string16& query) {
: nullptr;
if (app_instance == nullptr || query.empty()) {
ClearResults();
return;
}
app_instance->GetRecentAndSuggestedAppsFromPlayStore(
base::UTF16ToUTF8(query), max_results_,
base::Bind(&ArcPlayStoreSearchProvider::OnResults,
weak_ptr_factory_.GetWeakPtr(), base::TimeTicks::Now()));
weak_ptr_factory_.GetWeakPtr(), query,
base::TimeTicks::Now()));
}
void ArcPlayStoreSearchProvider::OnResults(
const base::string16& query,
base::TimeTicks query_start_time,
arc::ArcPlayStoreSearchRequestState state,
std::vector<arc::mojom::AppDiscoveryResultPtr> results) {
......@@ -122,7 +128,17 @@ void ArcPlayStoreSearchProvider::OnResults(
DCHECK(results.empty());
UMA_HISTOGRAM_ENUMERATION(kAppListPlayStoreQueryStateHistogram, state,
arc::ArcPlayStoreSearchRequestState::STATE_COUNT);
ClearResults();
return;
}
// Play store could have a long latency that when the results come back,
// user has entered a different query. Do not return the staled results
// from the previous query in such case.
if (query != last_query_) {
UMA_HISTOGRAM_ENUMERATION(
kAppListPlayStoreQueryStateHistogram,
arc::ArcPlayStoreSearchRequestState::FAILED_TO_CALL_CANCEL,
arc::ArcPlayStoreSearchRequestState::STATE_COUNT);
return;
}
......@@ -134,7 +150,6 @@ void ArcPlayStoreSearchProvider::OnResults(
kAppListPlayStoreQueryStateHistogram,
arc::ArcPlayStoreSearchRequestState::CHROME_GOT_INVALID_RESULT,
arc::ArcPlayStoreSearchRequestState::STATE_COUNT);
ClearResults();
return;
}
......
......@@ -32,13 +32,15 @@ class ArcPlayStoreSearchProvider : public SearchProvider {
void Start(const base::string16& query) override;
private:
void OnResults(base::TimeTicks query_start_time,
void OnResults(const base::string16& query,
base::TimeTicks query_start_time,
arc::ArcPlayStoreSearchRequestState state,
std::vector<arc::mojom::AppDiscoveryResultPtr> results);
const int max_results_;
Profile* const profile_; // Owned by ProfileInfo.
AppListControllerDelegate* const list_controller_; // Owned by AppListClient.
base::string16 last_query_; // Most recent query issued.
base::WeakPtrFactory<ArcPlayStoreSearchProvider> weak_ptr_factory_;
DISALLOW_COPY_AND_ASSIGN(ArcPlayStoreSearchProvider);
......
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