Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / app_list / search / app_result.cc
index 56e3d88..92c68fd 100644 (file)
@@ -4,24 +4,26 @@
 
 #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"
 
@@ -33,8 +35,10 @@ AppResult::AppResult(Profile* profile,
     : 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()
@@ -43,19 +47,20 @@ AppResult::AppResult(Profile* profile,
 
   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,
@@ -72,6 +77,17 @@ 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()
@@ -79,6 +95,10 @@ void AppResult::Open(int event_flags) {
   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;
@@ -120,18 +140,17 @@ ui::MenuModel* AppResult::GetContextMenuModel() {
   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() {
@@ -139,7 +158,7 @@ bool AppResult::RunExtensionEnableFlow() {
     return false;
 
   if (!extension_enable_flow_) {
-    controller_->OnShowExtensionPrompt();
+    controller_->OnShowChildDialog();
 
     extension_enable_flow_.reset(new ExtensionEnableFlow(
         profile_, app_id_, this));
@@ -171,7 +190,7 @@ void AppResult::ExecuteLaunchCommand(int event_flags) {
 
 void AppResult::ExtensionEnableFlowFinished() {
   extension_enable_flow_.reset();
-  controller_->OnCloseExtensionPrompt();
+  controller_->OnCloseChildDialog();
 
   // Automatically open app after enabling.
   Open(ui::EF_NONE);
@@ -179,36 +198,26 @@ void AppResult::ExtensionEnableFlowFinished() {
 
 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