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