1 // Copyright 2013 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_SEARCH_CONTROLLER_H_ 6 #define CHROME_BROWSER_UI_APP_LIST_SEARCH_SEARCH_CONTROLLER_H_ 7 8 #include "base/basictypes.h" 9 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_vector.h" 11 #include "base/timer/timer.h" 12 #include "chrome/browser/ui/app_list/search/mixer.h" 13 #include "ui/app_list/app_list_model.h" 14 15 class AppListControllerDelegate; 16 class Profile; 17 18 namespace app_list { 19 20 class History; 21 class SearchBoxModel; 22 class SearchProvider; 23 class SearchResult; 24 25 // Controller that collects query from given SearchBoxModel, dispatches it 26 // to all search providers, then invokes the mixer to mix and to publish the 27 // results to the given SearchResults UI model. 28 class SearchController { 29 public: 30 SearchController(Profile* profile, 31 SearchBoxModel* search_box, 32 AppListModel::SearchResults* results, 33 AppListControllerDelegate* list_controller); 34 ~SearchController(); 35 36 void Init(); 37 38 void Start(); 39 void Stop(); 40 41 void OpenResult(SearchResult* result, int event_flags); 42 void InvokeResultAction(SearchResult* result, 43 int action_index, 44 int event_flags); 45 46 private: 47 typedef ScopedVector<SearchProvider> Providers; 48 49 // Takes ownership of |provider| and associates it with given mixer group. 50 void AddProvider(Mixer::GroupId group, 51 scoped_ptr<SearchProvider> provider); 52 53 // Invoked when the search results are changed. 54 void OnResultsChanged(); 55 56 Profile* profile_; 57 SearchBoxModel* search_box_; 58 AppListControllerDelegate* list_controller_; 59 60 bool dispatching_query_; 61 Providers providers_; 62 scoped_ptr<Mixer> mixer_; 63 History* history_; // BrowserContextKeyedService, not owned. 64 65 base::OneShotTimer<SearchController> stop_timer_; 66 67 DISALLOW_COPY_AND_ASSIGN(SearchController); 68 }; 69 70 } // namespace app_list 71 72 #endif // CHROME_BROWSER_UI_APP_LIST_SEARCH_SEARCH_CONTROLLER_H_ 73