search_provider.h revision f8ee788a64d60abd8f2d742a5fdedde054ecd910
1// Copyright 2014 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 UI_APP_LIST_SEARCH_PROVIDER_H_
6#define UI_APP_LIST_SEARCH_PROVIDER_H_
7
8#include "base/basictypes.h"
9#include "base/callback.h"
10#include "base/memory/scoped_ptr.h"
11#include "base/memory/scoped_vector.h"
12#include "base/strings/string16.h"
13#include "ui/app_list/app_list_export.h"
14
15namespace app_list {
16
17class SearchResult;
18
19class APP_LIST_EXPORT SearchProvider {
20 public:
21  typedef ScopedVector<SearchResult> Results;
22  typedef base::Closure ResultChangedCallback;
23
24  SearchProvider();
25  virtual ~SearchProvider();
26
27  // Invoked to start a query.
28  virtual void Start(const base::string16& query) = 0;
29
30  // Invoked to stop the current query and no more results changes.
31  virtual void Stop() = 0;
32
33  void set_result_changed_callback(const ResultChangedCallback& callback) {
34    result_changed_callback_ = callback;
35  }
36
37  // TODO(mukai): Fix the ownership and copying of the results.
38  void ReleaseResult(std::vector<SearchResult*>* results);
39
40  const Results& results() const { return results_; }
41
42 protected:
43  // Interface for the derived class to generate search results.
44  void Add(scoped_ptr<SearchResult> result);
45  void ClearResults();
46
47 private:
48  void FireResultChanged();
49
50  ResultChangedCallback result_changed_callback_;
51  Results results_;
52
53  DISALLOW_COPY_AND_ASSIGN(SearchProvider);
54};
55
56}  // namespace app_list
57
58#endif  // UI_APP_LIST_SEARCH_PROVIDER_H_
59