blob: dbee962152f7511bf183d955b908cc321d465a0d [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_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/common/extensions/webstore_install_result.h"
#include "extensions/browser/extension_registry_observer.h"
#include "extensions/common/manifest.h"
#include "ui/app_list/search_result.h"
#include "url/gurl.h"
class AppListControllerDelegate;
class Profile;
namespace extensions {
class ExtensionRegistry;
class InstallTracker;
}
namespace app_list {
class WebstoreResult : public SearchResult,
public extensions::InstallObserver,
public extensions::ExtensionRegistryObserver {
public:
WebstoreResult(Profile* profile,
const std::string& app_id,
const std::string& localized_name,
const GURL& icon_url,
bool is_paid,
extensions::Manifest::Type item_type,
AppListControllerDelegate* controller);
~WebstoreResult() override;
const std::string& app_id() const { return app_id_; }
const GURL& icon_url() const { return icon_url_; }
extensions::Manifest::Type item_type() const { return item_type_; }
bool is_paid() const { return is_paid_; }
// SearchResult overrides:
void Open(int event_flags) override;
void InvokeAction(int action_index, int event_flags) override;
scoped_ptr<SearchResult> Duplicate() override;
private:
// Set the initial state and start observing both InstallObserver and
// ExtensionRegistryObserver.
void InitAndStartObserving();
void UpdateActions();
void SetDefaultDetails();
void OnIconLoaded();
void StartInstall(bool launch_ephemeral_app);
void InstallCallback(bool success,
const std::string& error,
extensions::webstore_install::Result result);
void LaunchCallback(extensions::webstore_install::Result result,
const std::string& error);
void StopObservingInstall();
void StopObservingRegistry();
// extensions::InstallObserver overrides:
void OnDownloadProgress(const std::string& extension_id,
int percent_downloaded) override;
void OnShutdown() override;
// extensions::ExtensionRegistryObserver overides:
void OnExtensionInstalled(content::BrowserContext* browser_context,
const extensions::Extension* extension,
bool is_update) override;
void OnShutdown(extensions::ExtensionRegistry* registry) override;
Profile* profile_;
const std::string app_id_;
const std::string localized_name_;
const GURL icon_url_;
const bool is_paid_;
extensions::Manifest::Type item_type_;
gfx::ImageSkia icon_;
AppListControllerDelegate* controller_;
extensions::InstallTracker* install_tracker_; // Not owned.
extensions::ExtensionRegistry* extension_registry_; // Not owned.
base::WeakPtrFactory<WebstoreResult> weak_factory_;
DISALLOW_COPY_AND_ASSIGN(WebstoreResult);
};
} // namespace app_list
#endif // CHROME_BROWSER_UI_APP_LIST_SEARCH_WEBSTORE_WEBSTORE_RESULT_H_