Index: chrome/browser/ui/app_list/search/app_search_provider.cc |
diff --git a/chrome/browser/ui/app_list/search/app_search_provider.cc b/chrome/browser/ui/app_list/search/app_search_provider.cc |
index 9237b076500c9b6c34b8061ede32b14b23132dd5..8604d20e65581d54171126f93cd2438eb89f7360 100644 |
--- a/chrome/browser/ui/app_list/search/app_search_provider.cc |
+++ b/chrome/browser/ui/app_list/search/app_search_provider.cc |
@@ -14,6 +14,7 @@ |
#include "chrome/browser/ui/app_list/search/app_result.h" |
#include "chrome/browser/ui/app_list/search/tokenized_string.h" |
#include "chrome/browser/ui/app_list/search/tokenized_string_match.h" |
+#include "extensions/browser/extension_prefs.h" |
#include "extensions/browser/extension_registry.h" |
#include "extensions/browser/extension_system.h" |
#include "extensions/common/extension.h" |
@@ -25,18 +26,25 @@ namespace app_list { |
class AppSearchProvider::App { |
public: |
- explicit App(const extensions::Extension* extension) |
+ explicit App(const extensions::Extension* extension, |
+ const base::Time& last_launch_time) |
: app_id_(extension->id()), |
- indexed_name_(base::UTF8ToUTF16(extension->name())) { |
- } |
+ indexed_name_(base::UTF8ToUTF16(extension->name())), |
+ last_launch_time_(last_launch_time) {} |
~App() {} |
const std::string& app_id() const { return app_id_; } |
const TokenizedString& indexed_name() const { return indexed_name_; } |
+ const base::Time& last_launch_time() const { return last_launch_time_; } |
+ |
+ static bool AppLaunchedMoreRecent(App* const app1, App* const app2) { |
+ return app1->last_launch_time() > app2->last_launch_time(); |
+ } |
private: |
const std::string app_id_; |
TokenizedString indexed_name_; |
+ base::Time last_launch_time_; |
DISALLOW_COPY_AND_ASSIGN(App); |
}; |
@@ -52,6 +60,22 @@ AppSearchProvider::AppSearchProvider(Profile* profile, |
AppSearchProvider::~AppSearchProvider() {} |
+void AppSearchProvider::FetchRecommendations() { |
+ ClearResults(); |
+ |
+ // Reload apps to ensure we have the latest launch time information. |
Matt Giuca
2014/07/22 04:31:07
nit: Don't use the word "reload"; it implies you a
calamity
2014/07/22 07:24:04
Done.
|
+ RefreshApps(); |
+ |
+ for (Apps::const_iterator app_it = apps_.begin(); app_it != apps_.end(); |
+ ++app_it) { |
+ scoped_ptr<AppResult> result( |
+ new AppResult(profile_, (*app_it)->app_id(), list_controller_)); |
+ result->set_title((*app_it)->indexed_name().text()); |
+ result->UpdateFromLastLaunched((*app_it)->last_launch_time()); |
+ Add(result.PassAs<SearchResult>()); |
+ } |
+} |
+ |
void AppSearchProvider::Start(const base::string16& query) { |
const TokenizedString query_terms(query); |
@@ -74,6 +98,7 @@ void AppSearchProvider::Start(const base::string16& query) { |
void AppSearchProvider::Stop() {} |
void AppSearchProvider::AddApps(const extensions::ExtensionSet& extensions) { |
+ extensions::ExtensionPrefs* prefs = extensions::ExtensionPrefs::Get(profile_); |
for (extensions::ExtensionSet::const_iterator iter = extensions.begin(); |
iter != extensions.end(); ++iter) { |
const extensions::Extension* app = iter->get(); |
@@ -84,7 +109,8 @@ void AppSearchProvider::AddApps(const extensions::ExtensionSet& extensions) { |
if (profile_->IsOffTheRecord() && |
!extensions::util::CanLoadInIncognito(app, profile_)) |
continue; |
- apps_.push_back(new App(app)); |
+ |
+ apps_.push_back(new App(app, prefs->GetLastLaunchTime(app->id()))); |
} |
} |
@@ -94,6 +120,7 @@ void AppSearchProvider::RefreshApps() { |
AddApps(registry->enabled_extensions()); |
AddApps(registry->disabled_extensions()); |
AddApps(registry->terminated_extensions()); |
+ std::sort(apps_.begin(), apps_.end(), &App::AppLaunchedMoreRecent); |
} |
void AppSearchProvider::OnExtensionLoaded( |