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