1 // Copyright 2015 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CHROME_BROWSER_UI_APP_LIST_SEARCH_LAUNCHER_SEARCH_LAUNCHER_SEARCH_PROVIDER_H_ 6 #define CHROME_BROWSER_UI_APP_LIST_SEARCH_LAUNCHER_SEARCH_LAUNCHER_SEARCH_PROVIDER_H_ 7 8 #include <map> 9 #include <memory> 10 #include <vector> 11 12 #include "base/macros.h" 13 #include "base/strings/string16.h" 14 #include "base/time/time.h" 15 #include "base/timer/timer.h" 16 #include "chrome/browser/profiles/profile.h" 17 #include "chrome/browser/ui/app_list/search/launcher_search/launcher_search_result.h" 18 #include "chrome/browser/ui/app_list/search/search_provider.h" 19 #include "chromeos/components/string_matching/tokenized_string.h" 20 #include "extensions/common/extension_id.h" 21 22 namespace app_list { 23 24 // LauncherSearchProvider dispatches queries to extensions and fetches the 25 // results from them via chrome.launcherSearchProvider API. 26 class LauncherSearchProvider : public SearchProvider { 27 public: 28 explicit LauncherSearchProvider(Profile* profile); 29 ~LauncherSearchProvider() override; 30 31 void Start(const base::string16& query) override; 32 void SetSearchResults( 33 const extensions::ExtensionId& extension_id, 34 std::vector<std::unique_ptr<LauncherSearchResult>> extension_results); 35 ash::AppListSearchResultType ResultType() override; 36 37 private: 38 // Delays query for |kLauncherSearchProviderQueryDelayInMs|. This dispatches 39 // the latest query after no more calls to Start() for the delay duration. 40 void DelayQuery(const base::Closure& closure); 41 42 // Dispatches |query| to LauncherSearchProvider service. 43 void StartInternal(const base::string16& query); 44 45 // The search results of each extension. 46 std::map<extensions::ExtensionId, 47 std::vector<std::unique_ptr<LauncherSearchResult>>> 48 extension_results_; 49 50 // A timer to delay query. 51 base::OneShotTimer query_timer_; 52 53 // The timestamp of the last query. 54 base::Time last_query_time_; 55 56 base::TimeTicks query_start_time_; 57 58 base::Optional<chromeos::string_matching::TokenizedString> 59 last_tokenized_query_; 60 61 // The reference to profile to get LauncherSearchProvider service. 62 Profile* profile_; 63 64 base::WeakPtrFactory<LauncherSearchProvider> weak_ptr_factory_{this}; 65 66 DISALLOW_COPY_AND_ASSIGN(LauncherSearchProvider); 67 }; 68 69 } // namespace app_list 70 71 #endif // CHROME_BROWSER_UI_APP_LIST_SEARCH_LAUNCHER_SEARCH_LAUNCHER_SEARCH_PROVIDER_H_ 72