#ifndef CHROME_BROWSER_UI_APP_LIST_SEARCH_WEBSTORE_WEBSTORE_RESULT_H_
#define CHROME_BROWSER_UI_APP_LIST_SEARCH_WEBSTORE_WEBSTORE_RESULT_H_
#include <string>
#include "base/basictypes.h"
#include "base/memory/weak_ptr.h"
#include "chrome/browser/extensions/install_observer.h"
#include "chrome/browser/ui/app_list/search/chrome_search_result.h"
#include "url/gurl.h"
class AppListControllerDelegate;
class Profile;
namespace extensions {
class InstallTracker;
}
namespace app_list {
class WebstoreResult : public ChromeSearchResult,
public extensions::InstallObserver {
public:
WebstoreResult(Profile* profile,
const std::string& app_id,
const std::string& localized_name,
const GURL& icon_url,
AppListControllerDelegate* controller);
virtual ~WebstoreResult();
virtual void Open(int event_flags) OVERRIDE;
virtual void InvokeAction(int action_index, int event_flags) OVERRIDE;
virtual scoped_ptr<ChromeSearchResult> Duplicate() OVERRIDE;
virtual ChromeSearchResultType GetType() OVERRIDE;
private:
void UpdateActions();
void SetDefaultDetails();
void OnIconLoaded();
void StartInstall(bool launch_ephemeral_app);
void InstallCallback(bool success, const std::string& error);
void StartObservingInstall();
void StopObservingInstall();
virtual void OnDownloadProgress(const std::string& extension_id,
int percent_downloaded) OVERRIDE;
virtual void OnExtensionInstalled(
const extensions::Extension* extension) OVERRIDE;
virtual void OnShutdown() OVERRIDE;
Profile* profile_;
const std::string app_id_;
const std::string localized_name_;
const GURL icon_url_;
gfx::ImageSkia icon_;
base::WeakPtrFactory<WebstoreResult> weak_factory_;
AppListControllerDelegate* controller_;
extensions::InstallTracker* install_tracker_;
DISALLOW_COPY_AND_ASSIGN(WebstoreResult);
};
}
#endif