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_WEBUI_APP_LIST_START_PAGE_HANDLER_H_
6#define CHROME_BROWSER_UI_WEBUI_APP_LIST_START_PAGE_HANDLER_H_
7
8#include "base/basictypes.h"
9#include "base/compiler_specific.h"
10#include "base/prefs/pref_change_registrar.h"
11#include "base/scoped_observer.h"
12#include "chrome/browser/ui/app_list/recommended_apps_observer.h"
13#include "content/public/browser/web_ui_message_handler.h"
14#include "extensions/browser/extension_registry_observer.h"
15
16namespace base {
17class ListValue;
18}
19
20namespace extensions {
21class ExtensionRegistry;
22}
23
24namespace app_list {
25
26class RecommendedApps;
27
28// Handler for the app launcher start page.
29class StartPageHandler : public content::WebUIMessageHandler,
30                         public extensions::ExtensionRegistryObserver,
31                         public RecommendedAppsObserver {
32 public:
33  StartPageHandler();
34  virtual ~StartPageHandler();
35
36 private:
37  // content::WebUIMessageHandler overrides:
38  virtual void RegisterMessages() OVERRIDE;
39
40  // extensions::ExtensionRegistryObserver implementation.
41  virtual void OnExtensionLoaded(
42      content::BrowserContext* browser_context,
43      const extensions::Extension* extension) OVERRIDE;
44  virtual void OnExtensionUnloaded(
45      content::BrowserContext* browser_context,
46      const extensions::Extension* extension,
47      extensions::UnloadedExtensionInfo::Reason reason) OVERRIDE;
48
49  // RecommendedAppsObserver overrdies:
50  virtual void OnRecommendedAppsChanged() OVERRIDE;
51
52  // Creates a ListValue for the recommended apps and sends it to js side.
53  void SendRecommendedApps();
54
55#if defined(OS_CHROMEOS)
56  // Called when the pref has been changed.
57  void OnHotwordEnabledChanged();
58#endif
59
60  // JS callbacks.
61  void HandleInitialize(const base::ListValue* args);
62  void HandleLaunchApp(const base::ListValue* args);
63  void HandleSpeechResult(const base::ListValue* args);
64  void HandleSpeechSoundLevel(const base::ListValue* args);
65  void HandleSpeechRecognition(const base::ListValue* args);
66
67  RecommendedApps* recommended_apps_;  // Not owned.
68  PrefChangeRegistrar pref_change_registrar_;
69
70  ScopedObserver<extensions::ExtensionRegistry,
71                 extensions::ExtensionRegistryObserver>
72      extension_registry_observer_;
73
74  DISALLOW_COPY_AND_ASSIGN(StartPageHandler);
75};
76
77}  // namespace app_list
78
79#endif  // CHROME_BROWSER_UI_WEBUI_APP_LIST_START_PAGE_HANDLER_H_
80