Chromium Code Reviews| Index: chrome/browser/search_engines/template_url_service_android.cc |
| diff --git a/chrome/browser/search_engines/template_url_service_android.cc b/chrome/browser/search_engines/template_url_service_android.cc |
| index 306cd44c2130303ba5a742eaabe1db46d58d08b0..eadc562f654fafe1d3517b83ab22bbe91318f791 100644 |
| --- a/chrome/browser/search_engines/template_url_service_android.cc |
| +++ b/chrome/browser/search_engines/template_url_service_android.cc |
| @@ -143,19 +143,39 @@ void TemplateUrlServiceAndroid::OnTemplateURLServiceLoaded() { |
| void TemplateUrlServiceAndroid::LoadTemplateURLs() { |
| template_urls_ = template_url_service_->GetTemplateURLs(); |
| - TemplateURL* default_search_provider = |
| - template_url_service_->GetDefaultSearchProvider(); |
| - |
| - auto comp = [&](const TemplateURL* lhs, const TemplateURL* rhs) { |
| + auto isDefault = [&](TemplateURL* url) { |
| + return template_url_service_->ShowInDefaultList(url); |
| + }; |
| + auto defaultComp = [&](const TemplateURL* lhs, const TemplateURL* rhs) { |
| bool rhs_prepopulated = |
| template_url_service_->IsPrepopulatedOrCreatedByPolicy(rhs); |
| if (template_url_service_->IsPrepopulatedOrCreatedByPolicy(lhs)) { |
| return !rhs_prepopulated || |
| (lhs->prepopulate_id() < rhs->prepopulate_id()); |
| } |
| - return (lhs == default_search_provider && !rhs_prepopulated); |
| + return false; |
| }; |
| - std::sort(template_urls_.begin(), template_urls_.end(), comp); |
| + auto customComp = [&](const TemplateURL* lhs, const TemplateURL* rhs) { |
| + return lhs->last_visited().ToTimeT() > rhs->last_visited().ToTimeT(); |
| + }; |
| + auto isRecent = [](TemplateURL* url) { |
| + return url->last_visited().ToTimeT() < |
| + (base::Time::Now() - base::TimeDelta::FromDays(2)).ToTimeT(); |
| + }; |
| + std::vector<TemplateURL*>::iterator bound = |
| + std::partition(template_urls_.begin(), template_urls_.end(), isDefault); |
| + std::sort(template_urls_.begin(), bound, defaultComp); |
| + std::sort(bound, template_urls_.end(), customComp); |
| + template_urls_.erase(std::remove_if(bound, template_urls_.end(), isRecent), |
| + template_urls_.end()); |
| + int num_remove = CountRemovedSearchEngineNum(bound); |
| + template_urls_.resize(template_urls_.size() - num_remove); |
| +} |
|
Peter Kasting
2016/12/08 06:56:27
Functionally, this looks like it will work.
Here'
ltian
2016/12/09 00:53:08
That's a great tutorial! Thanks for the great effo
|
| + |
| +int TemplateUrlServiceAndroid::CountRemovedSearchEngineNum( |
| + std::vector<TemplateURL*>::iterator bound) { |
| + int num_custom_engine = std::distance(bound, template_urls_.end()); |
| + return std::max(num_custom_engine - 3, 0); |
| } |
| void TemplateUrlServiceAndroid::OnTemplateURLServiceChanged() { |