#include "chrome/browser/ui/app_list/search/app_result.h"
+#include "base/time/time.h"
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/extensions/extension_util.h"
-#include "chrome/browser/extensions/install_tracker.h"
-#include "chrome/browser/extensions/install_tracker_factory.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/app_list/app_context_menu.h"
#include "chrome/browser/ui/app_list/app_list_controller_delegate.h"
-#include "chrome/browser/ui/app_list/search/tokenized_string.h"
-#include "chrome/browser/ui/app_list/search/tokenized_string_match.h"
#include "chrome/browser/ui/extensions/extension_enable_flow.h"
#include "chrome/browser/ui/webui/ntp/core_app_launcher_handler.h"
-#include "chrome/common/extensions/extension_icon_set.h"
-#include "chrome/common/extensions/manifest_handlers/icons_handler.h"
#include "content/public/browser/user_metrics.h"
+#include "extensions/browser/extension_registry.h"
#include "extensions/browser/extension_system.h"
#include "extensions/browser/extension_system_provider.h"
#include "extensions/browser/extensions_browser_client.h"
+#include "extensions/common/constants.h"
#include "extensions/common/extension.h"
+#include "extensions/common/extension_icon_set.h"
+#include "extensions/common/manifest_handlers/icons_handler.h"
+#include "ui/app_list/app_list_switches.h"
+#include "ui/app_list/search/tokenized_string.h"
+#include "ui/app_list/search/tokenized_string_match.h"
#include "ui/gfx/color_utils.h"
#include "ui/gfx/image/image_skia_operations.h"
: profile_(profile),
app_id_(app_id),
controller_(controller),
- install_tracker_(NULL) {
+ extension_registry_(NULL) {
set_id(extensions::Extension::GetBaseURLFromExtensionId(app_id_).spec());
+ if (app_list::switches::IsExperimentalAppListEnabled())
+ set_display_type(DISPLAY_TILE);
const extensions::Extension* extension =
extensions::ExtensionSystem::Get(profile_)->extension_service()
is_platform_app_ = extension->is_platform_app();
- icon_.reset(new extensions::IconImage(
- profile_,
- extension,
- extensions::IconsInfo::GetIcons(extension),
- extension_misc::EXTENSION_ICON_SMALL,
- extensions::IconsInfo::GetDefaultAppIcon(),
- this));
+ icon_.reset(
+ new extensions::IconImage(profile_,
+ extension,
+ extensions::IconsInfo::GetIcons(extension),
+ GetPreferredIconDimension(),
+ extensions::util::GetDefaultAppIcon(),
+ this));
UpdateIcon();
- StartObservingInstall();
+
+ StartObservingExtensionRegistry();
}
AppResult::~AppResult() {
- StopObservingInstall();
+ StopObservingExtensionRegistry();
}
void AppResult::UpdateFromMatch(const TokenizedString& title,
set_relevance(match.relevance());
}
+void AppResult::UpdateFromLastLaunched(const base::Time& current_time,
+ const base::Time& last_launched) {
+ base::TimeDelta delta = current_time - last_launched;
+ DCHECK_LE(0, delta.InSeconds());
+ const int kSecondsInWeek = 60 * 60 * 24 * 7;
+
+ // Set the relevance to a value between 0 and 1. This function decays as the
+ // time delta increases and reaches a value of 0.5 at 1 week.
+ set_relevance(1 / (1 + delta.InSecondsF() / kSecondsInWeek));
+}
+
void AppResult::Open(int event_flags) {
const extensions::Extension* extension =
extensions::ExtensionSystem::Get(profile_)->extension_service()
if (!extension)
return;
+ // Don't auto-enable apps that cannot be launched.
+ if (!extensions::util::IsAppLaunchable(app_id_, profile_))
+ return;
+
// Check if enable flow is already running or should be started
if (RunExtensionEnableFlow())
return;
return context_menu_->GetMenuModel();
}
-void AppResult::StartObservingInstall() {
- DCHECK(!install_tracker_);
+void AppResult::StartObservingExtensionRegistry() {
+ DCHECK(!extension_registry_);
- install_tracker_ = extensions::InstallTrackerFactory::GetForProfile(profile_);
- install_tracker_->AddObserver(this);
+ extension_registry_ = extensions::ExtensionRegistry::Get(profile_);
+ extension_registry_->AddObserver(this);
}
-void AppResult::StopObservingInstall() {
- if (install_tracker_)
- install_tracker_->RemoveObserver(this);
-
- install_tracker_ = NULL;
+void AppResult::StopObservingExtensionRegistry() {
+ if (extension_registry_)
+ extension_registry_->RemoveObserver(this);
+ extension_registry_ = NULL;
}
bool AppResult::RunExtensionEnableFlow() {
return false;
if (!extension_enable_flow_) {
- controller_->OnShowExtensionPrompt();
+ controller_->OnShowChildDialog();
extension_enable_flow_.reset(new ExtensionEnableFlow(
profile_, app_id_, this));
void AppResult::ExtensionEnableFlowFinished() {
extension_enable_flow_.reset();
- controller_->OnCloseExtensionPrompt();
+ controller_->OnCloseChildDialog();
// Automatically open app after enabling.
Open(ui::EF_NONE);
void AppResult::ExtensionEnableFlowAborted(bool user_initiated) {
extension_enable_flow_.reset();
- controller_->OnCloseExtensionPrompt();
+ controller_->OnCloseChildDialog();
}
-void AppResult::OnBeginExtensionInstall(
- const ExtensionInstallParams& params) {}
-
-void AppResult::OnDownloadProgress(const std::string& extension_id,
- int percent_downloaded) {}
-
-void AppResult::OnInstallFailure(const std::string& extension_id) {}
-
-void AppResult::OnExtensionInstalled(const extensions::Extension* extension) {}
-
-void AppResult::OnExtensionLoaded(const extensions::Extension* extension) {
+void AppResult::OnExtensionLoaded(content::BrowserContext* browser_context,
+ const extensions::Extension* extension) {
UpdateIcon();
}
-void AppResult::OnExtensionUnloaded(const extensions::Extension* extension) {}
-
-void AppResult::OnExtensionUninstalled(const extensions::Extension* extension) {
+void AppResult::OnExtensionUninstalled(content::BrowserContext* browser_context,
+ const extensions::Extension* extension,
+ extensions::UninstallReason reason) {
if (extension->id() != app_id_)
return;
NotifyItemUninstalled();
}
-void AppResult::OnAppsReordered() {}
-
-void AppResult::OnAppInstalledToAppList(const std::string& extension_id) {}
-
-void AppResult::OnShutdown() { StopObservingInstall(); }
+void AppResult::OnShutdown(extensions::ExtensionRegistry* registry) {
+ DCHECK_EQ(extension_registry_, registry);
+ StopObservingExtensionRegistry();
+}
} // namespace app_list