picker: Add CrOS Search engine to `PickerClientImpl`
At the moment, `PickerClientImpl::StartCrosSearch` does not return any
search results as there are no providers added to the search engine.
Bug: b:316936687
Change-Id: Ie0d212cbdbf06350740cfc1934e4f34874de0fa9
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5251929
Reviewed-by: Darren Shen <shend@chromium.org>
Commit-Queue: Michael Cui <mlcui@google.com>
Cr-Commit-Position: refs/heads/main@{#1257225}
diff --git a/chrome/browser/ui/ash/picker/picker_client_impl.cc b/chrome/browser/ui/ash/picker/picker_client_impl.cc
index 4b6e626..b09899c 100644
--- a/chrome/browser/ui/ash/picker/picker_client_impl.cc
+++ b/chrome/browser/ui/ash/picker/picker_client_impl.cc
@@ -14,6 +14,8 @@
#include "base/check.h"
#include "base/functional/bind.h"
#include "base/functional/callback.h"
+#include "chrome/browser/ash/app_list/search/chrome_search_result.h"
+#include "chrome/browser/ash/app_list/search/search_engine.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/ash/ash_web_view_impl.h"
#include "chromeos/ash/components/browser_context_helper/browser_context_helper.h"
@@ -41,6 +43,21 @@
std::move(callback).Run(std::string());
}
+void OnCrosSearchResultsUpdated(
+ PickerClientImpl::CrosSearchResultsCallback callback,
+ ash::AppListSearchResultType result_type,
+ std::vector<std::unique_ptr<ChromeSearchResult>> results) {
+ std::vector<ash::PickerSearchResult> picker_results;
+
+ picker_results.reserve(results.size());
+ for (std::unique_ptr<ChromeSearchResult>& result : results) {
+ // TODO: b/316936687 - Handle results for each provider.
+ picker_results.push_back(ash::PickerSearchResult::Text(result->title()));
+ }
+
+ callback.Run(result_type, std::move(picker_results));
+}
+
} // namespace
PickerClientImpl::PickerClientImpl(ash::PickerController* controller)
@@ -118,9 +135,10 @@
void PickerClientImpl::StartCrosSearch(const std::u16string& query,
CrosSearchResultsCallback callback) {
- // TODO: b/316936687 - Call CrOS Search here.
- callback.Run(ash::AppListSearchResultType::kOmnibox,
- {ash::PickerSearchResult::Text(query)});
+ CHECK(search_engine_);
+ search_engine_->StartSearch(
+ query, app_list::SearchOptions(),
+ base::BindRepeating(&OnCrosSearchResultsUpdated, std::move(callback)));
}
void PickerClientImpl::ActiveUserChanged(user_manager::User* active_user) {
@@ -141,5 +159,11 @@
}
void PickerClientImpl::SetProfile(Profile* profile) {
+ if (profile_ == profile) {
+ return;
+ }
+
profile_ = profile;
+
+ search_engine_ = std::make_unique<app_list::SearchEngine>(profile_);
}
diff --git a/chrome/browser/ui/ash/picker/picker_client_impl.h b/chrome/browser/ui/ash/picker/picker_client_impl.h
index ba47d2b5..ccac318 100644
--- a/chrome/browser/ui/ash/picker/picker_client_impl.h
+++ b/chrome/browser/ui/ash/picker/picker_client_impl.h
@@ -5,6 +5,7 @@
#ifndef CHROME_BROWSER_UI_ASH_PICKER_PICKER_CLIENT_IMPL_H_
#define CHROME_BROWSER_UI_ASH_PICKER_PICKER_CLIENT_IMPL_H_
+#include <memory>
#include <string>
#include "ash/public/cpp/picker/picker_client.h"
@@ -13,6 +14,10 @@
class Profile;
+namespace app_list {
+class SearchEngine;
+}
+
namespace ash {
class PickerController;
}
@@ -51,6 +56,8 @@
raw_ptr<ash::PickerController> controller_ = nullptr;
raw_ptr<Profile> profile_ = nullptr;
+ std::unique_ptr<app_list::SearchEngine> search_engine_;
+
base::WeakPtrFactory<PickerClientImpl> weak_factory_{this};
};