blob: 4474d943b1bc1a012331bde4f8e5ea274e7d8732 [file] [log] [blame]
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_UI_APP_LIST_SEARCH_APP_RESULT_H_
#define CHROME_BROWSER_UI_APP_LIST_SEARCH_APP_RESULT_H_
#include <string>
#include "base/memory/scoped_ptr.h"
#include "chrome/browser/extensions/extension_icon_image.h"
#include "chrome/browser/extensions/install_observer.h"
#include "chrome/browser/ui/app_list/app_context_menu_delegate.h"
#include "chrome/browser/ui/app_list/search/chrome_search_result.h"
#include "chrome/browser/ui/extensions/extension_enable_flow_delegate.h"
class AppListControllerDelegate;
class ExtensionEnableFlow;
class Profile;
namespace extensions {
class InstallTracker;
}
namespace app_list {
class AppContextMenu;
class TokenizedString;
class TokenizedStringMatch;
class AppResult : public ChromeSearchResult,
public extensions::IconImage::Observer,
public AppContextMenuDelegate,
public ExtensionEnableFlowDelegate,
public extensions::InstallObserver {
public:
AppResult(Profile* profile,
const std::string& app_id,
AppListControllerDelegate* controller);
virtual ~AppResult();
void UpdateFromMatch(const TokenizedString& title,
const TokenizedStringMatch& match);
// ChromeSearchResult overides:
virtual void Open(int event_flags) OVERRIDE;
virtual void InvokeAction(int action_index, int event_flags) OVERRIDE;
virtual scoped_ptr<ChromeSearchResult> Duplicate() OVERRIDE;
virtual ui::MenuModel* GetContextMenuModel() OVERRIDE;
virtual ChromeSearchResultType GetType() OVERRIDE;
private:
void StartObservingInstall();
void StopObservingInstall();
// Checks if extension is disabled and if enable flow should be started.
// Returns true if extension enable flow is started or there is already one
// running.
bool RunExtensionEnableFlow();
// Updates the app item's icon, if necessary making it gray.
void UpdateIcon();
// extensions::IconImage::Observer overrides:
virtual void OnExtensionIconImageChanged(
extensions::IconImage* image) OVERRIDE;
// AppContextMenuDelegate overrides:
virtual void ExecuteLaunchCommand(int event_flags) OVERRIDE;
// ExtensionEnableFlowDelegate overrides:
virtual void ExtensionEnableFlowFinished() OVERRIDE;
virtual void ExtensionEnableFlowAborted(bool user_initiated) OVERRIDE;
// extensions::InstallObserver overrides:
virtual void OnBeginExtensionInstall(const std::string& extension_id,
const std::string& extension_name,
const gfx::ImageSkia& installing_icon,
bool is_app,
bool is_platform_app) OVERRIDE;
virtual void OnDownloadProgress(const std::string& extension_id,
int percent_downloaded) OVERRIDE;
virtual void OnInstallFailure(const std::string& extension_id) OVERRIDE;
virtual void OnExtensionInstalled(
const extensions::Extension* extension) OVERRIDE;
virtual void OnExtensionLoaded(
const extensions::Extension* extension) OVERRIDE;
virtual void OnExtensionUnloaded(
const extensions::Extension* extension) OVERRIDE;
virtual void OnExtensionUninstalled(
const extensions::Extension* extension) OVERRIDE;
virtual void OnAppsReordered() OVERRIDE;
virtual void OnAppInstalledToAppList(
const std::string& extension_id) OVERRIDE;
virtual void OnShutdown() OVERRIDE;
Profile* profile_;
const std::string app_id_;
AppListControllerDelegate* controller_;
bool is_platform_app_;
scoped_ptr<extensions::IconImage> icon_;
scoped_ptr<AppContextMenu> context_menu_;
scoped_ptr<ExtensionEnableFlow> extension_enable_flow_;
extensions::InstallTracker* install_tracker_; // Not owned.
DISALLOW_COPY_AND_ASSIGN(AppResult);
};
} // namespace app_list
#endif // CHROME_BROWSER_UI_APP_LIST_SEARCH_APP_RESULT_H_