Home | History | Annotate | Download | only in app_list
      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 
     15 namespace app_list {
     16 
     17 class SearchResult;
     18 
     19 class 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