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