search_controller.h revision 90dce4d38c5ff5333bea97d859d4e484e27edf0c
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.h" 12#include "chrome/browser/ui/app_list/search/mixer.h" 13#include "ui/app_list/app_list_model.h" 14 15class AppListControllerDelegate; 16class Profile; 17 18namespace app_list { 19 20class History; 21class SearchBoxModel; 22class SearchProvider; 23class 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. 28class 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