search_controller.h revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
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#include "ui/app_list/speech_ui_model_observer.h" 15 16class AppListControllerDelegate; 17class Profile; 18 19namespace app_list { 20 21class History; 22class SearchBoxModel; 23class SearchProvider; 24class SearchResult; 25class SpeechUIModel; 26 27// Controller that collects query from given SearchBoxModel, dispatches it 28// to all search providers, then invokes the mixer to mix and to publish the 29// results to the given SearchResults UI model. 30class SearchController : public SpeechUIModelObserver { 31 public: 32 SearchController(Profile* profile, 33 SearchBoxModel* search_box, 34 AppListModel::SearchResults* results, 35 SpeechUIModel* speech_ui, 36 AppListControllerDelegate* list_controller); 37 virtual ~SearchController(); 38 39 void Init(); 40 41 void Start(); 42 void Stop(); 43 44 void OpenResult(SearchResult* result, int event_flags); 45 void InvokeResultAction(SearchResult* result, 46 int action_index, 47 int event_flags); 48 49 private: 50 typedef ScopedVector<SearchProvider> Providers; 51 52 // Takes ownership of |provider| and associates it with given mixer group. 53 void AddProvider(Mixer::GroupId group, 54 scoped_ptr<SearchProvider> provider); 55 56 // Invoked when the search results are changed. 57 void OnResultsChanged(); 58 59 // SpeechUIModelObserver overrides: 60 virtual void OnSpeechRecognitionStateChanged( 61 SpeechRecognitionState new_state) OVERRIDE; 62 63 Profile* profile_; 64 SearchBoxModel* search_box_; 65 SpeechUIModel* speech_ui_; 66 AppListControllerDelegate* list_controller_; 67 68 bool dispatching_query_; 69 Providers providers_; 70 scoped_ptr<Mixer> mixer_; 71 History* history_; // KeyedService, not owned. 72 73 base::OneShotTimer<SearchController> stop_timer_; 74 75 DISALLOW_COPY_AND_ASSIGN(SearchController); 76}; 77 78} // namespace app_list 79 80#endif // CHROME_BROWSER_UI_APP_LIST_SEARCH_SEARCH_CONTROLLER_H_ 81