app_result.h revision 3551c9c881056c480085172ff9840cab31610854
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_APP_RESULT_H_
6#define CHROME_BROWSER_UI_APP_LIST_SEARCH_APP_RESULT_H_
7
8#include <string>
9
10#include "base/memory/scoped_ptr.h"
11#include "chrome/browser/extensions/extension_icon_image.h"
12#include "chrome/browser/extensions/install_observer.h"
13#include "chrome/browser/ui/app_list/app_context_menu_delegate.h"
14#include "chrome/browser/ui/app_list/search/chrome_search_result.h"
15#include "chrome/browser/ui/extensions/extension_enable_flow_delegate.h"
16
17class AppListControllerDelegate;
18class ExtensionEnableFlow;
19class Profile;
20
21namespace extensions {
22class InstallTracker;
23}
24
25namespace app_list {
26
27class AppContextMenu;
28class TokenizedString;
29class TokenizedStringMatch;
30
31class AppResult : public ChromeSearchResult,
32                  public extensions::IconImage::Observer,
33                  public AppContextMenuDelegate,
34                  public ExtensionEnableFlowDelegate,
35                  public extensions::InstallObserver {
36 public:
37  AppResult(Profile* profile,
38            const std::string& app_id,
39            AppListControllerDelegate* controller);
40  virtual ~AppResult();
41
42  void UpdateFromMatch(const TokenizedString& title,
43                       const TokenizedStringMatch& match);
44
45  // ChromeSearchResult overides:
46  virtual void Open(int event_flags) OVERRIDE;
47  virtual void InvokeAction(int action_index, int event_flags) OVERRIDE;
48  virtual scoped_ptr<ChromeSearchResult> Duplicate() OVERRIDE;
49  virtual ui::MenuModel* GetContextMenuModel() OVERRIDE;
50  virtual ChromeSearchResultType GetType() OVERRIDE;
51
52 private:
53  void StartObservingInstall();
54  void StopObservingInstall();
55
56  // Checks if extension is disabled and if enable flow should be started.
57  // Returns true if extension enable flow is started or there is already one
58  // running.
59  bool RunExtensionEnableFlow();
60
61  // Updates the app item's icon, if necessary making it gray.
62  void UpdateIcon();
63
64  // extensions::IconImage::Observer overrides:
65  virtual void OnExtensionIconImageChanged(
66      extensions::IconImage* image) OVERRIDE;
67
68  // AppContextMenuDelegate overrides:
69  virtual void ExecuteLaunchCommand(int event_flags) OVERRIDE;
70
71  // ExtensionEnableFlowDelegate overrides:
72  virtual void ExtensionEnableFlowFinished() OVERRIDE;
73  virtual void ExtensionEnableFlowAborted(bool user_initiated) OVERRIDE;
74
75  // extensions::InstallObserver overrides:
76  virtual void OnBeginExtensionInstall(const std::string& extension_id,
77                                       const std::string& extension_name,
78                                       const gfx::ImageSkia& installing_icon,
79                                       bool is_app,
80                                       bool is_platform_app) OVERRIDE;
81  virtual void OnDownloadProgress(const std::string& extension_id,
82                                  int percent_downloaded) OVERRIDE;
83  virtual void OnInstallFailure(const std::string& extension_id) OVERRIDE;
84  virtual void OnExtensionInstalled(
85      const extensions::Extension* extension) OVERRIDE;
86  virtual void OnExtensionLoaded(
87      const extensions::Extension* extension) OVERRIDE;
88  virtual void OnExtensionUnloaded(
89      const extensions::Extension* extension) OVERRIDE;
90  virtual void OnExtensionUninstalled(
91      const extensions::Extension* extension) OVERRIDE;
92  virtual void OnAppsReordered() OVERRIDE;
93  virtual void OnAppInstalledToAppList(
94      const std::string& extension_id) OVERRIDE;
95  virtual void OnShutdown() OVERRIDE;
96
97  Profile* profile_;
98  const std::string app_id_;
99  AppListControllerDelegate* controller_;
100
101  bool is_platform_app_;
102  scoped_ptr<extensions::IconImage> icon_;
103  scoped_ptr<AppContextMenu> context_menu_;
104  scoped_ptr<ExtensionEnableFlow> extension_enable_flow_;
105
106  extensions::InstallTracker* install_tracker_;  // Not owned.
107
108  DISALLOW_COPY_AND_ASSIGN(AppResult);
109};
110
111}  // namespace app_list
112
113#endif  // CHROME_BROWSER_UI_APP_LIST_SEARCH_APP_RESULT_H_
114