190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// found in the LICENSE file.
490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#ifndef CHROME_BROWSER_UI_APP_LIST_SEARCH_WEBSTORE_WEBSTORE_RESULT_H_
658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#define CHROME_BROWSER_UI_APP_LIST_SEARCH_WEBSTORE_WEBSTORE_RESULT_H_
790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include <string>
990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
1090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "base/basictypes.h"
1190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "base/memory/weak_ptr.h"
12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/browser/extensions/install_observer.h"
1390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/ui/app_list/search/chrome_search_result.h"
147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "url/gurl.h"
1590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass AppListControllerDelegate;
1790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class Profile;
1890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace extensions {
20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass InstallTracker;
21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
2390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace app_list {
2490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass WebstoreResult : public ChromeSearchResult,
26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                       public extensions::InstallObserver {
2790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) public:
2890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  WebstoreResult(Profile* profile,
2990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                 const std::string& app_id,
3090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                 const std::string& localized_name,
31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                 const GURL& icon_url,
32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                 AppListControllerDelegate* controller);
3390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  virtual ~WebstoreResult();
3490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
3590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // ChromeSearchResult overides:
3690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  virtual void Open(int event_flags) OVERRIDE;
3790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  virtual void InvokeAction(int action_index, int event_flags) OVERRIDE;
3890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  virtual scoped_ptr<ChromeSearchResult> Duplicate() OVERRIDE;
39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual ChromeSearchResultType GetType() OVERRIDE;
4090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
4190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) private:
42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void UpdateActions();
4390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  void SetDefaultDetails();
4490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  void OnIconLoaded();
4590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  void StartInstall(bool launch_ephemeral_app);
47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void InstallCallback(bool success, const std::string& error);
48eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
49eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void StartObservingInstall();
50eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void StopObservingInstall();
51eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
52eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // extensions::InstallObserver overrides:
53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void OnBeginExtensionInstall(
54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      const ExtensionInstallParams& params) OVERRIDE;
55eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual void OnDownloadProgress(const std::string& extension_id,
56eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                  int percent_downloaded) OVERRIDE;
57eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual void OnInstallFailure(const std::string& extension_id) OVERRIDE;
58eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual void OnExtensionInstalled(
59eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      const extensions::Extension* extension) OVERRIDE;
607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  virtual void OnExtensionLoaded(
617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      const extensions::Extension* extension) OVERRIDE;
627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  virtual void OnExtensionUnloaded(
63eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      const extensions::Extension* extension) OVERRIDE;
647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  virtual void OnExtensionUninstalled(
65eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      const extensions::Extension* extension) OVERRIDE;
66eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual void OnAppsReordered() OVERRIDE;
67eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual void OnAppInstalledToAppList(
68eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      const std::string& extension_id) OVERRIDE;
69eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual void OnShutdown() OVERRIDE;
70eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
7190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  Profile* profile_;
7290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  const std::string app_id_;
7390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  const std::string localized_name_;
7490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  const GURL icon_url_;
7590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
7690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  gfx::ImageSkia icon_;
7790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  base::WeakPtrFactory<WebstoreResult> weak_factory_;
7890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
79eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  AppListControllerDelegate* controller_;
80eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  extensions::InstallTracker* install_tracker_;  // Not owned.
81eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
8290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(WebstoreResult);
8390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)};
8490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
8590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}  // namespace app_list
8690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
8758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif  // CHROME_BROWSER_UI_APP_LIST_SEARCH_WEBSTORE_WEBSTORE_RESULT_H_
88