190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// found in the LICENSE file.
490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#ifndef CHROME_BROWSER_UI_APP_LIST_SEARCH_APP_SEARCH_PROVIDER_H_
690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#define CHROME_BROWSER_UI_APP_LIST_SEARCH_APP_SEARCH_PROVIDER_H_
790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "base/basictypes.h"
990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "base/memory/scoped_vector.h"
10f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/scoped_observer.h"
11f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "extensions/browser/extension_registry_observer.h"
12f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "ui/app_list/search_provider.h"
1390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
1490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class AppListControllerDelegate;
1590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class Profile;
1690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace extensions {
18f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class ExtensionRegistry;
195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class ExtensionSet;
205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace app_list {
2390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace test {
255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class AppSearchProviderTest;
265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class AppSearchProvider : public SearchProvider,
29f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                          public extensions::ExtensionRegistryObserver {
3090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) public:
3190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  AppSearchProvider(Profile* profile,
3290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                    AppListControllerDelegate* list_controller);
3390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  virtual ~AppSearchProvider();
3490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
3590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // SearchProvider overrides:
3690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  virtual void Start(const base::string16& query) OVERRIDE;
3790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  virtual void Stop() OVERRIDE;
3890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
3990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) private:
4090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  class App;
4190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  typedef ScopedVector<App> Apps;
4290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  friend test::AppSearchProviderTest;
445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  void StartImpl(const base::Time& current_time, const base::string16& query);
465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // Adds extensions to apps container if they should be displayed.
485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void AddApps(const extensions::ExtensionSet& extensions);
4990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  void RefreshApps();
5090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
51f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // extensions::ExtensionRegistryObserver overrides:
52f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual void OnExtensionLoaded(
53f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      content::BrowserContext* browser_context,
54f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      const extensions::Extension* extension) OVERRIDE;
55f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual void OnExtensionUninstalled(
56f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      content::BrowserContext* browser_context,
575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      const extensions::Extension* extension,
585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      extensions::UninstallReason reason) OVERRIDE;
5990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
6090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  Profile* profile_;
6190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  AppListControllerDelegate* list_controller_;
62f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
63f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  ScopedObserver<extensions::ExtensionRegistry,
64f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                 extensions::ExtensionRegistryObserver>
65f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      extension_registry_observer_;
6690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
6790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  Apps apps_;
6890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
6990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(AppSearchProvider);
7090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)};
7190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
7290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}  // namespace app_list
7390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
7490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#endif  // CHROME_BROWSER_UI_APP_LIST_SEARCH_APP_SEARCH_PROVIDER_H_
75